Reputation: 203
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
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
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