擅长:python、mysql、java
<p>正如其他人所指出的,主要问题是<code>break</code>只从内部<code>for</code>循环中断,而不是从外部{<cd3>}循环中断,这可以使用例如布尔变量或<code>return</code>来修复。在</p>
<p>但是,除非您希望为每个不包含用户名的<em>行打印“not registered”行,否则应该使用<a href="https://docs.python.org/2/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops" rel="nofollow noreferrer">^{<cd5>}</a>而不是{<cd6>}。但是,与使用<code>for</code>循环不同的是,您还可以将<code>next</code>与生成器表达式一起使用,以获得正确的行(如果有的话)。在</p>
<pre><code>while True:
chosenUser = raw_input("Enter a username: ")
with open("userDetails.txt", "r") as userDetailsFile:
lineWithUser = next((line for line in userDetailsFile if chosenUser in line), None)
if lineWithUser is not None:
print "\n"
print chosenUser, "has taken previous tests. "
break # will break from while now
else:
print "That username is not registered."
</code></pre>
<p>或者,如果您实际上不需要<code>lineWithUser</code>,只需使用<code>any</code>:</p>
^{pr2}$
<p>这样,代码也更紧凑,更容易阅读/理解它在做什么。在</p>