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

Posted

技术标签:

【中文标题】Python - TypeError:\'int\'对象不可迭代【英文标题】:Python - TypeError: 'int' object is not iterablePython - TypeError:'int'对象不可迭代 【发布时间】:2013-10-31 15:49:39 【问题描述】:

这是我的代码:

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

我做错了什么?

【问题讨论】:

你希望list(cow[n])做什么? 提示:您也可以提供range() 动态参数:cow = range(10 ** (number1 - 1) if number1 &gt; 1 else 0, 10 ** number1) 将在一行中为您提供与所有if 语句完全相同的结果。 @MartijnPieters 我只是在想这个 - 但想想 IIRC,10 ** 0 是 1 而不是 0 @JonClements:调整。 :-) 在这种情况下,0 非常不一致;所有其他数字都是 10 的幂.. 【参考方案1】:

你的问题在于这一行:

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

另外,我想解决两件事:

    您的 while 语句末尾缺少 :。 这样使用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
>>>

【讨论】:

感谢您这么快回答。然后我将如何将数字拆分为单个字符?我尝试在它下面放一个列表(number4),但是当我在终端上运行它时,它会导致它永远运行。 整数没有字符。但是,您可以将其转换为字符串,即:str(..)。之后,您可能不需要将其转换为列表,具体取决于您打算如何处理它,因为字符串是可迭代的并产生它们的组成字符。 @Mikey6743 - 查看我的编辑。虽然您可以为此使用 for 循环,但最快的选择是使用 sum 这是好人,非常感谢!我刚刚开始学习如何编码:) 我仍然对如何重复让这个重复而不使用循环感到困惑。例如,假设用户想要查看 3 位数字,那么我必须从 100 到 999 进行计算。例如100 中的整数之和 = 1 和 999 中的整数之和 = 27。 @Mikey6743 - 嗯,那么您可能必须使用循环。但是,由于这个问题的主题是TypeError(我的帖子已修复),为什么不先关闭这个问题(单击我的答案旁边的勾号),然后再问另一个特别关注该问题的问题?这样你会得到更好的帮助。不过,您肯定必须先将数字设为字符串,以便将其拆分为数字。【参考方案2】:

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

使用您提供的示例向您演示/证明这一点...只需对每个案例使用 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
>>> 

【讨论】:

【参考方案3】:

如果是这样的话:

n=int(input())

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

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

【讨论】:

【参考方案4】:
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

如果我们在语句下面运行注释语句,它就会正常运行..

【讨论】:

以上是关于Python - TypeError:'int'对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章

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

TypeError:'int'对象不可迭代,使用 Python 3 [关闭]

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

(Python 新手)不断收到“TypeError: 'int' object is not callable”

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

TypeError:'int'对象不支持嵌套python列表中的项目分配[关闭]