首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的囚徒困境

Python中的囚徒困境
EN

Stack Overflow用户
提问于 2017-12-19 22:39:25
回答 4查看 2.3K关注 0票数 0

在学校的CSE课上,我正在做一个可选的项目,那就是把“囚徒困境”的一个版本编码成Python。这是我的代码。当我运行它时,它开始工作,一旦它命中if语句,它就会返回错误'TypeError: 'bool' object is not iterable。我该如何解决这个问题?

代码语言:javascript
运行
复制
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
EN

回答 4

Stack Overflow用户

发布于 2017-12-19 22:44:45

all(iterable)需要一个可迭代的参数。PyDocs。但是,您给了它一个布尔值。让我们分析一下第一个if语句。

代码语言:javascript
运行
复制
if all(G == "Collude" and answer==("Collude")):

因此,如果G == "Collude"将返回一个布尔值以及answer == ("Collude")。您将它们AND在一起,这将产生另一个布尔值。因此,最终您传递的是一个布尔值,而不是所有需要的迭代值。

使您的if语句看起来更像这样:

代码语言:javascript
运行
复制
if G == "Collude" and answer==("Collude"):
票数 3
EN

Stack Overflow用户

发布于 2017-12-19 22:44:34

函数all需要一个布尔值序列,并返回它们是否都为True。您向它传递了一个布尔表达式,这会产生上面提到的错误。

我认为你可以省去all的电话。

票数 0
EN

Stack Overflow用户

发布于 2017-12-19 22:45:18

if语句使用all()函数。这需要一个可迭代的语句,而不是一个布尔语句。这就是错误的原因。

要修复此问题,请尝试删除all()函数,并将其保留为完整的布尔语句;

代码语言:javascript
运行
复制
if G == 'Betray' and answer == 'Collude':
    you_jail()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47889310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档