<p>并不是说它什么都没做。事实上,它做了很多,它在一个无限循环中。输入错误输入时会发生以下情况:</p>
<ul>
<li><code>p1 = None</code>,<code>p2 = None</code></李>
<li>在第一次迭代中,由于<code>p1 == None</code>的计算结果为<code>true</code>,它执行<code>if</code>语句,一个新值被分配给<code>p1</code>,现在它不再是<code>None</code></李>
<li>在第二次迭代中,<code>p2 == None</code>的计算结果为<code>true</code>,它执行<code>if</code>语句,一个新值被分配给<code>p2</code>,现在它不再是<code>None</code></李>
<li>在那之后,<code>p1</code>和<code>p2</code>都不是<code>None</code>,因此<code>if</code>语句都不会执行,循环会无限迭代</李>
</ul>
<p>我建议你做以下几点:</p>
<pre><code>print('''Please pick one of the following:
Rock
Paper
Scissors''')
p1 = None
p2 = None
while True:
gameDict = {"rock":1, "paper":2, "scissors":3}
in1 = input("Player 1: ").lower()
in2 = input("Player 2: ").lower()
p1 = gameDict.get(in1)
p2 = gameDict.get(in2)
while p1 ==None or p2 ==None:
if(p1 == None):
val = input("Player 1, please enter one of the choices listed above: ")
if(gameDict.get(val) != None):
p1 = val
if p2 == None:
val = input("Player 2, please enter one of the choices listed above: ")
if(gameDict.get(val) != None):
p2 = val
print('Done!!')
print(p1, p2)
</code></pre>
<p>我已经修好的东西:</p>
<ol>
<li>为输入字符串值创建一个专用变量,即<code>val</code></李>
<li>将<code>elif</code>更改为<code>if</code>,因为其中一个玩家的输入可能有效,但另一个玩家的输入无效,并且您希望循环,直到两者都有效</李>
</ol>