Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 倒计时和质数检查_Python 2.7 - Fatal编程技术网

Python 2.7 倒计时和质数检查

Python 2.7 倒计时和质数检查,python-2.7,Python 2.7,我试着写一个函数,如果一个人插入一个值,它会倒计时到0,并显示每个数字是否为素数 def pn(n): while n > 0: #print (n) if n == 1: print '1 is a special number' elif n == 2: print '2 is EVEN and PRIME number' else:

我试着写一个函数,如果一个人插入一个值,它会倒计时到0,并显示每个数字是否为素数

def pn(n):
     while n > 0:
         #print (n)
         if n == 1:
             print '1 is a special number'
         elif n == 2:
             print '2 is EVEN and PRIME number'
         else:
             v_rem = n%2
             v_half = int(n/2)

             if v_rem == 0:
                 print n, ' is EVEN number'
             elif v_rem == 1:
                 print n, ' is ODD number'
                 i = 2
                 v_is_prime = "y"

                 while i <= v_half:
                     v_prim_rem=n%i
                     if v_prim_rem == 0:
                        print n, ' is not a prime number'
                        v_is_prime = "n"
                        break
                     i = i + 1
                     if v_is_prime == "y":
                         print n, 'is a prime number'
         n = n-1

您的担忧可能与不正确的输出有关:

10  is EVEN number
9  is ODD number
9 is a prime number # here
9  is not a prime number
8  is EVEN number
7  is ODD number
7 is a prime number
7 is a prime number # and here
6  is EVEN number
5  is ODD number
5 is a prime number
4  is EVEN number
3  is ODD number
2 is EVEN and PRIME number
1 is a special number
缩进错误:v_is_prime的检查应该在v_half上的循环之外,因此应该在一个步骤中确定:

v_is_prime = "y"
while i <= v_half:
    v_prim_rem=n%i
    if v_prim_rem == 0:
        print n, ' is not a prime number'
        v_is_prime = "n"
        break
    i = i + 1
if v_is_prime == "y":
    print n, 'is a prime number'
但是,如果可以使用for循环,则不要使用while循环:

您还可以采用字符串格式:

print "{0} is a prime number".format(n)
最后,此问题非常适合以下情况:


请正确缩进代码,因为它决定了Python中的程序流。另一方面,你忘了问问题。
for n in range(n, 0, -1):
     ...
for i in range(int(n/2)):
     ...
else:
    ...
print "{0} is a prime number".format(n)
def pn(n):
    primes = range(n+1)
    primes[1] = 0
    for p in primes:
        if p > 0:
            for x in range(p, (n // p) + 1):
                try:
                    primes[x*p] = 0
                except IndexError:
                    break
    for x in range(n, 0, -1):
        if x % 2 == 0:
            print "{0} is EVEN".format(x)
        else:
            print "{0} is ODD".format(x)
        if primes[n] > 0:
            print "{0} is prime".format(x)
        else:
            print "{0} is not prime".format(x)