为什么我收到TypeError:“ int”对象在我的代码中无法迭代?

时间:2018-09-05 22:45:10

标签: python typeerror primes

我正在设计一个打印数字素数的程序。

代码如下:

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

但是我似乎不明白为什么我会收到此错误。

3 个答案:

答案 0 :(得分:3)

当您使用prime_factors.append(i)添加到list时,应该是.append(),而不是加法运算符:)

(({python将引发错误,如果您尝试+listint,因为不可能将它们加在一起)

答案 1 :(得分:0)

list加法运算符仅在两个列表上定义,而不在列表和整数上定义。 Python试图在list.__add__prime_factors上进行i,其中包括遍历i的元素。那是您得到错误的地方。

正确的命令应该是

prime_factors.append(i)

进行此更改后,您的程序将仅正确打印最低质数因子。您还需要将初始化并检查到正确的位置:

  • 仅在程序开始时将prime_factors设置为空列表。
  • 为每个可疑素数将counter设置为0。
  • 仅在所有较小的数字之后的 中检查counter的值。

答案 2 :(得分:0)

+=的左操作数是一个列表时,python期望在右侧进行迭代。您可以改用appendprime_factors +=[i]。同样,您好像弄乱了标识或其他东西;您当前的代码没有任何意义。例如,您的prime_factors +=i行始终以prime_factors = []开头。如果将+=替换为append,您将得到那两条具有相同功能的行,就像您刚才说过prime_factors = [i]的那一行一样。