if语句语法。错误输出

2024-09-28 21:29:35 发布

您现在位置:Python中文网/ 问答频道 /正文

x=11

for n in range(1,x+1):
    #print(n)
    if (x%n)==0:
        if n == 1 and n==x:
            print(f"{x} is a prime number")
            break       
        else:
            #print(n)
            print(f"{x} is not a prime number")
            break

输出为:11不是质数。 据我所知,逻辑是正确的,但为什么输出错误呢


Tags: andinnumberforifis错误not
1条回答
网友
1楼 · 发布于 2024-09-28 21:29:35

您试图实现的x中判定为素数的算法如下所示:

给定一个整数x作为输入,在1x之间循环所有整数n。 如果我们找到一个n精确地除以x,并且如果n不是1x,则输出x不是素数。否则,输出x是素数

通过这样的描述,您可以看到Python的错误所在。在所描述的算法中,我们无法判断x是否为素数,直到我们尝试了所有的n,并确定它们不除x,除非n == 1n == x。但是在您的示例代码中,在我们完成对所有n的循环之前,您的素性测试(顺便说一句,这是错误的)

相反,算法说我们应该首先尝试所有的n,检查x是否不是素数,如果我们找不到一个显示x不是素数的,那么x显然素数。这就是我们在Python中要做的

根据描述,我们可以编写一个测试,测试一个数字是否不是素数:

x % n == 0 and n != 1 and n != x

如果任何n给出了这个条件的True,那么x不是素数。我们可以对每个n执行此操作,并在找到循环时停止循环:

for n in range(1,x+1):
    if x % n == 0 and n != 1 and n != x:
        print(f"{x} is not a prime number")
        break

现在,如果我们在没有break的情况下到达循环的末尾,那么我们知道x是素数。我们怎么知道我们什么时候完成了循环?一个选项是使用标志变量,而不是直接打印输出。例如

isprime = True
for n in range(1,x+1):
    if x % n == 0 and n != 1 and n != x:
        isprime = False
        break

if isprime:
    print(f"{x} is a prime number")
else:
    print(f"{x} is not a prime number")

这对你有用。它不是素性测试最有效的算法,但它简单有效

注: 作为快速的第一步,如果只是从n=2循环到n=x-1,则不需要n == 1n == x测试。例如

isprime = True
for n in range(2, x):
    if x % n == 0:
        isprime = False
        break

相关问题 更多 >