<p>跟踪代码以了解它为什么不起作用:</p>
<blockquote>
<pre><code>UserAnswer= input()
</code></pre>
</blockquote>
<p>此行不向用户提供提示。然后它将从标准输入中读取字符,直到到达行尾。读取的字符被分配给变量<code>UserAnswer</code>(作为类型<code>str</code>)。在</p>
<blockquote>
<pre><code> if UserAnswer == input():
</code></pre>
</blockquote>
<p>同样,在读取输入之前不向用户提供提示。新输入将与<code>UserAnswer</code>中的值(刚刚在上一行中输入)进行比较。如果这个新输入等于上一个输入,则执行下一个块。在</p>
<blockquote>
<pre><code> UserAnswer= float(input())
</code></pre>
</blockquote>
<p>连续第三次读取输入而不显示提示。尝试将第三个输入解析为浮点数。如果无法解析此新输入,将引发异常。如果它被解析,它被分配给<code>UserAnswer</code>。在</p>
<blockquote>
<pre><code> elif UserAnswer != float() :
</code></pre>
</blockquote>
<p>仅当第二个输入不等于第一个输入时才计算此表达式。如果这令人困惑,那是因为代码同样令人困惑(可能不是您想要的)。第一个输入(它是一个字符串)与一个新创建的float对象进行比较,该对象具有<code>float()</code>函数返回的默认值。在</p>
<p>因为字符串永远不等于浮点,所以“不等于”测试将始终为真。在</p>
<blockquote>
<pre><code> print("Please enter a correct input")
</code></pre>
</blockquote>
<p>因此,这条信息就被打印出来了。在</p>
<p>将整个代码部分更改为如下所示(但这只是一个典型的示例,实际上,您可能需要一些不同的行为):</p>
<pre><code>while True:
try:
raw_UserAnswer = input("Please enter an answer:")
UserAnswer = float(raw_UserAnswer)
break
except ValueError:
print("Please enter a correct input")
</code></pre>