我认为我的Python素数列表很好。但是,当它看到它不能被2整除时,它会打印出数字。我试图在包含其他素数的列表中循环循环,例如3,5,7 ......但它似乎仍然不起作用
primes = []
input = raw_input("> ")
input2 = raw_input("> ")
for num in range(int(input), int(input2)):
for j in primes:
if not primes:
break
else:
if j % num ==0:
break
for i in range(2, num):
if num % i == 0:
break
else:
primes.append(num)
break
print primes
这打印出可被3整除但不能被2整除的数字。
for num in range(int(input), int(input2)):
if not primes:
break
else:
for j in primes:
if j % num ==0:
break
for i in range(2, num):
if num % i == 0:
break
else:
primes.append(num)
break
print primes
此代码打印出一个空列表。它在逻辑上对我有意义,但代码没有按照我期望的方式执行。这里有什么问题???
答案 0 :(得分:3)
你的第一个for循环没有做任何有用的事情:
for num in range(int(input), int(input2)):
for j in primes: #there is nothing in list 'primes'
if not primes: #this won't execute
break #this won't execute
else: #this will execute
if j % num ==0: #this will execute
break #break if statement, repeat for loop
for i in range(2, num):
if num % i == 0:
break
else:
primes.append(num)
break
print primes
话虽如此,这将是获得所需输出的最便捷方式:
primes=[]
input = raw_input("> ")
input2 = raw_input("> ")
for num in range(int(input), int(input2)):
if all(num%i!=0 for i in range(2,num)):
primes.append(num)
print primes
答案 1 :(得分:1)
你的第二个“其他”似乎是在错误的地方。试试你的程序的这个修改版本:
primes = []
input = raw_input("> ")
input2 = raw_input("> ")
for num in range(int(input), int(input2)+1):
# prime numbers are greater than 1
if num > 1 :
for i in range(2, num):
if num % i == 0:
break
else:
primes.append(num)
print primes