Python - TypeError:'int'对象不可迭代

57 python loops iterable list

这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

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

但是,我一直收到错误消息

TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它.

我究竟做错了什么?

iCo*_*dez 89

你的问题在于这一行:

number4 = list(cow[n])
Run Code Online (Sandbox Code Playgroud)

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

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

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

number4 = [cow[n]]
Run Code Online (Sandbox Code Playgroud)

请参阅下面的演示:

>>> a = 1
>>> [a]
[1]
>>>
Run Code Online (Sandbox Code Playgroud)

另外,我想解决两件事:

  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
>>>
Run Code Online (Sandbox Code Playgroud)


小智 11

如果情况是:

n=int(input())

而不是 -> for i in n:-> 给出错误 -int对象不是iterable

使用 ->for i in range(0,n):工作正常..!