我的输出会不断重复吗? (蟒蛇)

时间:2020-10-01 19:06:35

标签: python for-loop

所以我正在创建此函数,该函数使用户输入大于2的数字。 然后,该代码应打印从2到用户输入的数字的所有素数。

这是我的代码,它可以正常工作(是!)

def enterNumber():
    
    number = int(input("Enter a number greater than 2"))
    
    lower = 2
    upper = number

    for number in range (lower, upper):
        if number > 2:
            for i in range (2, number):
                if (number % i) == 0:
                    break
            
                else:
                   if (number % i) != 0:
                       print(number)
                
enterNumber()

如果用户输入18,这是我的输出

"Enter a number greater than 2"  
 user puts "18"

output: 3
5
5
5
7
7
7
7
7
9
11
11
11
11
11
11
11
11
11
13
13
13
13
13
13
13
13
13
13
13
15
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17

为什么我的输出重复出现?任何建议将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:6)

您的问题在这里:

for i in range (2, number):
    if (number % i) == 0:
        break
    
    else:
        if (number % i) != 0:
            print(number)

位于循环内 else表示,每次发现非因数时,您将打印数字 。例如,对于数字= 11,您将为11的值2-10打印i

在循环执行完成之前,您不知道数字是否为质数。您的打印件必须在循环之后正常退出。一种经常被遗忘的语言功能是,为此循环可以有一个else

        for i in range (2, number):
            if (number % i) == 0:
                break
            
        else:
            print(number)

输出:

Enter a number greater than 218
3
5
7
11
13
17

答案 1 :(得分:0)

一个简单的解决方案(有更好的方法):

def enterNumber():
    number = int(input("Enter a number greater than 2"))

    lower = 2
    upper = number

    for number in range(lower, upper):
        prime = True
        for i in range(2, number):
            if (number % i) == 0:
                prime = False
                break

        if prime:
            print(number)


enterNumber()