【问题标题】:What's wrong with this python prime number function?这个python素数函数有什么问题?
【发布时间】:2013-09-22 13:41:43
【问题描述】:

所以我只想检查我的函数出了什么问题。它给出的素数很好,但是当我输入像 4 这样的数字时,它会打印“4 不是素数”然后“4 是素数”。 似乎是什么错误? (我知道这很可悲,但我花了 8 个小时来做​​这个(初学者)。

def isprime(n):
    if n == 1:
        print ("1 is not prime.")
    if n == 2:
        print ("2 is a prime number.")
    for x in range (2, n):
        if n%x == 0:
            print (n, "is not prime.")
        if n%x != 0:
            print (n, "is a prime number.")

【问题讨论】:

  • 您需要从您的函数中返回TrueFalse,然后根据该函数进行打印。否则你会得到几份印刷品。
  • 在这里查看解决方案:docs.python.org/2/tutorial/…
  • 除了下面的正确答案外,请记住,尤其是在寻找错误时打印出您关心的所有内容——在这种情况下,x 也是。 "print (n, " 不是素数;它除以 ", x)" 会立即显示您的错误。

标签: python function numbers primes


【解决方案1】:

你的算法错了,检测到一个因子后需要break,没有因子就打印素数。

这是一个更正的版本:

def isprime(n):
    if n == 1:
        print ("1 is not prime.")
        return
    if n == 2:
        print ("2 is a prime number.")
        return
    for x in range (2, n):
        if n%x == 0:
            print (n, "is not prime.")
            break
    else:
        print (n, "is a prime number.")

【讨论】:

  • ...虽然在这种情况下,您可以只使用return 而不是break,而不需要else。 (不过,它很好地展示了 for…else 的一般用途。)
  • 同时,这仍然是错误的。对于 1,它将打印“1 不是素数”。或“2 是素数。”,然后它会落入for 语句,循环 0 次,点击else,并将"1 is a prime number". And likewise for 2. You either need to add return 语句打印到那些if正文,或将其更改为 if/elif/else(在 else 内使用 for…else 循环)。
【解决方案2】:

您应该在print(n, "is not prime.") 正下方添加一个break 语句,否则它将继续循环遍历所有数字直到n,这是不必要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 2017-03-26
    • 2014-06-29
    • 2011-02-13
    • 2011-04-24
    • 2011-08-26
    相关资源
    最近更新 更多