2015-09-18 2 views
2
def Calc_Salary(x,y): 
    Pay = x*y 
    return Pay 
def Calc_with_bonus(c,d): 
    bonus = c+d 
    return bonus 
hours = raw_input('Number of hours') 
rate = raw_input('Rate per hour') 
if hours >= 40: 
    extras = ((float(hours)-40)*float(rate)*1.5) 
    regular = float(rate)*40 
    print Calc_with_bonus(extras,regular) 
elif hours < 40: 
    print Calc_Salary(hours,rate) 
raw_input() 

Пожалуйста, помогите, я много раз пересматривал программу, и все кажется правильным. Когда часы превышают 40, он будет рассчитывать бонус в течение часов более 40 и обычной ставки в течение часов до 40, добавлять их и давать правильный результат. Однако, если часов меньше 40, все, что нужно сделать, это позвонить и умножить hours*rate, что и делает, но, например, если вы вводите часы = 10 * rate = 10, а не 100, он вычисляет -50, пожалуйста, помогите :(Результаты неправильного умножения Python

+0

Что делает последний 'raw_input()' do? –

+0

'raw_input()' читает ваш ввод как строки, поэтому '' 10 '> = 40' возвращает 'True' и вы нажимаете первый блок оператора if. –

+0

Когда вы дважды щелкаете по программе, введите часы и скорость, он выполняет свою работу очень быстро и закрывается по завершении, что мешает пользователю видеть результат, так как он выполняется слишком быстро, поэтому raw_input() заставляет python оставаться открытым до тех пор, пока вы не нажмете «Enter» –

ответ

2

вопрос заключается в том, что hours и rate являются строка, если сравнить их с целочисленным 40, они всегда будут больше, так что даже если вы вводите hours в 10, вы в конечном итоге внутри if блока, и он пытается рассчитать зарплату если часы были больше 40. Пример строк, всегда превышающих int -

>>> '10' > 123123123 
True 

Вместо того, чтобы преобразовывать числа в float после сравнения, вы должны преобразовать их в float непосредственно при вводе. Пример -

hours = float(raw_input('Number of hours')) 
rate = float(raw_input('Rate per hour')) 

После этого вам не нужно конвертировать hours/rate в float в if блоке.

+0

Anand S Kumar спасибо большое, я потратил несколько часов, чтобы исправить это , вы отвечаете, и я смог исправить свою программу, так как вы можете сказать, что я новичок, поэтому большое спасибо за вашу помощь и быстрый ответ. Спасибо также @danielcorin за ваш вклад, он помог посмотреть в правильном направлении. –

+0

Рад, что я был бы вам полезен. Я хотел бы попросить вас принять ответ, нажав на отметку в левой части ответа, это было бы полезно для сообщества. –

+0

Done buddy :) может у меня знать, как закрыть вопрос, так как на него ответили? –

Смежные вопросы