简体   繁体   中英

Can't seem to figure out how to write a Loop in Python

I have to calculate gross pay for an employee and display the results. Your program will accept the employee's name, hours worked, and the employee's pay rate. The program will need to calculate overtime as well. Overtime is defined as anything over 40 hours is paid at 1.5 times the regular pay. The program should print the employee's name, the gross pay amount, and only if there was overtime, print the overtime pay amount as well. Finally, the program should repeat as necessary until the user enters a sentinel value.

print("Payroll Calculator")
EmployeesName = input("Please enter employees Name or 0 to quit:")
WeeklyHours = int(input("Please Enter Hours Worked:"))
PayRate = int(input("Please Enter Pay Rate:"))
print("Normal Pay Rate is:", 40 * PayRate)
if(WeeklyHours > 40):
    Overtime = PayRate * 1.5
    if(WeeklyHours > 40):
     print("Your Overtime Hours are:", WeeklyHours - 40)
     print("Your Overtime Rate is:", Overtime * 1.5)
    GrossPay = WeeklyHours * Overtime

print("Your Gross Pay is:", WeeklyHours * Overtime)

That is what I have and there is no loop in the program. I can't seem to get this thing figured out and I am going crazy over here. I just want someone to help break it down for me. Thanks!

What you can do is put all the code you want to repeat several times in a loop. It can look like:

    while True:
        # code you want to repeat
        if some_condition:
            break

or:

    flag = False
    while not flag:
        # code you want to repeat
        if some_condition:
            flag = True

You can use a for loop like this:

print("Payroll Calculator")

count = 2
for i in range(count):
    EmployeesName = input("Please enter employees Name :")
    WeeklyHours = int(input("Please Enter Hours Worked:"))
    PayRate = int(input("Please Enter Pay Rate:"))
    print("Normal Pay Rate is:", 40 * PayRate)
    if(WeeklyHours > 40):
        Overtime = PayRate * 1.5
        if(WeeklyHours > 40):
            print("Your Overtime Hours are:", WeeklyHours - 40)
            print("Your Overtime Rate is:", Overtime * 1.5)
    print("Your Gross Pay is:", WeeklyHours * Overtime)

    finish = input('Would you like to continue? (y/n) :')
    if finish == 'n':
        count = 0
    elif finish == 'y':
        count += 1

Plus, your variable GrossPay isn't being used.

Instead of using while True, I would set the "sentinel variable" first to a non-breaking value. To make the teacher happy. Given eg the sentinel variable would be to write "0" as the EmployeeName, you would do

print("Payroll Calculator")
EmployeesName = None
while EmployeesName != '0': # 0 in python2
   EmployeesName = input("Please enter employees Name or 0 to quit:")
   If EmployeesName != '0':
       WeeklyHours = int(input("Please Enter Hours Worked:"))
       PayRate = int(input("Please Enter Pay Rate:"))
       print("Normal Pay Rate is:", 40 * PayRate)
       if(WeeklyHours > 40):
           Overtime = PayRate * 1.5
           if(WeeklyHours > 40):
               print("Your Overtime Hours are:", WeeklyHours - 40)
               print("Your Overtime Rate is:", Overtime * 1.5)
           GrossPay = WeeklyHours * Overtime
           print("Your Gross Pay is:", WeeklyHours * Overtime)

but you could also define some custom variable to handle this:

stop = False
while not stop:
   ...
   # check now if if we should stop
   if (EmployeesName == '0'):
       stop = True

You can always do the while True: break approach, but I would not recommend it, as the task asks for a variable in the while condition, and imho while True loops should be avoided until you really understand loops thoroughly.

while True:
   ...
   # check now if if we should stop
   if (EmployeesName == '0'):
       break # exits loop.

It makes sence in this example.

note: Python2 will return an integer for input(), Python3 a string. edited the example to be python3.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM