擅长:python、mysql、java
<p><code>getHours</code>和{<cd2>}假设输入分别为<code>int</code>和{<cd4>}格式。因此,<code>...lower()=="done"</code>的检查永远不可能得到满足:如果用户在这两个函数中的任何一个的提示下输入了<code>done</code>,那么程序就会因<code>ValueError</code>异常而死亡。但那是另一个错误。在</p>
<p>在外循环的第一段末尾,我们知道这三个字符串都不是空的(内部循环保证这一点)。然后,这些字符串不会被重置,所以它们仍然不是空的,所以在外循环的每个分支上,没有一个内部循环会再次执行。这将导致无限快的空循环,而不是一个干净的出口(即,不清楚为什么我刚才描述的明显缺陷的症状与您的观察结果不同),因此,可能还会有更多的bug,但是当这一小段代码中有两个很容易被发现的致命bug时,我认为停止挖掘是明智的(再找出另外几个有什么用?-). 在</p>
<p>您应该重构结构,使函数的作用非常明确和精确:这些函数究竟返回什么?如果是字符串,对这些字符串的约束是什么?似乎他们大致返回了“一个有效的输入字符串”(除了如果用户在工资或工作时间中有错误,可能会杀死所有程序,你可以用一个<code>try</code>/<code>except</code>)第一个,而且只有一个可以返回<code>done</code>(但是它应该在它的提示中说明这一点,并避免第二个如果用户对第一个提示说<code>done</code>,则提示无效)。一旦将它们记录为这样,就可以清楚地看到内部while循环是不必要的;外部循环可能只是</p>
<pre><code>while True:
employeeName=getName()
if employeeName.lower()=="done":
break
print "The employee's name is", employeeName
employeeHours=getHours()
print employeeName, "worked", employeeHours, "this week."
employeeWage=getWage()
print employeeName + "'s hourly wage is $" + employeeWage
</code></pre>