Загрузка данных
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()