我正在尝试使用以下命令生成素数列表this http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes方法。我需要循环遍历每个数字 2...n 并检查它是否是 2...n 的倍数。由于某种原因,错误的列表似乎被修改了。
import sys
import argparse
import math
parser = argparse.ArgumentParser(description='find the largest prime factor of a number')
parser.add_argument('n', type=int, help='number')
args = parser.parse_args()
sieve = []
for i in range(2,args.n+1): sieve.append(i) # tried int(i)
copy1 = sieve # tried making extra copies. . .
copy2 = sieve
copy3 = sieve
#print int(math.sqrt(args.n))
for index, i in enumerate(copy1):
#print index, i
for ii in copy2:
#print ii
if i % ii == 0:
sieve[index]= None
print sieve
我收到以下错误:
Traceback (most recent call last):
File "3.py", line 22, in <module>
if i % ii == 0: TypeError: unsupported operand type(s) for %:
'int' and 'str'
你不是在复印。你正在使用参考文献,所以copy1
, copy2
, and copy3
全部引用同一个列表——sieve
。如果要复制,请使用:
copy1 = sieve[:]
这将创建一个副本sieve
并将其分配给copy1
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)