Python教程中使用break命令的问题
我正在按照他们网站上的Python教程学习,现在到了“break”和“continue”这一部分。我刚试了这个示例代码。
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print n, 'equals', x, '*', n/x
... break
... else:
... # loop fell through without finding a factor
... print n, 'is a prime number'
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
结果不是像上面说的那样输出,而是得到了
3 is a prime number
4 equals 2 * 2
5 is a prime number
5 is a prime number
5 is a prime number
6 equals 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 2 * 4
9 is a prime number
9 equals 3 * 3
我觉得它似乎继续执行了里面的for循环,但为什么教程没有考虑到这一点呢?是因为这个教程对我现在用的最新解释器版本来说过时了吗(我用的是xubuntu jaunty)?
我通过添加这一行来解决了这个问题
else:
... if n != y:
... print n, 'is a prime number'
... y = n
但我担心这样做可能不是好的编码习惯。谢谢你的帮助。
5 个回答
0
你可能需要更新你的Python解释器。
这段代码在我这里运行得很好(注意Python的版本号):
Python 2.6.1 (r261:67515, Dec 6 2008, 16:42:21)
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print n, 'equals', x, '*', n/x
... break
... else:
... # loop fell through without finding a factor
... print n, 'is a prime number'
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
1
我猜你的'else:'语句没有正确缩进,这样就导致了你的结果不对。你需要检查一下'else'的缩进是否和'for x'在同一水平线上。
也就是说,你应该使用:
for n in range(2,10):
for x in range(2,n):
if n%x == 0:
print(n, '=', x, '*', n/x)
break
else:
print(n, 'is a prime')
而不是:
for n in range(2,10):
for x in range(2,n):
if n%x == 0:
print(n, '=', x, '*', n/x)
break
else:
print(n, 'is a prime')
4
你展示的输出结果中包含十次字符串"x是一个质数"。不过,这个字符串是在内层循环的else
部分打印的,所以每次内层循环执行时,最多只能执行一次。
因为外层循环执行了八次,所以"x是一个质数"这个字符串最多只能打印八次。因此,你展示的输出不可能是由所示的代码产生的。
结论:这里面有问题。你能把你执行的代码展示出来吗?
编辑:解决了!
你错误地缩进了else
部分,导致Python把它当成了if
语句的一部分。Python把一个制表符当作8个空格来处理。也许你的编辑器把制表符显示为4个空格。这样的话,你可能就错过了这个错误。根据PEP 8的建议,请不要混用制表符和空格,最好用四个空格来缩进你的代码。
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print n, 'equals', x, '*', n/x
... break
... else:
... # loop fell through without finding a factor
... print n, 'is a prime number'
...
3 is a prime number
4 equals 2 * 2
5 is a prime number
5 is a prime number
5 is a prime number
6 equals 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 2 * 4
9 is a prime number
9 equals 3 * 3