Загрузка данных


def calculate_credit(amount, years):
    if amount < 10000:
        return "Сумма слишком мала"
    
    if amount > 1000000:
        return "Индивидуальная ставка (Сумма)"
    
    if years > 10:
        return "Индивидуальная ставка (Срок)"

    base_rate = 15

    if 10000 <= amount <= 100000:
        amount_mod = 0
    elif 100001 <= amount <= 500000:
        amount_mod = -1
    elif 500001 <= amount <= 1000000:
        amount_mod = -2
    else:
        amount_mod = 0

    if years <= 3:
        term_mod = 0
    elif 3 < years <= 5:
        term_mod = 1
    elif 5 < years <= 10:
        term_mod = 2
    else:
        term_mod = 0

    return base_rate + amount_mod + term_mod

def run_tests():
    tests = [
        {"amount": 5000, "years": 2, "expected": "Сумма слишком мала"},
        {"amount": 50000, "years": 2, "expected": 15},
        {"amount": 100000, "years": 3, "expected": 15},
        {"amount": 100001, "years": 3, "expected": 14},
        {"amount": 250000, "years": 4, "expected": 15},
        {"amount": 500000, "years": 5, "expected": 15},
        {"amount": 500001, "years": 5, "expected": 14},
        {"amount": 750000, "years": 7, "expected": 15},
        {"amount": 1000000, "years": 10, "expected": 15},
        {"amount": 1000001, "years": 5, "expected": "Индивидуальная ставка (Сумма)"},
        {"amount": 50000, "years": 12, "expected": "Индивидуальная ставка (Срок)"}
    ]

    print("--- ТЕСТЫ: КРЕДИТНЫЙ КАЛЬКУЛЯТОР ---")
    for i, t in enumerate(tests):
        res = calculate_credit(t["amount"], t["years"])
        status = "OK" if res == t["expected"] else "FAIL"
        print(f"Тест {i+1}: Amount={t['amount']}, Years={t['years']} | Ожидалось: {t['expected']} | Итог: {res} | [{status}]")
    print("\n")

if __name__ == "__main__":
    run_tests()




def get_billing_status(balance, days_in_month):
    daily_fee = 300 / days_in_month
    
    if balance < 0:
        return "Приостановка обслуживания"
    
    days_left = balance / daily_fee
    
    if days_left <= 2:
        return "Второе предупреждение"
    elif days_left <= 5:
        return "Первое предупреждение"
    else:
        return "Активен"

def run_tests():
    months = {
        "Апрель (30 дней)": 30,
        "Февраль (28 дней)": 28
    }

    print("--- ТЕСТЫ: ТАРИФНЫЙ ПЛАН ---")
    for m_name, days in months.items():
        daily = 300 / days
        print(f"Проверка для месяца: {m_name} (Ежесуточно: {round(daily, 2)} руб.)")
        
        tests = [
            {"bal": -1, "exp": "Приостановка обслуживания"},
            {"bal": daily * 1, "exp": "Второе предупреждение"},
            {"bal": daily * 2, "exp": "Второе предупреждение"},
            {"bal": daily * 3, "exp": "Первое предупреждение"},
            {"bal": daily * 5, "exp": "Первое предупреждение"},
            {"bal": daily * 6, "exp": "Активен"}
        ]
        
        for i, t in enumerate(tests):
            res = get_billing_status(t["bal"], days)
            status = "OK" if res == t["exp"] else "FAIL"
            print(f"  Баланс: {round(t['bal'], 2)} | Ожидалось: {t['exp']} | Итог: {res} | [{status}]")
    print("\n")

if __name__ == "__main__":
    run_tests()




def calculate_osago(power, age, experience):
    base = 1980
    
    if power <= 50:
        k_p = 0.6
    elif 51 <= power <= 70:
        k_p = 1.0
    elif 71 <= power <= 100:
        k_p = 1.1
    elif 101 <= power <= 120:
        k_p = 1.2
    elif 121 <= power <= 150:
        k_p = 1.4
    else:
        k_p = 1.6

    if age <= 22 and experience <= 3:
        k_ae = 1.8
    elif age <= 22 and experience > 3:
        k_ae = 1.6
    elif age > 22 and experience <= 3:
        k_ae = 1.7
    else:
        k_ae = 1.0

    return round(base * k_p * k_ae, 2)

def run_tests():
    tests = [
        {"p": 40, "a": 20, "e": 2, "exp": 1980 * 0.6 * 1.8},
        {"p": 60, "a": 20, "e": 5, "exp": 1980 * 1.0 * 1.6},
        {"p": 85, "a": 30, "e": 1, "exp": 1980 * 1.1 * 1.7},
        {"p": 110, "a": 30, "e": 10, "exp": 1980 * 1.2 * 1.0},
        {"p": 135, "a": 22, "e": 3, "exp": 1980 * 1.4 * 1.8},
        {"p": 160, "a": 25, "e": 5, "exp": 1980 * 1.6 * 1.0}
    ]

    print("--- ТЕСТЫ: ОСАГО ---")
    for i, t in enumerate(tests):
        res = calculate_osago(t["p"], t["a"], t["e"])
        expected = round(t["exp"], 2)
        status = "OK" if res == expected else "FAIL"
        print(f"Тест {i+1}: Мощность={t['p']}, Возраст={t['a']}, Стаж={t['e']} | Ожидалось: {expected} | Итог: {res} | [{status}]")

if __name__ == "__main__":
    run_tests()