В чем проблема в этой короткой пользовательской функции? - PullRequest
0 голосов
/ 19 октября 2019

В нем говорится, что «зарплата» не определена или что я не могу умножить это. Я хочу иметь это с командой def, поэтому, пожалуйста, просто дайте ей в этой форме просто исправить ошибки, я совершенно новичок в этом, так что пусть это так просто, как есть. Большое спасибо:)

def computepay(Hours,RatePerHour):
    if float(Hours)-40<0:
        salary=float(Hours)*float(RatePerHour)
    else:
        salary=40.0*float(RatePerHour)+(float(Hours)-40.0)*float(RatePerHour*1.5)

Hours=input("Hours:\n")
RatePerHour=input("RatePerHour:\n")
computepay(Hours,RatePerHour)
print("Salary:")
print(salary)

Я ожидаю, что кто-то может помочь мне, как эта маленькая программа работает правильно

Ответы [ 3 ]

2 голосов
/ 19 октября 2019

Вам нужно return salary и затем присвоить это переменной. Вот улучшенная версия вашего кода:

def compute_pay(hours: float, rate_per_hour: float) -> float:
    if hours - 40 < 0:
        salary = hours * rate_per_hour
    else:
        salary = 40 * rate_per_hour + (hours - 40.0)* rate_per_hour * 1.5
    return salary  # This is the line you are missing!

hours = input("Hours:\n")
rate_per_hour=input("RatePerHour:\n")
computer_salary = computepay(float(hours), float(rate_per_hour))  # You also need to assign the output of a function to a variable, I've given it a different name from salary just to show you that this is a different variable from the one inside your function. Also, cast to float here so you don't have to do it all over your function. 
print(f"Salary: {computer_salary}")

Концепция, которую вы должны изучить здесь, называется scope .

0 голосов
/ 19 октября 2019

Вот исправление, и некоторые объяснения следуют.

def computepay(Hours,RatePerHour): 
    salary = 0
    if float(Hours)-40<0:    
        salary=float(Hours)*float(RatePerHour) 
    else: 
        salary=40.0*float(RatePerHour)+(float(Hours)-40.0)*float(RatePerHour) *1.5) #<=== here you multiply with out turning rateperhour as float
    return salary 

Hours=input("Hours:\n") RatePerHour=input("RatePerHour:\n") 
salary = computepay(Hours,RatePerHour) 
print("Salary:") 
print(salary)

Во-первых, зарплата - это переменная, заключенная внутри вашей функции, она не доступна за ее пределами.

Во-вторых, выполучить ошибку, потому что вы умножаете строку на целое число. Преобразовать его в плавающее раньше.

float(RatePerHour*1.5) #wrong
float(RatePerHour) *1.5 # correct
0 голосов
/ 19 октября 2019

Вам нужно было вернуть рассчитанную зарплату.

Кроме того, проще выполнить преобразование с плавающей запятой на входе.

def computepay(Hours,RatePerHour):
    if float(Hours)-40<0:
        salary=Hours*RatePerHour
    else:
        salary=40.0*RatePerHour+ (Hours-40.0)*(RatePerHour*1.5)
    return salary  # return value

Hours = float(input("Hours:\n"))  # float conversion
RatePerHour = float(input("RatePerHour:\n"))  # float conversion
salary = computepay(Hours,RatePerHour)
print("Salary:")
print(salary)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...