Python 一旦我返回了一个回复,函数就不会继续了。有没有办法返回一个值然后继续?
我正在创建一个可以与您交谈的机器人。我使用if函数来检查是否使用了某些单词,因此有一个回复。我在函数内部执行此操作,并使用return打印回复。如果说了两件事,我希望它能够同时说这两件事,问题是一旦我返回了回复,函数就不能继续了。有没有办法返回一个值然后继续?这里是我的主要关注点,在我的整个代码之后Python 一旦我返回了一个回复,函数就不会继续了。有没有办法返回一个值然后继续?,python,python-3.x,Python,Python 3.x,我正在创建一个可以与您交谈的机器人。我使用if函数来检查是否使用了某些单词,因此有一个回复。我在函数内部执行此操作,并使用return打印回复。如果说了两件事,我希望它能够同时说这两件事,问题是一旦我返回了回复,函数就不能继续了。有没有办法返回一个值然后继续?这里是我的主要关注点,在我的整个代码之后 # Reply if thank == True: return "It's my pleasure\n" if greet == True:
# Reply
if thank == True:
return "It's my pleasure\n"
if greet == True:
return "How are you?\n"
以及主要代码:
# Chat Bot
import random
print("Hi!\n")
greetings = ["hi","hey","hello","yo","wassup"]
thanks = ["cheers","thanks","thx"]
def reply(x):
greet = False
# Greetings
for item in greetings:
if item in x:
greet = True
# Thanks
thank = False
for item in thanks:
if item in x:
thank = True
# Reply
if thank == True:
return "It's my pleasure\n"
if greet == True:
return "How are you?\n"
else:
randomAnswers = ["I like cheese.", "That's Cool.", "You are a robot.", "I am not a robot.", "I like music.", "I want to visit australia.","Do you like me?","You're cool."]
num = random.randint(0, len(randomAnswers) - 1)
return randomAnswers[num]
while 1:
userMessage = input("Message: ").lower()
print()
print(reply(userMessage))
不要立即返回,而是在列表中收集您的响应,然后在末尾返回该列表:
def reply(x):
responses = []
if any(item in x for item in thanks):
responses.append("It's my pleasure\n")
if any(item in x for item in greetings):
responses.append("How are you?\n")
if not responses:
randomAnswers = ["I like cheese.", "That's Cool.", "You are a robot.", "I am not a robot.", "I like music.", "I want to visit australia.","Do you like me?","You're cool."]
responses.append(random.choice(randomAnswers))
return responses
不要立即返回,而是在列表中收集您的响应,然后在末尾返回该列表:
def reply(x):
responses = []
if any(item in x for item in thanks):
responses.append("It's my pleasure\n")
if any(item in x for item in greetings):
responses.append("How are you?\n")
if not responses:
randomAnswers = ["I like cheese.", "That's Cool.", "You are a robot.", "I am not a robot.", "I like music.", "I want to visit australia.","Do you like me?","You're cool."]
responses.append(random.choice(randomAnswers))
return responses
有没有办法返回一个值然后继续
对!!大多数语言不能做到这一点,但Python可以做到。只是屈服,而不是回报。这会放弃一个值,但会让函数继续运行。下面是一个例子:
def return_some_values(zero, one, two):
if zero:
yield 0
if one:
yield 1
if two:
yield 2
因此,该函数可以在完成之前返回0到3个值
但是你如何使用它呢
当你调用一个生成生成器函数的函数时,你得到的是一个生成器。生成器,就像列表一样,是可重用的,也就是说,你可以循环它,或者将它复制到一个列表或集合中,等等。与列表不同,它不是一个序列,你不能索引它,你只能循环它一次,然后它就耗尽了,等等。同样与列表不同,它是惰性的,值在你请求它们之前是不存在的。因此:
values = return_some_values(False, True, True)
for i in value:
print(i)
…将打印出1,然后打印出2
有关详细介绍,请参见上的教程部分和下一节中关于生成器的部分。而且也很有帮助
有没有办法返回一个值然后继续
对!!大多数语言不能做到这一点,但Python可以做到。只是屈服,而不是回报。这会放弃一个值,但会让函数继续运行。下面是一个例子:
def return_some_values(zero, one, two):
if zero:
yield 0
if one:
yield 1
if two:
yield 2
因此,该函数可以在完成之前返回0到3个值
但是你如何使用它呢
当你调用一个生成生成器函数的函数时,你得到的是一个生成器。生成器,就像列表一样,是可重用的,也就是说,你可以循环它,或者将它复制到一个列表或集合中,等等。与列表不同,它不是一个序列,你不能索引它,你只能循环它一次,然后它就耗尽了,等等。同样与列表不同,它是惰性的,值在你请求它们之前是不存在的。因此:
values = return_some_values(False, True, True)
for i in value:
print(i)
…将打印出1,然后打印出2
有关详细介绍,请参见上的教程部分和下一节中关于生成器的部分。也很有帮助。你还应该考虑把重复逻辑包起来,以便于沿途进行测试。所有这些“对于列表中的x:如果输入中的x”行可以移动到一个函数,例如is_input_in。我也会这样做,肖恩,谢谢。同时,Martjin也感谢你对随机性的修正。我以前从未碰到过这样的选择。你还应该考虑把重复逻辑包起来,以便于沿途进行测试。所有这些“对于列表中的x:如果输入中的x”行可以移动到一个函数,例如is_input_in。我也会这样做,肖恩,谢谢。另外,Martjin感谢对random.choice的更正,这让我感到惊讶,我以前从未遇到过。