【问题标题】:Int object is not iterable, but I am using range functionInt 对象不可迭代,但我使用的是范围函数
【发布时间】:2020-03-26 08:15:22
【问题描述】:

我正在做 Monty Hall 模拟,当我运行这些代码行时,我收到错误消息“int object is not iterable”,但我已经在使用 range 函数。后来我在一个更简单的代码上进行了尝试,该代码基本上完成了相同的工作并且运行顺利。

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

【问题讨论】:

  • 仔细注意箭头。它没有发生在 for 循环中
  • loss, win=0 将不起作用。也许你的意思是loss = win = 0

标签: python int iterable


【解决方案1】:

你的意思是写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 在 cmets 中正确指出的那样,如果您有一个可变对象,则使用此语法可能会导致意想不到的效果,因为 ab 都指的是同一个对象:

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

所以,在这种情况下(一般来说,如果你想安全的话),你可以在每一行写一个单独的赋值:

a = []
b = []

【讨论】:

  • 我强烈建议避免链式分配。单独的赋值几乎总是更清晰,涉及可变值的链式赋值可能不会达到您的预期。 a = b = [] 不等于 a = []; b = []
  • 也许更强烈地说,a = b = ca = c; b = c 仅当 c 不可变且无副作用时才等效。
  • @chepner 没错,我会在答案中添加警告。
  • 不是必需的,但您可能会明确指出,a, b = [], [] 也是a = b = [] 的安全替代品
【解决方案2】:
loss = win = 0

loss, win = 0, 0

loss = 0 
win = 0

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这是我自己的功能
    • 语法很好;唯一的反对意见是名称 switch 未绑定到可调用值。我看不出您有任何理由认为这是尝试使用类似 switch 的语句。
    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2018-03-22
    • 2013-08-02
    • 2012-06-21
    相关资源
    最近更新 更多