编写一个脚本,该脚本确定用户输入的数字是否为质数,并根据您的输入内容打印“您输入的数字为质数”还是“您输入的数字不是质数”脚本查找。
我有无法通过某些测试用例的代码,我不确定为什么。我在这里看到一些涉及计算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
当我用一些测试用例尝试代码时,它总是正确的,但是它没有通过我的作业分配。
答案 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
循环执行以下操作:
i = 2
if num % i == 0
,而不是素数,打破。else
,启动,中断。这意味着您的for
循环一定会在i==2
处停止。
换句话说,根据该算法,您对质数的定义是“任何奇数”。
要解决此问题,您需要找到一种方法,允许循环在所有其他可能的除数之间进行迭代,而不会在第一次迭代后中断。
我将在这里停下来,让您有机会看看自己是否可以解决其余的问题。如果您无法取得任何进展,请告诉我,我会给另一个提示。