<p>Python看起来确实与英语/伪代码非常相似,但在本例中,含义不同。当您标记问题时,构造<code>while <condition>: <looping code></code>是一个循环,这意味着当程序到达这一点时,只要条件为真,它就会继续运行包装的代码。你知道吗</p>
<p>在本例中,如果不是因为<a href="https://docs.python.org/3/reference/expressions.html#operator-precedence" rel="nofollow noreferrer">operator precedence</a>的问题,您的代码将是一个无限循环。你所写的被解释为:</p>
<pre class="lang-python prettyprint-override"><code>while creature in (field == True):
for spell in hand:
if spell.manacost >=1:
spell.manacost -= 1
</code></pre>
<p>它永远不会运行,而不是</p>
<pre class="lang-python prettyprint-override"><code>while (creature in field) == True:
for spell in hand:
if spell.manacost >=1:
spell.manacost -= 1
</code></pre>
<p>或同等地</p>
<pre class="lang-python prettyprint-override"><code>while creature in field:
for spell in hand:
if spell.manacost >=1:
spell.manacost -= 1
</code></pre>
<p>它们都是无限循环,将永远运行。你知道吗</p>
<hr/>
<p>你需要的是一个<em>函数</em>,它根据原始的魔法消耗和当前的修正值来计算当前的魔法消耗,就像阿托建议的那样。你知道吗</p>
<p>一种方法是作为<code>Spell</code>类中的新方法,如下所示:</p>
<pre class="lang-python prettyprint-override"><code>class Spell:
def current_manacost(self, field, creature):
if creature in field:
return self.manacost - 1
else:
return self.manacost
def __init__(self,manacost):
self.manacost = manacost
print([x.current_manacost(field, creature) for x in hand])
</code></pre>
<p><a href="https://tio.run/##jVDLasQwDLz7K3SMwQ0kvhV66if0uIRgEpmYuk6wvLD9@lSOm4TdHrY6CD1mhGaW7zTNQa/r4A0RvEc06RrxVQDHiBb63gWX@r4i9FZ9mWCGmZIy6VNNaHyaZMHmyJB6h8Ab7OU9gKm843w/Ltd4Uwohht9feLS/VbVKq1YK69CPPL90pazNsmAYq50imb3p@VjQ@1PMcI0RQ@r3x4oo2G4oONinImePKbhQgOc2R0RehgfpL9AcIPSEzyniieH/cVlQw@0muWqkoPbo2DLSR6fZnsmEzUBqFLWKdCeEWKILqbrc6j82PRoEdo5wy47kO51c1x8" rel="nofollow noreferrer" title="Python 3 – Try It Online">Try it online!</a></p>