【问题标题】:My output keeps on repeating itself? (Python)我的输出不断重复自己? (Python)
【发布时间】:2020-10-01 19:06:35
【问题描述】:

所以我正在创建这个让用户输入大于 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

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

【问题讨论】:

  • 您可以逐行浏览代码,包括所有循环,例如用数字 5。这样你就可以找到这种错误。

标签: python for-loop


【解决方案1】:

你的问题在这里:

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

else 位于循环内部,表示您将在每次找到非除数时打印数字。例如,对于数字 = 11,您将为 i 值 2-10 打印 11

在你完成循环之前,你不知道这个数字是否是素数。您的打印必须在循环之后,在正常退出时进行。一个经常被遗忘的语言特性是循环可以有一个 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

【讨论】:

    【解决方案2】:

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

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 2012-10-27
      • 2013-03-01
      • 2018-06-21
      • 2020-05-19
      • 1970-01-01
      相关资源
      最近更新 更多