2013-07-23 5 views
-3

저는 프로그래밍에 익숙하지 않고 방금 Python을 배우기 시작했습니다. 나는 당신이 당신의 입장에서 "나쁜 단어"를 입력하면 단순히 탐지하는 작은 프로그램을 만들고 싶었습니다.목록에있는 항목이 Python의 다른 항목에 있는지 확인하십시오.

name = input ('Please enter your name. ') 
badword=['foo', 'bar'] 
if name in badword: 
    print ('No.') 
else: 
    print ('Yes') 

입력 한 내용의 전체를 취하여 해당 항목의 목록을 검색하므로이 방법은 작동하지 않습니다. 그리고 내가 우리를 시도하면 :

if badword in name: 

그리고 나서 나는 단지 오류가 난다. 목록의 각 부분을 호출 할 수는 있지만 특히 여러 가지 유형의 나쁜 단어를 입력하는 경우 코드가 많이 발생합니다. 코드가 적어서 내가 할 수있는 일에 시간이 오래 걸립니다. 여기서 조금 잃어 버렸고 Google 검색 결과가 건조 해졌습니다.

답변

5

는 각 단어테스트 할 badword 목록을 통해 루프 필요

for word in badword: 
    if word in name: 
     print('No.') 
     break 
else: 
    print('Yes.') 

else 절은 for 문장의 일부를; 루프가 이 아니고 break 문에 의해 중단 된 문일 때 실행됩니다.이 경우 badword의 값이 일치하지 않으면이 경우 실행됩니다.

any() function 및 발전기 식으로 단축 할 수 있습니다

if any(word in name for word in badword): 
    print('No.') 
else: 
    print('Yes.') 
1

두 번째 시도 : if badword in name 거의 권리입니다. 당신은 BADWORD의 모든 항목을 확인해야합니다 -이 같은 :

if any([ word for word in badword if word in name ]): 
    print('No') 
    break 
else: 
    print('Yes') 

any true를 반환 조건에 일치있는 경우입니다. [] 사이의 비트는 새 목록을 반환하는 목록 이해입니다. 예컨대 :

print([ word for word in badword ]) 

마지막 if word in name는 조건이 새 목록에 결국 True되는 동안 그 새 목록에 addign 항목, 그래서 유일한 항목에 대한 조건이다.

+0

당신이 그것을 사용하려고하지 않는 경우 메모리에 중간 목록을 만들 필요가 없습니다,'any'는 발전기 식으로 작동합니다. –

+0

예 - 좋습니다. Martijn의 대답은 upvoted. 감사 :) – SteveLove

0
inputs = [" some BAD sentense ", "some right sentense"] 
bad_words_list = ["bad", "wrong"] 

def check(enter): 
    """Check for word in bad words list. Note, check process not key sensitive. 

    Return True if sentense contains bad word.""" 
    sentense = enter.lower().split() 
    for word in bad_words_list: 
     if word.lower() in sentense: 
      return False 
    return True 

print "Is sentense bad? " + str(check(inputs[0])) 
print "Is sentense bad? " + str(check(inputs[1])) 

테스트는 :

$ python test.py 
Is sentense bad: False 
Is sentense bad: True 
관련 문제