我正在设计一个打印数字素数的程序。
代码如下:
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
但是我似乎不明白为什么我会收到此错误。
答案 0 :(得分:3)
当您使用prime_factors.append(i)
添加到list
时,应该是.append()
,而不是加法运算符:)
(({python
将引发错误,如果您尝试+
和list
和int
,因为不可能将它们加在一起)
答案 1 :(得分:0)
list
加法运算符仅在两个列表上定义,而不在列表和整数上定义。 Python试图在list.__add__
和prime_factors
上进行i
,其中包括遍历i
的元素。那是您得到错误的地方。
正确的命令应该是
prime_factors.append(i)
进行此更改后,您的程序将仅正确打印最低质数因子。您还需要将初始化并检查到正确的位置:
prime_factors
设置为空列表。counter
设置为0。counter
的值。答案 2 :(得分:0)
当+=
的左操作数是一个列表时,python期望在右侧进行迭代。您可以改用append
或prime_factors +=[i]
。同样,您好像弄乱了标识或其他东西;您当前的代码没有任何意义。例如,您的prime_factors +=i
行始终以prime_factors = []
开头。如果将+=
替换为append
,您将得到那两条具有相同功能的行,就像您刚才说过prime_factors = [i]
的那一行一样。