Int 对象不可迭代,但我正在使用范围函数

Int object is not iterable, but I am using range function

我正在做 Monty Hall 模拟,当我 运行 这些代码行时,我收到错误消息 "int object is not iterable",但我已经在使用范围函数。后来我在一个更简单的代码上尝试了它,它基本上做同样的事情并且运行顺利。

def run_game(n):
    loss, win=0
    for i in range(1,n):
        switch(True)
        if nagrada==odabir_vrata:
            win+=1
        else:
            loss+=1
    vjerojatnost_dobitka=100*win/(win+loss)
    return vjerojatnost_dobitka

run_game(100)
TypeError                                 Traceback (most recent call last)
<ipython-input-10-829dad26acc9> in <module>
     10     return vjerojatnost_dobitka
     11 
---> 12 run_game(100)

<ipython-input-10-829dad26acc9> in run_game(n)
      1 def run_game(n):
----> 2     loss, win=0
      3     for i in range(1,n):
      4         switch(True)
      5         if nagrada==odabir_vrata:

TypeError: 'int' object is not iterable

Python 中没有 switch 语句这样的东西,所以整个语法是不正确的。

您打算写 loss, win = 0, 0loss = win = 0

使用您的代码:

loss, win = 0

Python 尝试解压右侧的内容,因此它尝试对其进行迭代以获得两个值以分配给 losswin。但是你那里有一个 int,所以它不能迭代它。

这将适用于 loss, win = 0, 0,因为您在右边有一个长度为 2 的元组。

此外,loss = win = 0(称为链式赋值)在您的值不可变的情况下等效于:

loss = 0
win = 0

请注意,正如@chepner 在评论中指出的那样,如果您有一个可变对象,使用此语法可能会导致意想不到的效果,因为 ab 都引用同一个对象:

a = b = []
a.append(1)
print(b)
# [1]

所以,在这种情况下(一般来说,如果你想安全起见),你可以在每一行写一个作业:

a = []
b = []
loss = win = 0

loss, win = 0, 0

loss = 0 
win = 0