在Python 3.4.1中查找素数
下面是我收到的输出在Python 3.4.1中查找素数,python,python-3.x,Python,Python 3.x,下面是我收到的输出 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') 但是,这是重复的价值观。此外,9不是质数。 请帮我纠正语法 以下是链接: 程序会检查n是否可被因子整除
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')
但是,这是重复的价值观。此外,9不是质数。
请帮我纠正语法
以下是链接:
程序会检查
n
是否可被因子整除。如果是,很好,您可以正确打印它是复合的。如果不是,你会立即打印出一个素数。问题是,在检查完其他因素之前,你不知道这一点。9不能被2整除并不意味着它是素数。你也必须检查3
这意味着要稍微改变一下你的逻辑。在声明n
为素数之前,需要检查所有可能的因素。一种方法是使用一个额外的布尔变量
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
请注意,“is a prime number”打印输出不再在内部循环内,而是在内部循环外
另一种方法是使用很酷的Python技巧,向内部循环添加else
子句。else
子句仅在循环退出而未命中break
语句时发生
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')
请注意,将
else
子句固定到循环上的想法是Python ism。它在C或Java等其他语言中不存在。因此,尽管很简洁,但理解基于布尔变量的解决方案也很好。该技术适用于任何语言。根据您提供的链接,在示例代码下面有一条语句,其中
是的,这是正确的代码。仔细看:else子句属于for循环,而不是if语句
因此,如果我很难理解到底发生了什么,那么您应该将
else
子句的目标定为内部的而不是。找到了这个答案还有一个类似这样的问题,它可能会对您有所帮助:这是缩进问题……感谢您的解答。
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')