prime 函数没有返回正确的结果
The prime function is not returning correct result
我写了一段代码来检查一个数是否是素数。在Powershell中有效,但在在线提交平台上无效。
我重新阅读了如何定义一个数是否为质数,但我找不到我的代码中可能遗漏的任何其他内容。
x = int(input('Please enter a number: '))
if x > 1:
for i in range(2, x):
if (x % i) == 0:
print('The number you inputted is not a prime number.')
break
else:
print('The number you inputted is a prime number.')
break
else:
print('The number you inputted is not a prime number.')
应该打印出一个数是否为质数。
嗯,首先你必须删除最里面的 else 子句。
例如,考虑 x = 9 的情况。控制流会进入for子句,从i=2开始。它将测试 x % i == 0,即 x 是否可以被 i 整除。它不是。然后转到 else 子句。打印 "The number you inputted is a prime number" 并中断,结束 for 循环。那不是你想要的。
只有在查看它是否可以被所有 i 整除后,您才能得出该数是质数的结论。也就是说,您希望结束数字为素数的代码(print("The number you inputted is a prime number"))在 for 循环之外。
总体上需要进行一些调整。这是一个可行的解决方案:
x = int(input('Please enter a number: '))
if x > 1:
for i in range(2, x):
if (x % i) == 0:
print('The number you inputted is not a prime number.')
break
if i==x-1:
print('The number you inputted is a prime number.')
else:
print('The number you inputted is not a prime number.'
删除 else 语句怎么样?您确实需要检查所有数字 2 ... (k-1)
x = int(input('Please enter a number: '))
if x > 1:
is_prime = True
for i in range(2, x - 1):
if (x % i) == 0:
is_prime = False
break
if is_prime:
print('The number you inputted is a prime number.')
else:
print('The number you inputted is not a prime number.')
else:
print('The number you inputted is not a prime number.')
您可以使用 for-else
构造,以便仅在循环结束时才确定质数,而不会因找到除数而中断。此外,在查找除数时,您只需要迭代到输入数字的平方根即可:
x = int(input('Please enter a number: '))
for i in range(2, int(x ** .5) + 1):
if x % i == 0:
print('The number you inputted is not a prime number.')
break
else:
print('The number you inputted is a prime number.')
x = int(input('Please enter a number: '))
if x > 1:
for i in range(2, x):
if (x % i) == 0:
print('The number you inputted is not a prime number.')
break
else:
print('The number you inputted is a prime number.')
else:
print('The number you inputted is not a prime number.')
此更正有效!
解决方案
这是根据您尝试代码的方式建模的解决方案。请注意,有时,如果您从某些网站复制代码,您可以 运行 转换为带缩进的代码格式 issues/problems。例如,当我从 programiz.com: prime-number 复制一个类似的代码块时,它反复返回缩进错误。我能解决的唯一方法是手动输入代码逻辑。
也许可以尝试通过将代码复制粘贴到纯文本编辑器(如记事本)中,然后将其复制粘贴到您正在使用的 IDE 中来修复此问题。
def is_prime(num):
isprime = False
# prime numbers are greater than 1
if (num>1):
for i in range(2,num):
# check if divisible by any number
# other than itself and 1
if (num % i) == 0:
isprime = False
break
# Not divisible by any number
# other than itself and 1
else:
isprime = True
# numbers 0 and 1 are not prime numbers
else:
isprime = False
return isprime
is_prime(31), is_prime(42)
输出:
(True, False)
我想推荐一个更pythonic的方式:
x = int(input('Please enter a number: '))
if x<2:
print('The number you inputted is not a prime number.')
elif x==2:
print('The number you inputted is a prime number.')
else:
y = range(2,x)
mod = map(lambda a:divmod(x,a)[1],y)
if all(mod):
print('The number you inputted is a prime number.')
else:
print('The number you inputted is not a prime number.')
我写了一段代码来检查一个数是否是素数。在Powershell中有效,但在在线提交平台上无效。
我重新阅读了如何定义一个数是否为质数,但我找不到我的代码中可能遗漏的任何其他内容。
x = int(input('Please enter a number: '))
if x > 1:
for i in range(2, x):
if (x % i) == 0:
print('The number you inputted is not a prime number.')
break
else:
print('The number you inputted is a prime number.')
break
else:
print('The number you inputted is not a prime number.')
应该打印出一个数是否为质数。
嗯,首先你必须删除最里面的 else 子句。
例如,考虑 x = 9 的情况。控制流会进入for子句,从i=2开始。它将测试 x % i == 0,即 x 是否可以被 i 整除。它不是。然后转到 else 子句。打印 "The number you inputted is a prime number" 并中断,结束 for 循环。那不是你想要的。
只有在查看它是否可以被所有 i 整除后,您才能得出该数是质数的结论。也就是说,您希望结束数字为素数的代码(print("The number you inputted is a prime number"))在 for 循环之外。
总体上需要进行一些调整。这是一个可行的解决方案:
x = int(input('Please enter a number: '))
if x > 1:
for i in range(2, x):
if (x % i) == 0:
print('The number you inputted is not a prime number.')
break
if i==x-1:
print('The number you inputted is a prime number.')
else:
print('The number you inputted is not a prime number.'
删除 else 语句怎么样?您确实需要检查所有数字 2 ... (k-1)
x = int(input('Please enter a number: '))
if x > 1:
is_prime = True
for i in range(2, x - 1):
if (x % i) == 0:
is_prime = False
break
if is_prime:
print('The number you inputted is a prime number.')
else:
print('The number you inputted is not a prime number.')
else:
print('The number you inputted is not a prime number.')
您可以使用 for-else
构造,以便仅在循环结束时才确定质数,而不会因找到除数而中断。此外,在查找除数时,您只需要迭代到输入数字的平方根即可:
x = int(input('Please enter a number: '))
for i in range(2, int(x ** .5) + 1):
if x % i == 0:
print('The number you inputted is not a prime number.')
break
else:
print('The number you inputted is a prime number.')
x = int(input('Please enter a number: '))
if x > 1:
for i in range(2, x):
if (x % i) == 0:
print('The number you inputted is not a prime number.')
break
else:
print('The number you inputted is a prime number.')
else:
print('The number you inputted is not a prime number.')
此更正有效!
解决方案
这是根据您尝试代码的方式建模的解决方案。请注意,有时,如果您从某些网站复制代码,您可以 运行 转换为带缩进的代码格式 issues/problems。例如,当我从 programiz.com: prime-number 复制一个类似的代码块时,它反复返回缩进错误。我能解决的唯一方法是手动输入代码逻辑。
也许可以尝试通过将代码复制粘贴到纯文本编辑器(如记事本)中,然后将其复制粘贴到您正在使用的 IDE 中来修复此问题。
def is_prime(num):
isprime = False
# prime numbers are greater than 1
if (num>1):
for i in range(2,num):
# check if divisible by any number
# other than itself and 1
if (num % i) == 0:
isprime = False
break
# Not divisible by any number
# other than itself and 1
else:
isprime = True
# numbers 0 and 1 are not prime numbers
else:
isprime = False
return isprime
is_prime(31), is_prime(42)
输出:
(True, False)
我想推荐一个更pythonic的方式:
x = int(input('Please enter a number: '))
if x<2:
print('The number you inputted is not a prime number.')
elif x==2:
print('The number you inputted is a prime number.')
else:
y = range(2,x)
mod = map(lambda a:divmod(x,a)[1],y)
if all(mod):
print('The number you inputted is a prime number.')
else:
print('The number you inputted is not a prime number.')