Dustin Burns
Dustin Burns

Reputation: 203

Program doesn't run, just restarts

I just wrote a program to calculate employee's pay rates. To me, the program looks just fine, but when I try to run it I get a restart, and it doesn't run. I've tried restarting the Python GUI, but no luck. Here is the program:

def get_info():
    hours = int(input("How many hours did you work this week?", ))
    while hours < 8 or hours > 86:
        print('Error ---- you must work at least 8 hours and no more than 86 hours')
        hours = int(input('Please enter your hours worked again:', ))
    print()
    rate = float(input("Please enter your pay rate: $", ))
    while rate < 7.00 or rate > 50.00:
        print("Error ---- pay rate cannot be less than $7.00 or greater than $50.00")
        rate = float(input("Please re-enter your pay rate: $", ))

    return hours, rate

def calc_hours(num):
    if num < 40:
        reg_hours = num
        overtime = 0
    else:
        reg_hours = 40
        overtime = num - 40

    return reg_hours, overtime

def calc_pay(num1, num2, pay_rate):
    regular_pay = num1 * pay_rate
    overtime_pay = num2 * (pay_rate * 1.5)
    total_pay = regular_pay + overtime_pay

    return regular_pay, overtime_pay, total_pay

def main():
    get_info()
    calc_hours(hours)
    cal_pay(reg_hours, overtime, rate)

    print ()
    print ("                     Payroll Information")
    print ()
    print ("Pay Rate", format(rate, '14.2f'))
    print ("Regular Hours", format(reg_hours, '10.2f'))
    print ("Overtime Hours", format(overtime, '10.2f'))
    print ("Regular Pay", format(regular_pay, '10.2f'))
    print ("Overtime Pay", format(overtime_pay, '10.2f'))
    print ("Total Pay", format(total_pay, '10.2f'))

Yes, the chart is gonna be wonky. I haven't been able to run it successfully so that it'll come out smoothly.

Upvotes: 0

Views: 329

Answers (1)

George
George

Reputation: 4674

hours, rate = get_info()
reg_hours, overtime = calc_hours(hours)
regular_pay, overtime_pay, total_pay = calc_pay(reg_hours, overtime, rate)

print ()
print ("                     Payroll Information")
print ()
print ("Pay Rate", format(rate, '14.2f'))
print ("Regular Hours", format(reg_hours, '10.2f'))
print ("Overtime Hours", format(overtime, '10.2f'))
print ("Regular Pay", format(regular_pay, '10.2f'))
print ("Overtime Pay", format(overtime_pay, '10.2f'))
print ("Total Pay", format(total_pay, '10.2f'))

First, take a look at your main():. You called your get_info() function, when the function finish, it return hours, rate, but you did not do store the result. (which is your hours, rate) again, and so do the next two lines. When you call your methods, it return the answers, you have to store them to a variable.

These are the 3 lines of changes

hours, rate = get_info()
reg_hours, overtime = calc_hours(hours)
regular_pay, overtime_pay, total_pay = calc_pay(reg_hours, overtime, rate)

Lastly, there is a typo calc_pay instead of cal_pay of what you write. So fixing that will make your program work, here is the output.

Output

How many hours did you work this week?8

Please enter your pay rate: $20

                     Payroll Information

Pay Rate          20.00
Regular Hours       8.00
Overtime Hours       0.00
Regular Pay     160.00
Overtime Pay       0.00
Total Pay     160.00

And let me explain to you what these assignment statement did. The form is like this: variable = expression

  1. The expression on the RHS is being evaluated (The value is a memory address)
  2. Storing the memory address in the variable on the LHS

A link you might found helpful to read: Defining Functions

In case you want to fix your chat, here is how to do it.

pattern = '{0:15s}    {1:4.2f}'
print(pattern.format('Pay Rate', rate))
print(pattern.format('Regular Hours', reg_hours))
print(pattern.format('Overtime Hours', overtime))
print(pattern.format('Regular Pay', regular_pay))
print(pattern.format('Overtime Pay', overtime_pay))
print(pattern.format('Total Pay', total_pay))

Output:

Pay Rate           20.00
Regular Hours      20.00
Overtime Hours     0.00
Regular Pay        400.00
Overtime Pay       0.00
Total Pay          400.00

Explanation:

pattern = '{0:15s}    {1:4.2f}'
# 0 mean the blank should be filled with the first argument, 
# the colon(:) specifies the formatting of the string / number.
# s means to format a string, 15s means the string will be padded with spaces
# so it will take up exactly 15 spaces, without the number, s just mean
# use the string without any space padding
# d means format an integer, 4d mean the integer will be padded with space
# so it takes up exactly 4 spaces. f means float, and .2 mean 2 decimal point.

Upvotes: 1

Related Questions