Python 调用了错误的函数?
所以我用Python编写了一个简短的聊天机器人,但是有一个令人恼火的问题。程序最初只调用Python 调用了错误的函数?,python,python-3.x,Python,Python 3.x,所以我用Python编写了一个简短的聊天机器人,但是有一个令人恼火的问题。程序最初只调用posResponses()函数 在上下文中,如果我用“悲伤”、“可怕”甚至“asdfasdfasdf”来回答它最初的问题,我仍然会得到积极的回答 如果我输入一个否定/不明确的关键字,应该调用negrossponses()/ambiguusresponses()函数。事实并非如此。我做错了什么?我该如何修复它?代码如下: import random import time def opening():
posResponses()
函数
在上下文中,如果我用“悲伤”、“可怕”甚至“asdfasdfasdf”来回答它最初的问题,我仍然会得到积极的回答
如果我输入一个否定/不明确的关键字,应该调用negrossponses()
/ambiguusresponses()
函数。事实并非如此。我做错了什么?我该如何修复它?代码如下:
import random
import time
def opening():
print('Hello!')
def responseType():
responseType = str(input('How are you ?'))
if responseType == 'good' or 'great' or 'fantastic' or 'decent' or 'fine' or 'ok' or 'okay': posResponses()
elif responseType == 'bad' or 'terrible' or 'sad' or 'grumpy' or 'angry' or 'irritated' or 'tired': negResponses()
else: ambiguousResponses()
def posResponses():
number = random.randint(1, 4)
if number == 1:
print('That\'s great! So what\'s up?')
input()
ambiguousResponses()
if number == 2:
print('Really? I\'d like to hear more.')
input()
ambiguousResponses()
if number == 3:
print('I\'m glad to hear that. What\'s going on?')
input()
ambiguousResponses()
if number == 4:
print('Ah, me too. You should begin a topic discussion.')
input()
ambiguousResponses()
def negResponses():
number2 = random.randint(5, 8)
if number2 == 5:
print('That\'s really too bad. Care to elaborate?')
input()
ambiguousResponses()
if number2 == 6:
print('Awww. Why?')
input()
ambiguousResponses()
if number2 == 7:
print('That sucks! How come?')
input()
ambiguousResponses()
if number2 == 8:
print('What a shame! You should explain why.')
input()
ambiguousResponses()
def ambiguousResponses():
number = random.randint(1, 4)
if number == 1:
print('Interesting. Carry on.')
input()
ambiguousResponses()
if number == 2:
print('Wow, elaborate!')
input()
ambiguousResponses()
if number == 3:
print('What an astute remark! Continue.')
input()
ambiguousResponses()
if number == 4:
print('How interesting. Please do explain further.')
input()
ambiguousResponses()
if __name__ == "__main__":
opening()
responseType()
Python是这样解析它的:
if(responseType==“good”)或“great”或“fantastic”或“delegate”或“fine”或“ok”或“ok”:posResponses()
elif(responseType==“bad”)或“可怕”或“悲伤”或“暴躁”或“愤怒”或“恼怒”或“疲倦”:Nergresponses()
其他:含糊不清的回答()
'great'
是一个真实的值,因此if
语句总是成功的。您可能希望将其改写为:
如果responseType=='good'或responseType=='great'或responseType=='fantastic'或responseType=='delegate'或responseType=='fine'或responseType=='ok'或responseType=='ok':
posResponses()
elif responseType=='bad'或responseType=='可怕'或responseType=='sad'或responseType=='grumpy'或responseType=='生气'或responseType=='激怒'或responseType=='疲倦':
Nergesponses()
其他:
含糊不清的回答()
或者,优选地:
如果响应类型为{'good'、'great'、'fantastic'、'delegate'、'fine'、'ok'、'ok'}:
posResponses()
elif responseType在{'bad'、'Thrable'、'sad'、'grumpy'、'Angly'、'Escred'、'Wear'中:
Nergesponses()
您甚至可以将这些响应转换为常数:
#文件顶部附近:
好的回答={'GOOD'、'great'、'fantal'、'detable'、'fine'、'ok'、'ok'}
错误的回答={BAD','可怕'、'sad'、'grutpy'、'愤怒'、'untive'、'tould'}
#当您需要判断响应时:
如果responseType处于良好的\u响应中:
posResponses()
错误响应中的elif响应类型:
Nergesponses()
其他:
含糊不清的回答()
posResponses
只被调用一次,因为在posResponses中,您调用的是含糊不清的responses,而在含糊不清的responses中,您调用的是含糊不清的responses。所以它永远不会退出ambiguousResponses,它只会一直调用ambiguousResponses,直到堆栈用完,程序崩溃
您已尝试使此程序递归。不应该是这样的,应该有一个以input()调用为中心的循环,在整个程序中只需要一个循环,而不是15个循环或其他任何循环
但更明显的错误是,递归中不包括测试响应是否为正的测试,因此程序只检查输出的响应一次 对于所有的数字比较,使用
elif
s代替一系列if
s将更清晰(更有效)。此外,您的列表中的缩进是错误的(但可能是因为张贴在这里):我认为这不是元组的正确用法。好的回答是一个项目列表,而不是一个异构结构。请参阅,您首选的方法非常有效。非常感谢你!我还将其应用于NergResponses函数,以便可以调用不明确的函数。@Mark:这是一个很好的观点。我把它改为使用列表而不是元组。我改变了我的评论,因为显然使用列表是一个更好的主意。这个决定是一致的。@throatofinter57:这纯粹是语义上的差异。将项放入元组通常意味着表示顺序很重要。例如,处理二维坐标:使用类似(5,3)
的元组是有意义的。如果出于列表目的开始使用元组,可能会使代码的读者感到困惑,他们希望元组中的项的顺序具有某种意义,而实际上却没有意义。它可能不会对代码的运行进行任何更改(不会导致错误或类似的情况)。