Python-TypeError:“ int”对象不可迭代


75

这是我的代码:

import math

print "Hey, lets solve Task 4 :)"

number1 = input ("How many digits do you want to look at? ")
number2 = input ("What would you like the digits to add up to? ")

if number1 == 1:
    cow = range(0,10)
elif number1 == 2:
    cow = range(10,100)
elif number1 == 3:
    cow = range(100,1000)
elif number1 == 4:
    cow = range(1000,10000)
elif number1 == 5:
    cow = range(10000,100000)
elif number1 == 6:
    cow = range(100000,1000000)
elif number1 == 7:
    cow = range(1000000,10000000)
elif number1 == 8:
    cow = range(10000000,100000000)
elif number1 == 9:
    cow = range(100000000,1000000000)
elif number1 == 10:
    cow = range(1000000000,10000000000)

number3 = cow[-1] + 1

n = 0
while n < number3:
    number4 = list(cow[n])
    n += 1

我正在寻找一个循环,以便对于列表中的每个元素,它将分解为每个字符。例如,假设数字137在列表中,那么它将变成[1,3,7]。然后,我想将这些数字加在一起(我还没有开始,但是我对如何做有一些想法)。

但是,我不断收到错误消息

TypeError: 'int' object is not iterable

当我尝试运行此程序时。

我究竟做错了什么?


3
您期望list(cow[n])做什么?
乔恩·克莱门茨

12
提示:您也可以提供range()动态参数:只需一行cow = range(10 ** (number1 - 1) if number1 > 1 else 0, 10 ** number1)就可以为您提供与所有if语句完全相同的结果。
马丁·彼得斯

1
@MartijnPieters我只是在考虑-但是认为IIRC,10 ** 0是1而不是0
乔恩·克莱门茨

1
@JonClements:已调整。:-)0在这种情况下这是非常不一致的;所有其他数字均为10的幂
。-马丁·彼得斯

Answers:


106

您的问题是与此行:

number4 = list(cow[n])

它尝试采用cow[n],它返回一个整数,并使其成为列表。如下所示,这不起作用:

>>> a = 1
>>> list(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>

也许你的意思是把cow[n] 里面的列表:

number4 = [cow[n]]

请参见下面的演示:

>>> a = 1
>>> [a]
[1]
>>>

另外,我想解决两件事:

  1. 您的while陈述:结尾缺少。
  2. input那样使用非常危险,因为它将输入作为真实的Python代码进行评估。最好使用raw_input,然后使用将其转换为整数int

要拆分数字,然后根据需要添加它们,我首先将数字设置为字符串。然后,由于字符串是可迭代的,因此可以使用sum

>>> a = 137
>>> a = str(a)
>>> # This way is more common and preferred
>>> sum(int(x) for x in a)
11
>>> # But this also works
>>> sum(map(int, a))
11
>>>

感谢您如此迅速的回答。然后,我如何将数字分成单个字符?我尝试将一个list(number4)放在它下面,但是当我在终端上运行它时,它将导致它永远运行。

整数没有字符。但是,你可以把它转换为字符串,其作用:str(..)。之后,您可能不需要将其转换为列表,具体取决于您打算使用它,因为字符串是可迭代的并产生其组成字符。
kindall

@ Mikey6743-看到我的编辑。尽管您可以为此使用for循环,但最快的选择是使用sum

这太棒了,非常感谢!我刚刚开始学习如何编码:)我仍然对如何重复而不使用循环重复感到困惑。例如,假设用户想要的看着3个位数,然后我必须解决它从100到整数的100 = 1 999 = 27 999 EG总和总和整数

@ Mikey6743-嗯,那么您可能必须使用循环。但是,由于该问题的主题是TypeError(我的帖子已解决),为什么不先按回答的步骤关闭该问题(单击我的答案旁边的对勾),然后再问另一个特别关注该问题的问题?这样您将获得更好的帮助。当然,您绝对必须首先将数字设为字符串,以便将其拆分为数字。

3

这很简单,您尝试将整数转换为列表对象!当然它将失败,并且应该...

为了通过使用您提供的示例向您证明/证明这一点,只需在以下每种情况下使用type函数,结果将说明一切!

>>> type(cow)
<class 'range'>
>>> 
>>> type(cow[0])
<class 'int'>
>>> 
>>> type(0)
<class 'int'>
>>> 
>>> >>> list(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> 

0

如果是这样的话:

n = int(输入())

而不是->对于n中的i:->给出错误-'int'对象不可迭代

对-在范围(0,n)中的i使用->:->工作正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.