为什么这段代码返回None值?

时间:2017-09-18 13:13:12

标签: python function input chatbot

我编写了这个非常简单的代码,它应该响应特定的用户输入。我知道我做错了什么,但我不知道它是什么。当我输入一个单词或留空时,我会收到回复"无"。先感谢您 :) 这是我的代码:

func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) {
        print("Pinched or tapped on the map")
    }

1 个答案:

答案 0 :(得分: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遍历句子的每个字母,而不是每个。要迭代单词,将句子分开:

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"

我喜欢这个,因为它更像是简单的英语。