Python-TypeError: ‘ int’对象不可迭代

这是我的密码:

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

我做错了什么?

1076707 次浏览

Your problem is with this line:

number4 = list(cow[n])

It tries to take cow[n], which returns an integer, and make it a list. This doesn't work, as demonstrated below:

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

Perhaps you meant to put cow[n] inside a list:

number4 = [cow[n]]

See a demonstration below:

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

Also, I wanted to address two things:

  1. Your while-statement is missing a : at the end.
  2. It is considered very dangerous to use input like that, since it evaluates its input as real Python code. It would be better here to use raw_input and then convert the input to an integer with int.

To split up the digits and then add them like you want, I would first make the number a string. Then, since strings are iterable, you can use 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
>>>

This is very simple you are trying to convert an integer to a list object !!! of course it will fail and it should ...

To demonstrate/prove this to you by using the example you provided ...just use type function for each case as below and the results will speak for itself !

>>> 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
>>>

If the case is:

n=int(input())

Instead of -> for i in n: -> gives error- int object is not iterable

Use -> for i in range(0,n):works fine..!

def hourglassSum(arr):
sum1 = []
# Write your code here
for i in range(0,len(arr)-2):
for j in range(0,len(arr)-2):
x = sum(arr[i][j]+arr[i+1][j+1]+arr[i+2][j]+arr[i][j+1]+arr[i][j+2]+arr[i+2][j+1]+arr[i+2][j+2])
sum1.append(x)
#sum1.append(arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1]+arr[i+2][j+2])
return max(sum1)


# Why x = sum(arr[i][j]+arr[i+1][j+1]+arr[i+2][j]+arr[i][j+1]+arr[i][j+2]+arr[i+2][j+1]+arr[i+2][j+2]) is showing TypeError: 'int' object is not iterable

and if we run the comment statement below the statement than it runs properly..