为什么我的代码出现 TypeError: 'int' object is not iterable 错误?

3

我正在设计一个能打印数字质因数的程序。

以下是代码:

while True:
    x = int(input("Enter a positive number: "))
    if x >= 0:
        break

ranger = list(range(1, x+1))
counter = 0

#The first for loop checks if the number is a factor
for i in ranger:
    if x % i == 0:
        #The second for loop checks if the number is prime
        for element in range(1, i+1 ):
            if i % element == 0:
                counter += 1
                if counter == 2:
                    prime_factors = []
                    prime_factors += i
                #Counter having a value of 2 means the number is prime

print(prime_factors)

我一直收到以下错误:

Traceback (most recent call last):
  File ".\primefactors.py", line 18, in <module>

    prime_factors += i
TypeError: 'int' object is not iterable

但是我似乎不太明白为什么会出现这个错误。


你试图通过 prime_factors = [] ; prime_factors += i 实现的目标可以更简单明了地写成 prime_factors = [i] - kindall
3个回答

3
应该使用prime_factors.append(i),因为使用.append()添加到list中,而不是加法运算符 :) (python将抛出错误,如果你尝试+一个list和一个int,因为它们不能相互相加)

0

list 的加法运算符仅定义在两个列表上,而不是列表和整数。Python 尝试对 prime_factorsi 执行 list.__add__,其中包括迭代 i 的元素。这就是你得到错误的地方。

正确的命令应该是

prime_factors.append(i)

通过这个修改,你的程序现在可以正确地输出最小质因数。同时你还需要将初始化和检查操作放到正确的位置:

  • 在程序的开始处,将 prime_factors 设置为空列表。
  • 对于每个怀疑是质因数的数字,将 counter 重新设置为0。
  • 只有在检查完所有较小的数字后,才检查 counter 的值。

2
我进行了一些实验,发现 + 不能用于列表和非列表可迭代对象,但是 += 可以。例如,prime_factors += range(5) 的结果是 prime_factors 等于 [0,1,2,3,4] - Acccumulation

0

+=的左操作数是列表时,Python期望右边是可迭代对象。你可以使用append,或者写成prime_factors +=[i]。此外,看起来你的缩进有误或者其他问题;你现在的代码没有任何意义。例如,你的prime_factors +=i总是在prime_factors = []之前。如果你将+=替换为append,你会得到与另一行相同的功能,就好像你只有一行prime_factors = [i]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接