我正在尝试设置一个 while
循环,该循环会询问用户的员工姓名、工作时间和小时工资,直到用户输入“完成”。最终我将修改代码以计算每周工资并将其写入列表,但一次只做一件事。问题是一旦主 while
循环执行一次,它就停止了。不会出错,只是停止。我必须终止程序才能让它停止。我希望它一次又一次地问这三个问题,直到用户完成。想法?
请注意,这只是一个练习,并不适用于任何实际应用。
def getName():
"""Asks for the employee's full name"""
firstName=raw_input("\nWhat is your first name? ")
lastName=raw_input("\nWhat is your last name? ")
fullName=firstName.title() + " " + lastName.title()
return fullName
def getHours():
"""Asks for the number of hours the employee worked"""
hoursWorked=0
while int(hoursWorked)<1 or int(hoursWorked) > 60:
hoursWorked=raw_input("\nHow many hours did the employee work: ")
if int(hoursWorked)<1 or int(hoursWorked) > 60:
print "Please enter an integer between 1 and 60."
else:
return hoursWorked
def getWage():
"""Asks for the employee's hourly wage"""
wage=0
while float(wage)<6.00 or float(wage)>20.00:
wage=raw_input("\nWhat is the employee's hourly wage: ")
if float(wage)<6.00 or float(wage)>20.00:
print ("Please enter an hourly wage between $6.00 and $20.00")
else:
return wage
##sentry variables
employeeName=""
employeeHours=0
employeeWage=0
booleanDone=False
#Enter employee info
print "Please enter payroll information for an employee or enter 'DONE' to quit."
while booleanDone==False:
while employeeName=="":
employeeName=getName()
if employeeName.lower()=="done":
booleanDone=True
break
print "The employee's name is", employeeName
while employeeHours==0:
employeeHours=getHours()
if employeeHours.lower()=="done":
booleanDone=True
break
print employeeName, "worked", employeeHours, "this week."
while employeeWage==0:
employeeWage=getWage()
if employeeWage.lower()=="done":
booleanDone=True
break
print employeeName + "'s hourly wage is $" + employeeWage
最佳答案
问题是在第一个循环之后,employeeName
和其他变量已经有了值,因此您的内部 while 循环将被跳过。这导致外层循环无限重复而不做任何事情。
我只想删除内部 while 循环:您实际上并不需要它们,因为您已经在 getHours
和其他函数中进行了验证。另一种选择是在外部 while 循环开始时重置变量值。
还有一些需要改进的地方(与这个错误无关):
在
getHours
和getWage
中,您可以只使用while True
而不是您现在拥有的条件。如果条件为假,无论如何您都已经从函数返回。您需要在
getHours
和getWage
中捕获ValueError
,以防输入非数字数据。使用
not booleanDone
而不是booleanDone==False
。尽管如果您按照我的建议删除内部循环,您甚至不需要这个 bool 值:只需在需要时跳出循环即可。
关于python - 尝试使用 bool 开关设置嵌套 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2594735/