在学校的CSE课上,我正在做一个可选的项目,那就是把“囚徒困境”的一个版本编码成Python。这是我的代码。当我运行它时,它开始工作,一旦它命中if语句,它就会返回错误'TypeError: 'bool' object is not iterable。我该如何解决这个问题?
import random
def ipd_start():
print("Welcome to Prisoner's Dilemma. \n If you don't know what Game Theory is, you're in the wrong place. \n \n Enter Collude to collude, or Betray to betray.")
round_one()
def round_one():
answer=(input("You and a buddy got caught commiting a crime. Do you keep quiet, or rat on your best friend? \n "))
a = ["Collude", "Betray"]
G = random.choice(a)
print("You chose " + answer + ", and your partner chose " + G + ". ")
if all(G == "Collude" and answer==("Collude")):
both_free()
if all(G == 'Collude' and answer==('Betray')):
you_free()
if all(G == 'Betray' and answer=='Betray'):
both_jail
if all(G == 'Betray' and answer=='Collude'):
you_jail发布于 2017-12-19 22:44:45
all(iterable)需要一个可迭代的参数。PyDocs。但是,您给了它一个布尔值。让我们分析一下第一个if语句。
if all(G == "Collude" and answer==("Collude")):因此,如果G == "Collude"将返回一个布尔值以及answer == ("Collude")。您将它们AND在一起,这将产生另一个布尔值。因此,最终您传递的是一个布尔值,而不是所有需要的迭代值。
使您的if语句看起来更像这样:
if G == "Collude" and answer==("Collude"):发布于 2017-12-19 22:44:34
函数all需要一个布尔值序列,并返回它们是否都为True。您向它传递了一个布尔表达式,这会产生上面提到的错误。
我认为你可以省去all的电话。
发布于 2017-12-19 22:45:18
if语句使用all()函数。这需要一个可迭代的语句,而不是一个布尔语句。这就是错误的原因。
要修复此问题,请尝试删除all()函数,并将其保留为完整的布尔语句;
if G == 'Betray' and answer == 'Collude':
you_jail()https://stackoverflow.com/questions/47889310
复制相似问题