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


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

    rate = 15
    if 100001 <= amount <= 500000:
        rate -= 1
    elif 500001 <= amount <= 1000000:
        rate -= 2

    if 3 < years <= 5:
        rate += 1
    elif 5 < years <= 10:
        rate += 2
        
    return rate

def run_task_1():
    print("ЗАДАНИЕ 1: КРЕДИТНЫЙ КАЛЬКУЛЯТОР")
    print("Классы эквивалентности (Сумма): [0-9999], [10000-100000], [100001-500000], [500001-1000000], [>1000000]")
    print("Классы эквивалентности (Срок): [0-3], [3.1-5], [5.1-10], [>10]")
    print("Конкретные данные для тестов: 9999, 10000, 100001, 500000, 500001, 1000000, 1000001 руб; 3, 4, 5, 6, 10, 11 лет")
    print("-" * 30)
    
    test_cases = [
        (9999, 2, "Отказ"),
        (10000, 3, 15),
        (100001, 3, 14),
        (500000, 5, 15),
        (500001, 5, 14),
        (1000000, 10, 15),
        (1000001, 5, "Индивидуально (Сумма)"),
        (50000, 11, "Индивидуально (Срок)")
    ]
    
    for am, yr, exp in test_cases:
        res = calculate_credit(am, yr)
        print(f"Вход: {am} руб, {yr} лет | Ожидалось: {exp} | Итог: {res} | {'OK' if res == exp else 'FAIL'}")

if __name__ == "__main__":
    run_task_1()





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

def run_task_2():
    print("ЗАДАНИЕ 2: ТАРИФ СОТОВОГО ОПЕРАТОРА (АПРЕЛЬ, 30 ДНЕЙ)")
    print("Ежесуточное списание: 10 руб.")
    print("Классы эквивалентности: Баланс < 0 (Блок), 0 <= Баланс <= 20 (2-е пред.), 20 < Баланс <= 50 (1-е пред.), Баланс > 50 (ОК)")
    print("Конкретные данные для тестов: -1, 0, 10, 20, 21, 50, 51")
    print("-" * 30)
    
    test_cases = [
        (-1, "Приостановка обслуживания"),
        (0, "Второе предупреждение"),
        (15, "Второе предупреждение"),
        (20, "Второе предупреждение"),
        (21, "Первое предупреждение"),
        (50, "Первое предупреждение"),
        (51, "Активен")
    ]
    
    for bal, exp in test_cases:
        res = get_billing_status(bal, 30)
        print(f"Баланс: {bal} | Ожидалось: {exp} | Итог: {res} | {'OK' if res == exp else 'FAIL'}")

if __name__ == "__main__":
    run_task_2()








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

    if age <= 22:
        k_ae = 1.8 if exp <= 3 else 1.6
    else:
        k_ae = 1.7 if exp <= 3 else 1.0
        
    return round(base * k_p * k_ae, 2)

def run_task_3():
    print("ЗАДАНИЕ 3: ОСАГО")
    print("Классы Мощность: [<=50], [51-70], [71-100], [101-120], [121-150], [>150]")
    print("Классы Возраст/Стаж: [<=22/<=3], [<=22/>3], [>22/<=3], [>22/>3]")
    print("Конкретные данные для тестов (границы): (50лс, 22г, 3г), (70лс, 21г, 4г), (100лс, 25г, 2г), (151лс, 30г, 10г)")
    print("-" * 30)
    
    test_cases = [
        (50, 22, 3, round(1980 * 0.6 * 1.8, 2)),
        (70, 21, 5, round(1980 * 1.0 * 1.6, 2)),
        (100, 25, 2, round(1980 * 1.1 * 1.7, 2)),
        (151, 30, 10, round(1980 * 1.6 * 1.0, 2))
    ]
    
    for p, a, e, expected in test_cases:
        res = calculate_osago(p, a, e)
        print(f"Мощность: {p}, Возраст: {a}, Стаж: {e} | Ожидалось: {expected} | Итог: {res} | {'OK' if res == expected else 'FAIL'}")

if __name__ == "__main__":
    run_task_3()