<p>这确实是一个缩进问题(或逻辑流问题)。对于大多数编程语言来说,这无关紧要,但在python中却是必不可少的。你知道吗</p>
<p>下面是您的代码实际执行的操作:</p>
<pre><code># initialize boycount and girlcount
while(letter != 'q'):
# do some stuff inside the while loop
# do some stuff inside the while loop
if letter == 'b':
# increment boycount
# do some stuff inside the while loop
# do some stuff after the while loop
# letter must be 'q' now that the while loop ended
if letter == 'g':
# increment girlcount
# this will never happen, because letter cannot be 'g' here
else:
# print summary
# this will always happen because letter is 'q'
</code></pre>
<p>下面是代码应该执行的操作:</p>
<pre><code># initialize boycount and girlcount
while(letter != 'q'):
# do some stuff inside the while loop
# do some stuff inside the while loop
if letter == 'b':
# increment boycount
if letter == 'g':
# increment girlcount
# do some stuff inside the while loop
# do some stuff after the while loop
# letter must be 'q' now that the while loop ended
# print summary
</code></pre>
<p>与大多数其他编程语言不同,python需要缩进来定义复合语句块的范围。我有时会用一个donothing<code>pass</code>语句和一个注释来表示我的意图:</p>
<pre><code># initialize boycount and girlcount
while(letter != 'q'):
# do some stuff inside the while loop
if letter == 'b':
# increment boycount
pass # end if
if letter == 'g':
# increment girlcount
pass # end if
pass # end while
# print summary
</code></pre>
<p><code>pass</code>语句只是一个不起任何作用的占位符,但它可以帮助我使预期的控制流更清晰,并且可以帮助我检测设计错误。你知道吗</p>
<p>另一个可以使用的诊断工具是print()语句。你知道吗</p>
<pre><code># initialize boycount and girlcount
print("start of while letter loop")
while(letter != 'q'):
# do some stuff inside the while loop
if letter == 'b':
print("letter b: increment boycount")
# increment boycount
pass # end if
if letter == 'g':
print("letter g: increment girlcount")
# increment girlcount
pass # end if
pass # end while
print("end of while letter loop")
# print summary
</code></pre>
<p>当您测试包含这些print语句的程序时,您将能够确认每个命令都按预期执行。在验证了逻辑工作之后,您只需在print语句前面放置一个<code>#</code>,将其转换为注释。你知道吗</p>
<p>为了完整起见,官方<a href="https://docs.python.org/3/tutorial/introduction.html#first-steps-towards-programming" rel="nofollow noreferrer">python tutorial</a>提到</p>
<blockquote>
<p>The body of the loop is indented: indentation is Python’s way of
grouping statements</p>
</blockquote>