擅长:python、mysql、java
<p>这部分是错误的:</p>
<pre><code>while pos != "ST" and "MID" and "DEF" and "GK" and "St" and "Mid" and "Def" and "Gk":
</code></pre>
<p><code>pos != "ST"</code>进行求值,其余字符串不与任何东西进行比较。事实上,该部分的评估如下:</p>
<pre><code>while (pos != "ST") and ("MID") and ("DEF") and ("GK") and ("St") and ("Mid") and ("Def") and ("Gk"):
</code></pre>
<p>非空字符串总是<code>True</code>,因此只要<code>pos != "ST"</code>是<code>True</code>,它就永远不会退出循环。你可能想做的是:</p>
<pre><code>while pos != "ST" and pos != "MID" and pos != "DEF" and pos != "GK" and pos != "St" and pos != "Mid" and pos != "Def" and pos != "Gk":
</code></pre>
<p>但是,正如其中一条评论所指出的,您可以使用<code>in</code>:</p>
<pre><code>while pos not in {"ST", "MID", "DEF", "GK", "St", "Mid", "Def", "Gk"}:
</code></pre>
<p>注意,我在这里使用了<a href="https://docs.python.org/3.7/library/stdtypes.html#set" rel="nofollow noreferrer">set</a>,因为它们提供了更有效的成员资格测试。在这个小例子中可能不太重要,但是它是一个更好的选择。你知道吗</p>