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

标签 python while-loop nested-loops

我正在尝试设置一个 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/

相关文章:

python - 从名词 Wordnet python 获取动词

python - 查找最大数 <= 其他一些数

c - for循环中两个缓冲区的总和

scala - 具有多个生成器的 for 循环如何在 Scala 中工作?

c - 如何摆脱嵌套循环

python - 嵌套列表上的 Itertools 链

c# - Python 长字符串由\n 分隔并拆分模拟长字符串 c#

C while无限循环打印错误

c - 输入一个字符打印错误,但c中输入0时不打印

c - C中的循环问题