Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Stuck - need help
#1
Hello, this is the assignment:
Write a program to prompt the user for hours and rate per hour using input to compute gross pay. Pay should be the normal rate for hours up to 40 and time-and-a-half for the hourly rate for all hours worked above 40 hours. Put the logic to do the computation of pay in a function called computepay() and use the function to do the computation. The function should return a value. Use 45 hours and a rate of 10.50 per hour to test the program (the pay should be 498.75). You should use input to read a string and float() to convert the string to a number. Do not worry about error checking the user input unless you want to - you can assume the user types numbers properly. Do not name your variable sum or use the sum() function.

This is my result (or what I tried):
hours = input("Enter Hours:")
regular_rate = input("Enter Rate:")
fhours = float(hours)
fregular_rate = float(regular_rate)

def computepay(hours):
    overtime_rate = 15.75
    fovertime_rate = float(overtime_rate)
    if hours < 40:
        pay = regular_rate * hours
    elif hours > 40:
        regular_pay = 40 * regular_rate
        overtime_pay = (hours - 40) * fovertime_rate
        pay = regular_pay + overtime_pay
    return pay
p = computepay(hours)    
print(p)
I don`t get a traceback because this is a leaning tool. But I get this Error message:
Output:
TypeError: unsupported operand type(s) for Sub: 'str' and 'int' (the line with overtime_pay = (hours - 40) * fovertime_rate)
What am I doing wrong??

Thank you!!
Reply
#2
hours is a string. Obviously, you can't use subtraction between a string and an int, so you need to convert that string to a numeric type (like you're doing for the others).
Reply
#3
now the next error:

TypeError: cannot concatenate 'str' and 'float' objects (on line pay = regular_pay + overtime_pay)
Reply
#4
It's basically the same error. You need to use fregular_rate for your math calculations, it's the variable associated with a number. Note that 'x' * 4 is valid code, but it returns 'xxxx'. So using regular_rate instead of fregular_rate on line 12 is making regular_pay a string.

This is the problem with having fregular_rate. You keep confusing it with regular_rate. You don't need the string, so just convert it and keep the same name.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#5
THANK YOU!

I did it!
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020