Как сократить данную функцию?

Делаю мини-игру. В данную функцию передается уровень и капитал корпорации в которой состоит игрок, и его ранг. Функция считает прирост к зарплате игрока в зависимости от капитала и ранга. Можно ли как-то сократить эту функцию и по другому написать код?

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 шт):

Автор решения: Zhihar

Ну если брать общий случай, то вам надо составить таблицу и ходить по ней - по сути это тот же код, только более наглядный :)

например это можно сделать в виде словаря:

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 (сделать поправку)

Касательно же вашего кода

  1. излишне переводить типы в данном случае - вы и так используете число с плавающей запятой

    bonus += float(0.00085)
    

    можно просто так:

    bonus += 0.00085
    
  2. аналогично с вычислениями

    вместо

    extra_money += int(float(capital) * float(bonus))
    

    используйте просто

    extra_money += int(capital * bonus)
    
→ Ссылка