for n in range(2,10):
for x in range(2,n):
if n%x==0:
print(n, 'equals to', x, '*', n//x)
break
else:
print(n, 'is a prime number')
以下是我收到的输出。
3 is a prime number
4 equals to 2 * 2
5 is a prime number
5 is a prime number
5 is a prime number
6 equals to 2 * 3
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
8 equals to 2 * 4
9 is a prime number
9 equals to 3 * 3
但是,它正在重复这些价值观。此外,9不是素数。 请帮我纠正语法。
答案 0 :(得分:5)
如果你拥有它,你的程序会检查n
是否可以被一个因子整除。如果它很好,你正确打印它是复合的。如果不是,则立即将其打印为素数。问题是,在您检查了其他因素之前,您还不知道。仅仅因为9不能被2整除并不意味着它是素数。你也必须检查3。
这意味着稍微改变你的逻辑。在声明n
为素数之前,您需要检查所有可能的因素。一种方法是使用额外的布尔变量。
for n in range(2,10):
is_prime = True
for x in range(2,n):
if n%x==0:
print(n, 'equals to', x, '*', n//x)
is_prime = False
break
if is_prime:
print(n, 'is a prime number')
请注意,"是素数"打印输出不再在内循环内部,它在它外面。
另一种方法是使用很酷的Python技巧并在内部循环中添加else
子句。仅当循环退出而未命中else
语句时,才会发生break
子句。
for n in range(2,10):
for x in range(2,n):
if n%x==0:
print(n, 'equals to', x, '*', n//x)
break
else:
print(n, 'is a prime number')
请注意,将else
子句添加到循环中的想法是Python主义。它不存在于其他语言中,如C或Java。因此,虽然整洁,但理解基于布尔变量的解决方案也是很好的。该技术适用于任何语言。
答案 1 :(得分:0)
根据您提供的链接,它在示例代码下面有一个声明
是的,这是正确的代码。仔细观察:else子句属于for循环,而不是if语句。
因此,您应该将else
子句定位为内部for
而不是if
。
答案 2 :(得分:0)
我很难理解实际情况。找到了这个答案https://stackoverflow.com/a/16451661/5203300