2017-09-18 4 views
0

私はこの特定のユーザーの入力に対応すべきこの非常に単純なコードを書いています。私は何か間違っていることを知っていますが、私はそれが何であるか分かりません。単語を入力するか空白のままにすると、レスポンス "None"が返されます。事前にありがとう:)ここ は私のコードです:なぜこのコードがNone値を返すのですか?

import random 
# Sentences we'll respond with if the user greeted us 

GREETING_KEYWORDS = ("hello", "hi", "greetings", "sup", "whats up", "You") 
GREETING_RESPONSES = ["sup buddy", "Hola", "Halo", "Hi back?"] 


def check_for_greeting(sentence): 
    """If any of the words in the user's input was a greeting, return a greeting response""" 
    if sentence is not None: 
     for word in sentence: 
      if word.lower() in GREETING_KEYWORDS: 
       return random.choice(GREETING_RESPONSES) 
      else: 
       pass 
    elif sentence is None: 
     return "You got to say something if you want me to do the same." 
    else: 
     return "Something is wrong..." 


def chat_input(): 
    x = input("") 
    print(check_for_greeting(x)) 

# Run 
print("chat with me...") 
chat_input() 
+0

これは本当に質問自体とはあまりありませんが、私は '」」.join(文)のリストに文を回し'と 'LENを使用して、文の内部グリーティング単語の存在をチェック示唆([I GREETING_KEYWORDSで私のための私の文章であれば])> 0 ' –

+0

私は、ユーザーが入力したかわからなかった場合、彼らは入力「こんにちは」または「さようなら」の場合。 "GREETING KEYWORDS"のリストに一致するものがない場合、別のリストを作成してループする必要がありますか?ありがとう、あなたのフィードバックは便利です。 –

答えて

3
for word in sentence: 
    if word.lower() in GREETING_KEYWORDS: 
     return random.choice(GREETING_RESPONSES) 
    else: 
     pass 

言葉のどれもGREETING_KEYWORDSにされていない場合はどう?何が返されますか?その時の明示的なreturnの声明はありませんので、答えはNoneです。

forループが挨拶を見つけずに完了した場合、デフォルトの応答を返すことで修正できます。

for word in sentence: 
    if word.lower() in GREETING_KEYWORDS: 
     return random.choice(GREETING_RESPONSES) 
return "default response" 

次の問題は、文ではなく、各単語の各文字オーバーfor word in sentence反復するということです。言葉を反復するために、離れて文を分割:whats up

for word in sentence.split(): 
    if word.lower() in GREETING_KEYWORDS: 
     return random.choice(GREETING_RESPONSES) 
return "default response" 

次に、私はあなたが2ワード挨拶を検出することを参照してください。文章を単語に分割すると、それは機能しません.1単語の挨拶だけを確認できるということです。私は論理を反転することをお勧めします:可能なすべての挨拶をループして、それらが文中にあるかどうかを確認します。 (今あなたが単語に文を分割したくないんに注意してください。)

for greeting in GREETING_KEYWORDS: 
    if greeting in sentence: 
     return random.choice(GREETING_RESPONSES) 
return "default response" 

最後に、これはもう少し高度ですが、ダウンのチェックを簡単にするためにジェネレータ式プラスany()を使用することができます単純なif/else。

if any(greeting in sentence for greeting in GREETING_KEYWORDS): 
    return random.choice(GREETING_RESPONSES) 
else: 
    return "default response" 

私はこれは普通の英語のように読むためです。

+0

(文中に挨拶場合)GREETING_KEYWORDSに挨拶するために(random.choice(GREETING_RESPONSES)) '次を返し、 'デフォルト')' this'' 'hi''は 'である' のような' –

+1

唯一の欠点は、部分文字列であります –

関連する問題