为什么我在Python的这个主要测试程序的输出中出现错误?

时间:2017-03-20 16:43:55

标签: python python-2.7

我在Python中试用了这个代码,用于测试数字是否为素数。

x = int(raw_input('Enter a number:'))
for i in range (2, x):
    if (x % i) == 0:
        print (x, 'is not prime')
    else:
        print(x, 'is prime')

但是当我输入25时,我得到以下输出。为什么?

为什么输出打印了这么多次呢?另外,为什么突然有一条线说25这不是一个素数(正确)中有这么多'是素数'? enter image description here

4 个答案:

答案 0 :(得分:1)

你必须使用break

x=int (raw_input('Enter a number:'))
for i in range (2,x):
    if (x%i)==0:
        print (x,'is not prime')
        break 
else:
    print(x,'is prime')

大于1的正整数,除了1之外没有其他因素,数字本身称为素数。因此,最好检查变量x是否大于1.

x=int (raw_input('Enter a number:'))
# prime numbers are greater than 1
if x > 1:
# check for factors
    for i in range(2,x):
        if (x % i) == 0:
            print(x,"is not a prime number")
            print(i,"times",x//i,"is",x)
            break
    else:
        print(x,"is a prime number")

# if input number is less than
# or equal to 1, it is not prime
else:
   print(x,"is not a prime number")

答案 1 :(得分:1)

由于您正在从2循环到x以获取值x,即循环x-2次,并且您正在为每次迭代打印。因此, x = 25 23 打印语句。

您可以这样做:

x = int (raw_input('Enter a number:'))
answer = "{} is prime"
for i in range (2,x):
    if (x%i)==0:
        answer = "{} is not prime"
        break
    else:
        pass
print(answer.format(str(x)))

答案 2 :(得分:1)

当你运行这段代码时,python将继续在for循环中为该范围内的所有i执行代码。

当你输入25时,python首先将它除以2.由于25%2 = 1,它打印出它是素数

它对3和4的作用相同,并且打印都是素数

在5,它计算25%5 = 0并正确打印出25不是素数

试试这个

x=int (raw_input('Enter a number:')) for i in range (2,x): if (x%i)==0: print(x,'is not prime') break elif i==x-1: print('x is prime')

Python将数字除以i。如果在任何时候余数为0,则打印出该数字不是素数并且代码结束。

如果余数不为零,则代码循环回到for循环的开头

如果x%i在倒数第二次迭代中从未等于零(由i == x-1表示),则代码打印出x为素数

答案 3 :(得分:0)

使用 for 循环语句

x = int(raw_input('Enter a number:'))
for i in range(1, x):
    if x <= 2:
        print(x, 'is prime')
        break

    elif (x % i) == 0:
        print (x, 'is not prime')
        break

    else:
        print(x, 'is prime')
        break