2016-07-19 3 views
0

Я пишу калькулятор расчета заработной платы для школы на python 3. Вход пользователя начинается с запроса вашего имени или «0» для выхода из программы. всякий раз, когда я вхожу «0» в начале, программа закрывается, как следует, но если я ввещу ее после расчета, которую пользователи платят, она печатает (конец отчета и предыдущая информация о платежной ведомости). Я не могу понять, как заставить его прекратить печатать информацию о платежной ведомости после ее окончания. Это то, что у меня есть до сих пор.Калькулятор расчета заработной платы в python

Это код: One Stop Shop Payroll Calculator

user = str 
end = "0" 
hours = round(40,2) 
print("One Stop Shop Payroll Calculator") 
while user != end: 
    print() 
    user = input("Please enter your name or type '0' to quit: ") 
if user == end: 
    print("End of Report") 
else: 
    hours = (float(input("Please enter hours worked: ",))) 
    payrate =(float(input("Please enter your payrate: $",))) 
if hours < 40: 
    print("Employee's name: ", user) 
    print("Overtime hours: 0") 
    print("Overtime Pay: $0.00") 
    regularpay = round(hours * payrate, 2) 
    print("Gross Pay: $", regularpay) 
elif hours > 40: 
    overtimehours = round(hours - 40.00,2) 
    print("Overtime hours: ", overtimehours) 
    print("Employee's name: ", user) 
    regularpay = round(hours * payrate,2) 
    overtimerate = round(payrate * 1.5, 2) 
    overtimepay = round(overtimehours * overtimerate) 
    grosspay = round(regularpay+overtimepay,2) 
    print("Regular Pay: $", regularpay) 
    print("Overtime Pay: $",overtimepay) 
    print("Gross Pay: $", grosspay) 

Вот как это проявляется, когда вы запустите его:

One Stop Shop Payroll Calculator 

Please enter your name or type '0' to quit: Brandon 
Please enter hours worked: 50 
Please enter your payrate: $10 
Overtime hours: 10.0 
Employee's name: Brandon 
Regular Pay: $ 500.0 
Overtime Pay: $ 150 
Gross Pay: $ 650.0 

Please enter your name or type '0' to quit: Brandon 
Please enter hours worked: 30 
Please enter your payrate: $10 
Employee's name: Brandon 
Overtime hours: 0 
Overtime Pay: $0.00 
Gross Pay: $ 300.0 

Please enter your name or type '0' to quit: 0 
End of Report 
Employee's name: 0 
Overtime hours: 0 
Overtime Pay: $0.00 
Gross Pay: $ 300.0 

Process finished with exit code 0 

code

code being executed

+0

Остановить сравнение строк с '=='. – csmckelvey

ответ

0

Поэтому я думаю, что у меня это есть. Я скопировал большую часть вашего кода, и все работает хорошо. Позвольте мне объяснить мои изменения, поэтому, если это поможет вам понять, почему это работает.

Во-первых, я изменил метод определения, когда заканчивается. Поэтому, вместо того, чтобы быть: end = "0", я установил его: end = False, тогда цикл while запускается, пока «end == False».

Тогда я слегка изменил первую строку в то время цикла, так он говорит: если пользователь == «0»:

Это проверяет входной «пользователь», и если ее = 0, то он запускает следующую строку ,

Затем я оставил печать, но добавил перерыв. Это ключ здесь. Без разрыва он просто продолжает цикл после «конечного отчета». Но с разрывом на месте он выходит из цикла после печати «окончательного отчета».

Я также должен был изменить строку: «если часы> 40» до «если часы < = 40» в противном случае, набрав в 40 не будет работать

Так что теперь код выглядит следующим образом:

user = str 
end = False 
hours = round(40,2) 
print("One Stop Shop Payroll Calculator") 
while end == False: 
    user = input("\nPlease enter your name or type '0' to quit: ") 
    if user == "0": 
    print("End of Report") 
    break 
    else: 
    hours = (float(input("Please enter hours worked: ",))) 
    payrate =(float(input("Please enter your payrate: $",))) 
    if hours <= 40: 
    print("Employee's name: ", user) 
    print("Overtime hours: 0") 
    print("Overtime Pay: $0.00") 
    regularpay = round(hours * payrate, 2) 
    print("Gross Pay: $", regularpay) 
    elif hours > 40: 
    overtimehours = round(hours - 40.00,2) 
    print("Overtime hours: ", overtimehours) 
    print("Employee's name: ", user) 
    regularpay = round(hours * payrate,2) 
    overtimerate = round(payrate * 1.5, 2) 
    overtimepay = round(overtimehours * overtimerate) 
    grosspay = round(regularpay+overtimepay,2) 
    print("Regular Pay: $", regularpay) 
    print("Overtime Pay: $",overtimepay) 
    print("Gross Pay: $", grosspay) 

Боже, я хотел бы скопировать код с отступом. Удастся ли мне редактировать этот ха-ха

+0

Неплохой путь. Вы также можете избавиться от 'end' и просто использовать' while True: ', поскольку вы явно выходите из цикла с' break'. Кроме того, вы можете избавиться от 'else:' в цикле по той же причине: ничто в цикле после 'break' не произойдет, если' break'. – cxw

+0

О да, хорошая точка @cxw не использовала python, пока я немного неоптимизирован haha – NicheQuiche

0

Я тоже сделал это. Вот мой в Python 3x.

print("Welcome to PayCalc!\n") 
wage = float(input("How much do you make per hour?\n")) 
hours = float(input("How many hours for the week?\n")) 
def as_currency(amount): 
    if amount >= 0: 
     return '${:,.2f}'.format(amount) 
    else: 
     return '-${:,.2f}'.format(-amount) 
if hours <= 40: 
    weekincome = wage*hours 
    monthincome = weekincome*4 
    print("It has been calculated that if you work {} hours at a rate of {}, you should make a total of {}/week ({}/month)".format(int(round(hours)),as_currency(wage),as_currency(weekincome),as_currency(monthincome))) 
else: 
    regularpay = wage*40 
    overtimehours = hours - 40 
    overtimerate = wage*1.5 
    overtimeincome = (overtimehours * overtimerate) 
    print("Regular pay: {}/wk + your overtime rate of {}/hr".format(as_currency(regularpay),as_currency(overtimerate))) 
    print("Hours of overtime: {}".format(int(round(overtimehours)))) 
    print("Total overtime income: {}".format(as_currency(overtimeincome))) 
    weekincome = (40*wage) + overtimeincome 
    #if worked overtime every week 
    monthincome = weekincome*4 
    overtimeonce = weekincome + (regularpay*3) 
    print("It has been calculated that you should make a total of {}/week with overtime ({}/month) if worked {} hours every week.\nIf worked {} hours during one week and 40 hours/wk every other week, you'd make {} for the month".format(as_currency(weekincome),as_currency(monthincome),int(round(hours)),int(round(hours)),as_currency(overtimeonce))) 

И выведет, например

Welcome to PayCalc! 

How much do you make per hour? 
19.12 
How many hours for the week? 
40 
It has been calculated that if you work 40 hours at a rate of $19.12, you should make a total of $764.80/week ($3,059.20/month) 

, если под 40 часов ^^^, или,

Welcome to PayCalc! 

How much do you make per hour? 
19.12 
How many hours for the week? 
60 
Regular pay: $764.80/wk + your overtime rate of $28.68/hr 
Hours of overtime: 20 
Total overtime income: $573.60 
It has been calculated that you should make a total of $1,338.40/week with overtime ($5,353.60/month) if worked 60 hours every week. 
If worked 60 hours during one week and 40 hours/wk every other week, you'd make $3,632.80 for the month 

, если более 40 часов.