Python 3.x 我错过了什么?While循环

Python 3.x 我错过了什么?While循环,python-3.x,pycharm,Python 3.x,Pycharm,正在尝试创建带有while循环的工资计算器。我在这个过程中遇到了一个障碍 name='1' print('We pay your employees payroll!') while name != '0': name=input("\nEnter employee or Enter '0' to quit: ") pr=float(input("Enter Payrate: ")) hrs=float(input("Ent

正在尝试创建带有while循环的工资计算器。我在这个过程中遇到了一个障碍

    name='1'
    print('We pay your employees payroll!')
    while name != '0':
        name=input("\nEnter employee or Enter '0' to quit: ")
        pr=float(input("Enter Payrate: "))
        hrs=float(input("Enter Hours Worked: "))
        if hrs <= 40:
            print("Hours Worked: ", hrs)
            print("Payrate: ", pr)
            print("Basepay:", hrs*pr)
        elif hrs > 40:
            print('Hours Worked: ', hrs)
            print("Payrate: ", pr)
            print("Overtime Rate: ", pr*1.5)
            print("Overtime Hours: ", hrs-40)
            print("Basepay: ", (hrs-40)*pr)
            print("Overtime Pay: ", (pr*1.5)*(hrs-40))
            print("Grosspay: ", (pr*1.5)*(hrs-40)+(pr*hrs))
    print("Employees Paid, Goodbye!")
name='1'
打印('我们向您的员工支付工资!')
而名字!='0':
name=input(“\n输入员工或输入“0”退出:”)
pr=浮动(输入(“输入工资率:”)
小时=浮动(输入(“输入工作小时:”)
如果第40小时:
打印('工作小时数:',小时数)
打印(“付款率:”,pr)
打印(“加班费:”,pr*1.5)
打印(“加班时间:”,小时-40)
打印(“基本工资:,(hrs-40)*pr)
打印(“加班工资:,(pr*1.5)*(hrs-40))
印刷(“格罗斯佩:,(公共关系*1.5)*(小时-40)+(公共关系*4小时))
打印(“员工已付,再见!”)

循环工作得很好,问题是当输入“0”时,循环不会立即结束。相反,当输入“0”时,在运行第一个“if”语句之前,它会继续请求hr(输入)和pr(输入),然后以“employees paid bye!”结束程序。

问题是,除了在执行循环体之前的一开始,while循环条件不会被评估。当
name
设置为“0”时,条件
name!=0
变为false,但while循环体的其余部分仍将执行一次

下面的代码通过在用户输入员工姓名后立即测试此条件,并在用户输入“0”时提前中断循环正文来纠正问题:

print('We pay your employees payroll!')
while True:
    name = input("\nEnter employee or Enter '0' to quit: ")

    if name == '0':
        break

    pr = float(input("Enter Payrate: "))
    hrs = float(input("Enter Hours Worked: "))
    if hrs <= 40:
        print("Hours Worked: ", hrs)
        print("Payrate: ", pr)
        print("Basepay:", hrs * pr)
    elif hrs > 40:
        print('Hours Worked: ', hrs)
        print("Payrate: ", pr)
        print("Overtime Rate: ", pr * 1.5)
        print("Overtime Hours: ", hrs - 40)
        print("Basepay: ", (hrs - 40) * pr)
        print("Overtime Pay: ", (pr * 1.5) * (hrs - 40))
        print("Grosspay: ", (pr * 1.5) * (hrs - 40) + (pr * hrs))
print("Employees Paid, Goodbye!")

对不起,我没有把问题弄清楚。我知道正确答案正在发布,但我已经纠正了我的错误

print('We pay your employees payroll!')    
while True:
    n = raw_input("\nEnter employee or Enter '0' to quit: ")
    if n.strip() == '0':
        break

    pr=float(input("Enter Payrate: "))
    hrs=float(input("Enter Hours Worked: "))

    if hrs <= 40:
        print("Hours Worked: ", hrs)
        print("Payrate: ", pr)
        print("Basepay:", hrs*pr)
    elif hrs > 40:
        print('Hours Worked: ', hrs)
        print("Payrate: ", pr)
        print("Overtime Rate: ", pr*1.5)
        print("Overtime Hours: ", hrs-40)
        print("Basepay: ", (hrs-40)*pr)
        print("Overtime Pay: ", (pr*1.5)*(hrs-40))
        print("Grosspay: ", (pr*1.5)*(hrs-40)+(pr*hrs))

print("Employees Paid, Goodbye!")

这并不能解决问题,但会导致循环立即终止。您的代码仍然有问题。你真的试过运行它吗<代码>我们向您的员工支付工资!0进程已完成,退出代码为0它应该要求“输入员工或输入“0”退出:@Angelica这是一个错误的解释。@Steven在输入“name”后,您需要检查
循环中断条件。
。您想得太多了,代码工作正常。我不知道存在断裂情况。
We pay your employees payroll!
Enter employee or Enter '0' to quit: 1 
Enter Payrate: 10.5 
Enter Hours Worked: 2 
('Hours Worked: ', 2.0) 
('Payrate: ', 10.5) 
('Basepay:',21.0)                                                      
Enter employee or Enter '0' to quit: 0 
Employees Paid, Goodbye!