Как сократить данную функцию?
Делаю мини-игру. В данную функцию передается уровень и капитал корпорации в которой состоит игрок, и его ранг. Функция считает прирост к зарплате игрока в зависимости от капитала и ранга. Можно ли как-то сократить эту функцию и по другому написать код?
def count_salary(level: int, capital: int, rang: int):
bonus = 0
extra_money = 0
if level == 1:
if rang == 1:
bonus += float(0.00010)
elif rang == 2:
bonus += float(0.00015)
elif rang == 3:
bonus += float(0.00020)
elif rang == 4:
bonus += float(0.00030)
elif rang == 5:
bonus += float(0.00050)
extra_money += int(float(capital) * float(bonus))
elif level == 2:
if rang == 1:
bonus += float(0.00040)
elif rang == 2:
bonus += float(0.00045)
elif rang == 3:
bonus += float(0.00050)
elif rang == 4:
bonus += float(0.00060)
elif rang == 5:
bonus += float(0.00080)
extra_money += int(float(capital) * float(bonus))
elif level == 3:
if rang == 1:
bonus += float(0.00085)
elif rang == 2:
bonus += float(0.0012)
elif rang == 3:
bonus += float(0.0021)
elif rang == 4:
bonus += float(0.0035)
elif rang == 5:
bonus += float(0.0050)
extra_money += int(float(capital) * float(bonus))
return extra_money
Ответы (1 шт):
Ну если брать общий случай, то вам надо составить таблицу и ходить по ней - по сути это тот же код, только более наглядный :)
например это можно сделать в виде словаря:
data = {
1: {
1: 0.00010,
2: 0.00015,
3: 0.00020,
4: 0.00030,
5: 0.00050,
},
2: {
1: 0.00040,
2: 0.00045,
3: 0.00050,
4: 0.00060,
5: 0.00080,
}
}
и надо будет просто пройти по словарю до нужной характеристики, и потом уже сделать
extra_money += int(capital * bonus)
Менее универсально можно обойтись списками, где индексу соответствует ключ из словаря выше:
data = [
[0.00010, 0.00015, 0.00020, 0.00030, 0.00050,]
[0.00040, 0.00045, 0.00050, 0.00060, 0.00080,]
]
правда тут надо учесть, что индексы начинаются с 0 (сделать поправку)
Касательно же вашего кода
излишне переводить типы в данном случае - вы и так используете число с плавающей запятой
bonus += float(0.00085)можно просто так:
bonus += 0.00085аналогично с вычислениями
вместо
extra_money += int(float(capital) * float(bonus))используйте просто
extra_money += int(capital * bonus)