原始函数未返回正确结果

时间:2019-09-24 05:25:35

标签: python primes

我写了一段代码来检查数字是否为质数。它可以在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.')

应打印出数字是否为质数。

6 个答案:

答案 0 :(得分:1)

您可以使用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.')

答案 1 :(得分:0)

好吧,首先,您必须删除最里面的else子句。

例如,假设x = 9。控制流将从i = 2开始输入for子句。它将测试x%i == 0,即x是否可被i整除。不是。然后转到else子句。打印“您输入的数字是质数”并中断,结束for循环。那不是你想要的。

查看数字是否可被所有i整除后,您仅得出数字为质数。也就是说,您希望包含数字的代码为质数(print(“输入的数字为质数”))在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.'

答案 2 :(得分:0)

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.')

此更正有效!

答案 3 :(得分:0)

解决方案

这是一个按照您尝试代码的方式建模的解决方案。请注意,有时,如果您从某些网站复制代码,则可能会遇到缩进的代码格式化问题/问题。例如,当我从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)

答案 4 :(得分:0)

我想提出一种更Python化的方式:

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.')

答案 5 :(得分:-2)

如何删除else语句。您真的需要检查所有数字2 ...(k-1)

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>