我写这个程序是为了检查“否”的情况。是否为素数,但它会多次显示该数字为素数。我该怎么解决呢?
若要检查该数字是否为素数,请检查是否为正数。
num = int(input("please enter the number you want to check\n"))
if num > 1:
    for i in range(2, num):
        if (num % i) == 0:
            print("the number is not prime")
            print(str(i) + " times " + str(num//i) + " is "+ str(num))
            break
        else:
            print("the number is prime")
elif(num == 1):
    print("the number is not prime")
else:
    print('enter a positive value')发布于 2019-06-12 09:00:02
您的问题是,for-循环的else部分是错误的。每次除法检查失败时,您都会打印"the number is prime",而不仅仅是在最后。
我添加了一个isPrime布尔值,用于跟踪单个检查是否失败。只有当none失败时,才能打印出该数字是素数。
num = int(input("please enter the number you want to check\n"))
if num > 1:
    isPrime = True
    for i in range(2, num):
        if (num % i) == 0:
            print("the number is not prime")
            print(str(i) + " times " + str(num//i) + " is "+ str(num))
            isPrime = False
            break
    if isPrime:
        print("the number is prime")
elif(num == 1):
    print("the number is not prime")
else:
    print('enter a positive value')您可以通过一个名为换-否则的python构造(@TheGamer007 007的学分)进一步简化它:
num = int(input("please enter the number you want to check\n"))
if num > 1:
    for i in range(2, num):
        if (num % i) == 0:
            print("the number is not prime")
            print(str(i) + " times " + str(num//i) + " is "+ str(num))
            break
    else:
        print("the number is prime")
elif(num == 1):
    print("the number is not prime")
else:
    print('enter a positive value')它可以工作,因为Python的for-loops可以有一个else:追随者,只有在不脱离循环的情况下才会触发。
这可能正是你想要做的。在这种情况下,你所做的只是你的缩进。
此外,从算法的角度来看,有更好的方法来检验。第一个简单的改进是您不需要检查range(2,num),而只需要检查range(2, int(math.sqrt(num))+1)
https://stackoverflow.com/questions/56558234
复制相似问题