在聊天机器人中,我列出了一个名为“ 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()
但是,当出现“怎么了”并且我说“不多”时,它会回答“我不明白”(因为它是else
到python
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()
答案 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,当您错过某个步骤时,可视化表示通常会使其更加明显。