在Python中,编写脚本来确定用户输入的数字是否为质数

时间:2019-06-17 02:49:36

标签: python

编写一个脚本,该脚本确定用户输入的数字是否为质数,并根据您的输入内容打印“您输入的数字为质数”还是“您输入的数字不是质数”脚本查找。

我有无法通过某些测试用例的代码,我不确定为什么。我在这里看到一些涉及计算sqrt的答案,但我不明白为什么这样做会有所帮助。

num= int(input())

if num == 0 or num ==1:
    print('The number you inputted is not a prime number.')
while num < 0:
    break
if num > 0:
    for i in range(2,num):
        if num%i==0:
            print('The number you inputted is not a prime number.')
            break
        else:
            print('The number you inputted is a prime number.')
            break

当我用一些测试用例尝试代码时,它总是正确的,但是它没有通过我的作业分配。

2 个答案:

答案 0 :(得分:3)

您的逻辑是错误的;您应该仅在条件评估为True时中断,因为您需要测试所有num ** 0.5(在代码中为num)之前的数字。 9是一个非素数的示例,您的代码将其视为素数。

您想要这样的东西:

prime = True
if num > 0:
    for i in range(2,num):
        if num % i == 0:
            prime = False
            break

    if prime:
        print(f'{num} is a prime number.')

    else:
        print(f'{num} is not a prime number.')

通过在开始时将prime设置为True并将其更改为False,只有找到一个因数后,我们才能判断出{ {1}}(如果数字是素数)。

答案 1 :(得分:1)

问题发生在以下逻辑中:

for i in range(2,num):
    if num%i==0:
        print('The number you inputted is not a prime number.')
        break
    else:
        print('The number you inputted is a prime number.')
        break

要查看问题发生的位置,请尝试使用代码检查9是否是素数。 您的for循环执行以下操作:

  1. i = 2
  2. if num % i == 0,而不是素数,打破。
  3. else,启动,中断。

这意味着您的for循环一定会在i==2处停止。 换句话说,根据该算法,您对质数的定义是“任何奇数”。

要解决此问题,您需要找到一种方法,允许循环在所有其他可能的除数之间进行迭代,而不会在第一次迭代后中断。

我将在这里停下来,让您有机会看看自己是否可以解决其余的问题。如果您无法取得任何进展,请告诉我,我会给另一个提示。