擅长:python、mysql、java
<p>代码中有一些问题导致它挂起。我建议您熟悉python调试器,例如<a href="http://docs.python.org/library/pdb.html" rel="nofollow">pdb</a>。这将允许您在运行时查看值,逐行逐行执行程序。在</p>
<p>撇开缩进问题不谈,以下是我发现的问题:</p>
<ol>
<li>在while循环中,使用<code>while hp1 > 0 and hp2 > 0</code>作为条件。您不想在这里使用<code>or</code>,否则它会一直循环,直到<em>两个</em>字符都有<;0hp,所以您应该将其更改为<code>and</code>。在</li>
<li>当计算<code>rawacc</code>(对于这两个字符),您使用了<code>if char1rawacc > 95</code>,它实际上对<code>char1rawacc</code>强制执行一个<em>最大值</em>。你对<code>char2rawacc</code>做了同样的事情。将它们切换到<code>if char1rawacc < 95</code>和<code>if char2rawacc < 95</code>。在</li>
<li>作为一个样式说明,如果您将此作为脚本执行,则应该将函数调用放在函数定义本身之外,一个好的方法是在脚本的末尾放置一个类似这样的块:</li>
</ol>
<pre>
if __name__ == "__main__":
# the following only gets executed if the file is run as a script
char1()
char2()
stapsbatt("Character 1", "Character 2", 400, 30)
</pre>
<p>希望这能让你走出无限循环!我用这些改变让游戏在我的电脑上运行。在</p>
<p>现在,正如Oz123提到的,你真的在滥用全局变量。相反,您应该研究如何创建和传递对象(参见9000的答案)。例如,您可以为您的角色定义一个类,并创建该类的两个实例(char1和char2),并传递给您的battle函数。这也将使您免于大量的冗余代码。这将需要一些重大的重组,但这是值得的。如果你在这方面遇到了问题,请随意提出一个新问题。在</p>