在Python教程中使用break命令的问题
题
我正在他们网站上关注python教程,我目前正处于休息继续部分。我刚刚尝试了这个示例代码。
>>> 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
在我看来,它继续运行内部循环,但为什么教程不考虑这一点?它是否已经过时了最新的解释器构建(我正在运行xubuntu jaunty)?
我可以通过添加行
来修复它 else:
... if n != y:
... print n, 'is a prime number'
... y = n
但我担心这可能是糟糕的编码习惯。谢谢你的帮助。
解决方案
您显示的输出包含十次次字符串“ x 是素数”。但是,此字符串打印在内部循环的 else
子句中,并且每次执行内部循环时最多执行一次。
由于外环执行八次迭代,因此“ x 是素数”。不能打印超过八次次。因此,您显示的输出不能由显示的代码带来。
结论:有些东西可疑。你可以在执行时显示代码吗?
编辑:已解决!
您错误地缩进了else子句,因此Python将其解释为属于 if
语句。 Python将选项卡视为 8 空格。也许您的编辑器将标签显示为 4 空格。那样你可能错过了这个bug。根据 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
其他提示
我最好的猜测是你的'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')
您可能需要更新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
我认为你的缩进错了。如果我接受你的代码,并缩进其他内容以使它在if语句下,我会得到你正在获得的输出。
以下代码会重现您的输出
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'
,而
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'
你想做什么。
注意else的缩进中的不同。
我认为 else
应始终与对齐
。这就是我读过的。但是在这个素数生成器代码中,将一次素数写入的唯一方法是将 else
与 for x
对齐。所以我对这种认同没有任何解释。虽然我刚开始学习Python。
不隶属于 StackOverflow