gpt4 book ai didi

python - 尝试使用 bool 开关设置嵌套 while 循环

转载 作者:太空宇宙 更新时间:2023-11-04 11:04:27 25 4
gpt4 key购买 nike

我正在尝试设置一个 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 循环开始时重置变量值。

还有一些需要改进的地方(与这个错误无关):

  • getHoursgetWage 中,您可以只使用 while True 而不是您现在拥有的条件。如果条件为假,无论如何您都已经从函数返回。

  • 您需要在 getHoursgetWage 中捕获 ValueError,以防输入非数字数据。

  • 使用 not booleanDone 而不是 booleanDone==False。尽管如果您按照我的建议删除内部循环,您甚至不需要这个 bool 值:只需在需要时跳出循环即可。

关于python - 尝试使用 bool 开关设置嵌套 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2594735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com