素数查找器,它';python中的s

素数查找器,它';python中的s,python,Python,代码中有一个逻辑缺陷,我就是不知道它在哪里。更改此项: # this program will test numbers and check if they are prime numbers or even numbers num = eval(input('Enter a number: '))#generating user input for i in range(num): x = 2 if num % 2 == 0: #test for even numbers

代码中有一个逻辑缺陷,我就是不知道它在哪里。更改此项:

# this program will test numbers and check if they are prime numbers or even numbers

num = eval(input('Enter a number: '))#generating user input
for i in range(num):
    x = 2
    if num % 2 == 0: #test for even numbers
        print(num, x, 'is even')
    else:
        while num % x != 0:#the idea here is to enter a loop and test the numbers against x=2, x +=1... to check if they are divisible
            x += 1         #by x
            break
        if num % x == 0:    #x is however either 2 or 3. it never advances to four and numbers like 25 become prime numbers
            print(num,x, 'is odd')
        else:
            print(num,x, 'is prime')
    num -=1
致:


您可以使用以下工具更快地测试素数:

num = input('Enter a number: ')
if num.is_digit(): #evaluate if is a number
    num = int(num)
else:
    #broke code logic
    num = 0
在代码中:

num > 1 and all(num % i for i in xrange(2, sqrt(num)))

您的基本问题在于以下内容:

    num = int(input('Enter a number: ')) 
    for i in range(num): 
        x = 2 
        if num % 2 == 0:
            print(num, x, 'is even') 
        else: 
            if num > 1 and all(num % i for i in xrange(2, sqrt(num))):
                print(num,x,'is prime')
            else: print(num,x,"is odd")
        num -=1
。。。您有一个无条件的
中断
,这意味着循环不会运行超过一次。比较

while num % x != 0:
    x += 1
    break

使用
int()
而不是
eval()
!是的,这是家庭作业,有很多问题。什么是
for
循环-您从未在任何地方使用
i
?请注意,
range()
从0开始,除非您另有指定。如果num不能被2整除,它将不能被任何其他偶数整除,因此您可以使用
x+=2
跳过所有偶数num<代码>当数值%x!=0与
相同,而num%x
。我使用了int(),但它不起作用!这对你的成功至关重要,实际上也是做这个家庭作业的原因。也就是说,编写家庭作业并不是为了获得正确的行为,而是在尝试获得正确行为的同时找出如何解决遇到的问题。
while num % x != 0:
    x += 1
    break
def is_prime(n):
    if n < 4:
        return n in {2, 3}
    elif not n % 2:
        # even
        return False
    else:
        return all(n % div for div in range(3, int(n ** 0.5 + 1.), 2))
def main():
    print("Show all primes up to what number?")
    upto = int(input(": "))
    for n in range(2, upto + 1):
        if is_prime(n):
            print("{} is prime".format(n))
        else:
            print("{} is {}".format(n, ["even", "odd"][n % 2]))
main()