由于缩进,部分Chatbot代码未执行?

时间:2019-04-18 17:08:19

标签: python python-3.x

在聊天机器人中,我列出了一个名为“ greetings”的列表。它包含标准的问候语,“嗨”,“你好”,“怎么了”等。我要添加它,以便使其输出“什么了吗?”。而用户的反应是“不多”或其他,它以“酷”和其他方式做出响应。我假设python列表(标记为[])从0开始,在这种情况下为greetings[3],如下所示:

#setting up
greetings = ['Hi', 'Hello!', 'Greetings', 'What\'s up?', 'Good day', 'What\'s good?']
howru = ['Surprisingly well', 'Very good' , 'Good', 'I\'m doing well, you?' 'Not too good', 'Could be better', 'I\'m terrible today, thanks for asking']
dontknow = ['I don\'t understand', 'Say again?', 'I don\'t know about that one', 'I\'m sorry, I don\'t understand.']

def Bot():
    print('Welcome to Almost Human, your (Almost) human  friend.\nTry starting with a greeting!')
    while(True):
        a = input('You: ')
        if a.lower() in('hi', 'hello', 'yo', 'what\'s up', 'greetings', 'wass good'):
            botgreetings = random.choice(greetings)
            print('AlmostHuman: ' + botgreetings)
            if botgreetings == greetings[3]:
                if a.lower() == 'not much':
                    print('AlmostHuman: Cool.')
                elif a.lower() == 'the ceiling' or a.lower() == 'the sky':
                    print('AlmostHuman: You think you\'re funny, do you?')
        else:
            print('AlmostHuman: ' + random.choice(dontknow))
Bot()

但是,当出现“怎么了”并且我说“不多”时,它会回答“我不明白”(因为它是elsepython if a.lower() == blah的原因。将代码向后放4个空格,这实际上解决了问题。但是由于它现在是else所在的位置,因此它的响应是:

AlmostHuman: Cool
AlmostHuman: I don't understand

当我输入“不多”时。

我认为这是一个缩进问题,但是我不知道,我已经尝试修复了几个月。

这是我的第一个问题,如果我不够具体,请原谅! :)

编辑:问候语在这里定义:

#setting up
greetings = ['Hi', 'Hello!', 'Greetings', 'What\'s up?', 'Good day', 'What\'s good?']
howru = ['Surprisingly well', 'Very good' , 'Good', 'I\'m doing well, you?' 'Not too good', 'Could be better', 'I\'m terrible today, thanks for asking']
dontknow = ['I don\'t understand', 'Say again?', 'I don\'t know about that one', 'I\'m sorry, I don\'t understand.']

#bot begins here
def Bot():

连同其他列表。

else:位于代码的结尾,在此处:

        else:
            print('AlmostHuman: ' + random.choice(dontknow))
Bot()

3 个答案:

答案 0 :(得分:0)

第二次检查a.lower()时,它仍然具有原始input()的值,并且因为如果它永远不会=='不多',则在顶级中第二次检查它。< / p>

答案 1 :(得分:0)

第一: 如果遵循PEP8样式指南,则使用Bot()会误导类名。

  

函数名应小写,单词之间用   强调必要以提高可读性。

第二次输入将以以下方式停止:

if a.lower() in('hi', 'hello', 'yo', 'what\'s up', 'greetings', 'wass good'):

因为not much不在此列表中。

答案 2 :(得分:0)

问题是您忘记在if botgreetings == greetings[3]:之后要求输入更多信息,因此,如果您在此处说'not much',则实际上是在循环开始时对输入内容说(因为您已经都使您的两个if都失败了,并且not much不是预定义的问候语的一部分-因此您最终会在响应中收到“未知的问候语”。

通过这些事情,它可以帮助您将所需的行为描绘为state chart,当您错过某个步骤时,可视化表示通常会使其更加明显。