Без проверок код был бы намного меньше, но сделал с проверками на всякий случай. Если нужно проще - пишите. По сути достаточно функции calculate_cost. И я ещё другую функцию сделал calculate_cost_old, она не используется, но в ней дифференцированный подход вычислений используется, то есть до нижней границы вычисляется по ставке 1,1, дальше вычисляется по тарифу, а больше верхней границы по тарифу 0,9. Мне кажется, так логичнее:
def calculate_cost(N:int,A:int,B:int,T:float):
s = 0
if N <= A: s = 1.1*N
elif A < N <= B: s = N
else: s = 0.9*N
return round(T*s,2)
def calculate_cost_old(N:int,A:int,B:int,T:float):
"""Данная функция вычисляет стоимость услуг и возвращает значение"""
s1 = 0
s2 = 0
s3 = 0
# вычислим стоимость до нижней границы включительно
if N <= A: s1 = 1.1*N
else: s1 = 1.1*A
# вычислим стоимость между нижней (исключительно) и верхней (включительно) границами
if A < N <= B: s2 = N-A
elif N > B: s2 = B-A
# вычислим стоимость от верхней границы (исключительно)
if N > B: s3 = 0.9*(N-B)
return round(T*(s1+s2+s3),2)
def calculator():
"""основная функция"""
names = ['Количество минут', 'Нижняя граница тарифа', 'Верхняя граница тарифа', 'Стоимость тарифа']
while True:
chk = True
a = list(map(str, input('Начните ввод: ').split()))
if len(a) != 4:
print('Ошибка ввода: введите четыре параметра через пробел')
continue
for i in range(len(a)):
if i != 3:
try:
a[i] = int(a[i])
if a[i] < 0: raise ValueError
if i == 2 and a[i-1] > a[i]: raise ValueError
except ValueError:
print(f'Ошибка ввода: значение "{names[i]}" ({i+1}-й параметр) должно быть целым не отрицательным числом', '> нижней границы' if i == 2 else '')
chk = False
else:
try:
a[i] = float(a[i])
if a[i] <= 0: raise ValueError
except ValueError:
print(f'Ошибка ввода: значение "{names[i]}" ({i+1}-й параметр) должно быть целым положительным числом')
chk = False
if chk: break
print()
print('--- Рассчёт окончен ---')
print('Стоимость учлуг составляет: {:.2f}'.format(calculate_cost(a[0],a[1],a[2],a[3])))
print()
print('--- Рассчёт стоимости услуг связи ---')
print()
print('Введите через пробел: \n - количество потраченных за месяц минут (целое число >= 0)\n - нижнюю границу тарифа (целое число >= 0)\n - верхнюю границу тарифа (целое число >= нижней границы)\n - стоимость (вещественное число > 0)')
print()
while True:
calculator()
if input('Повторить вычисления? (y/n): ') == 'n': break
please please please please please please please please please please please please please please please please please please please please please please please please please please please please please please pleaseplease please please please please please please please please please please please please please please please please please please please please please please please please please please please please pleaseplease please please please please please please please please please please please please please please please please please please please please please please please please please please please please pleaseplease please please please please please please please please please please please please please please please please please please please please please please please please please please please please pleaseplease please please please please please please please please please please please please please please please please please please please please please please please please please please please please pleaseplease please please please please please please please please please please please please please please please please please please please please please please please please please please please please pleaseplease please please please please please please please please please please please please please please please please please please please please please please please please please please please please pleaseplease please please please please please please please please please please please please please please please please please please please please please please please please please please please please please
N1 = 58
i1 = 6
i2 = 6 / 2 = 3
N2 = 8
ответ: 8