
Телефонна компанія «Phone» для заохочення абонентів ввела наступні правила щодо оплати послуг
зв’язку: за розмови до A хвилин за місяць необхідно сплачувати за підвищеним тарифом T грн/хв, який є більшим за встановлений тариф на 10 відсотків. Якщо абонент розмовляв за місяць менше ніж В хвилин (B > A), то він сплачує послугу за встановленим тарифом. Абоненти, які витратили на розмови більше ніж B хвилин, за хвилини, що перевищили В, сплачують за пільговим тарифом, який на 10 відсотків менший за встановлений. Необхідно написати програму, яка обчислює платню за користування телефоном абонента компанії «Phone» для розмов обсягом N хвилин за місяць. Input format Програма отримує на вхід три цілих числа N, A, B (N ≥ 0, A ≥ 0) та одне дійсне число T, (T > 0), які записані в один рядок. Розділювачем слугує пробіл. Output format Програма має вивести значення платні в гривнях за користування телефоном абонента компанії «Phone» як дійсне число з точністю до двох десяткових знаків. Examples Input 1 5 10 15 Output 15.00 Input 6 3 9 10 Output 54.55 Input 9 2 5 3 Output 23.45

Ответы на вопрос

Без проверок код был бы намного меньше, но сделал с проверками на всякий случай. Если нужно проще - пишите. По сути достаточно функции 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



Вам потрібно написати програму, яка обчислить платню за користування телефоном для абонента компанії "Phone" з урахуванням заданих умов. Ось Python-програма для вирішення цієї задачі:
python# Зчитуємо вхідні дані
N, A, B, T = map(float, input().split())
# Обчислюємо вартість розмов до A хвилин
if N <= A:
cost = N * T
else:
cost = A * T
# Обчислюємо вартість розмов від A до B хвилин
if N > A and N <= B:
cost += (N - A) * T
elif N > B:
# Вартість розмов понад B хвилин за пільговим тарифом (зі знижкою)
cost += (B - A) * T + (N - B) * (T * 0.9)
# Виводимо результат з точністю до двох десяткових знаків
print(f'{cost:.2f}')
Ця програма спочатку зчитує вхідні дані - кількість хвилин розмови (N), поріг A, поріг B та вартість однієї хвилини розмови (T). Потім обчислює вартість розмови відповідно до ваших вказівок і виводить результат з точністю до двох десяткових знаків.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili