python中的Prime数字列表不正确

时间:2015-03-19 22:53:10

标签: python python-2.7

我认为我的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

此代码打印出一个空列表。它在逻辑上对我有意义,但代码没有按照我期望的方式执行。这里有什么问题???

2 个答案:

答案 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