为什么此代码返回 None 值?
Why this code is returning a None value?
我编写了这段非常简单的代码,可以响应特定的用户输入。我知道我做错了什么,但我不知道那是什么。当我输入一个词或留空时,我会得到响应 "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()
for word in sentence:
if word.lower() in GREETING_KEYWORDS:
return random.choice(GREETING_RESPONSES)
else:
pass
如果 none 个单词在 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
遍历句子的每个 字母 ,而不是每个 单词 。要遍历单词,请将句子分开:
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"
我喜欢这个,因为它读起来更像通俗英语。
我编写了这段非常简单的代码,可以响应特定的用户输入。我知道我做错了什么,但我不知道那是什么。当我输入一个词或留空时,我会得到响应 "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()
for word in sentence:
if word.lower() in GREETING_KEYWORDS:
return random.choice(GREETING_RESPONSES)
else:
pass
如果 none 个单词在 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
遍历句子的每个 字母 ,而不是每个 单词 。要遍历单词,请将句子分开:
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"
我喜欢这个,因为它读起来更像通俗英语。