簡體   English   中英

為什么此代碼返回None值?

[英]Why this code is returning a None value?

我已經編寫了這個非常簡單的代碼,應該可以響應特定的用戶輸入。 我知道我做錯了,但是我不知道這是什么。 當我輸入一個單詞或留空時,我得到的響應為“無”。 在此先感謝您:)這是我的代碼:

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()
for word in sentence:
    if word.lower() in GREETING_KEYWORDS:
        return random.choice(GREETING_RESPONSES)
    else:
        pass

如果GREETING_KEYWORDS都沒有單詞怎么辦? 那么返回什么呢? 沒有發生這種情況的顯式return語句,因此答案是: None返回None內容。

如果for循環完成而沒有找到問候語,則可以通過返回默認響應來解決此問題。

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

下一個問題是, for word in sentencefor word in sentence會遍歷for word in sentence每個字母 ,而不是每個單詞 要遍歷單詞,請將句子分開:

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

接下來,我看到您想檢測兩個單詞的問候:怎么whats up 這是行不通的,因為將句子分成單詞意味着您只能檢查一個單詞的問候。 我建議反轉邏輯:遍歷所有可能的問候,看看它們是否在句子中。 (請注意,現在你不想分裂成句的話。)

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"

我喜歡它,因為它讀起來更像是普通的英語。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM