【问题标题】:Python prime number program not workingPython素数程序不起作用
【发布时间】:2017-04-12 14:34:17
【问题描述】:

我正在创建一个 Python 程序来确定一个数字是否为素数。这就是我所拥有的:

 print("Please enter your number:") 
number = int(input())


if number > 2: 
    for i in range (2,number):
        if (number % i) == 0:
            print(number, "is not prime")
            break
        else:
            print(number, "is prime")
            break
else:
    print(number, "is not prime")

它适用于除 2 之外的所有用例。为什么?我该如何解决?

【问题讨论】:

  • 适用于“除 2 之外的所有用例”。尝试使用数字 9。您的循环中有 print "is prime",但在整个循环完成之前您无法知道它是素数。此外,如果数字为 2,您将直接跳到“不是素数”。
  • 我修好了。我不得不将“else: number is prime”放在 for 循环之外。

标签: python python-3.x loops primes


【解决方案1】:

因为2不大于2,所以属于else条件。

要修复它,您必须为 2 创建一个特殊情况:

print("Please enter your number:") 
number = int(input())

if number > 2: 
    for i in range (2,number):
        if (number % i) == 0:
            print(number, "is not prime")
            break
    else:
            print(number, "is prime")
elif number == 2:
    print(number, "is prime")
else:
    print(number, "is not prime")

编辑:按照@Azat Ibrakov 的建议使用 for-else

【讨论】:

  • 这仍然无法正常查找素数。据此,9 是素数。
  • @khelwood 应该修复
  • number = int(input()) as type int 不是有效的 Python 语法,也不是 OP 代码的一部分 [啊,它是 OP 的 original 代码的一部分。] 这是怎么回事甚至跑步?
  • @fedterzi:是的,看起来是这样。不过,通常最好不要发布您自己没有尝试过的代码;提问者经常打错字,但答案不应该。 :-)
  • 你可以使用for-else
【解决方案2】:

请在下面找到我的代码,我绕过了 2。

值 '2' 永远不会通过 for 循环,因此它默认打印 'Prime'。

对于所有其他人,它按预期工作。

for i in range (1,100):
    self.bar(i)

def bar(self,number):

    if number > 1 :
        for i in range(2,number):
           r = number % i
           if r == 0 :
               return
        print(str(number) + ' : Prime')

2:素数 3:素数 5:素数 7:素数 11:素数 13:素数 17:
素数 19:素数 23:素数 29:素数 31:素数 37:素数 41:
素数 43:素数 47:素数 53:素数 59:素数 61:素数 67:
素数 71:素数 73:素数 79:素数 83:素数 89:素数 97: 素数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2016-08-10
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多