Без проверок код был бы намного меньше, но сделал с проверками на всякий случай. Если нужно проще - пишите. По сути достаточно функции calculate_cost. И я ещё другую функцию сделал calculate_cost_old, она не используется, но в ней дифференцированный подход вычислений используется, то есть до нижней границы вычисляется по ставке 1,1, дальше вычисляется по тарифу, а больше верхней границы по тарифу 0,9. Мне кажется, так логичнее:
print('Введите через пробел: \n - количество потраченных за месяц минут (целое число >= 0)\n - нижнюю границу тарифа (целое число >= 0)\n - верхнюю границу тарифа (целое число >= нижней границы)\n - стоимость (вещественное число > 0)')
print()
while True:
calculator()
if input('Повторить вычисления? (y/n): ') == 'n': break
Приведенная программа принимает целые числа и выводит два значения: a - количество цифр в числе и b - произведение цифр, составляющих число. При вводе нуля программа завершает работу. Ввод отрицательных чисел игнорируется. 1) При исполнении этой программы на экран было сначала выведено число 2, затем число 15. НАИМЕНЬШЕЕ значение переменной x, для которого это возможно, равно С) 35 Здесь количество цифр равно двум, а их произведение равно 15. Число 15 представимо в виде произведения двух однозначных чисел только в виде 3х5 или 5х3. Следовательно, наименьшим числом могло быть только 35. 2) При исполнении этой программы на экран было сначала выведено число 2, затем число 15. НАИБОЛЬШЕЕ значение переменной x, для которого это возможно, равно B) 53 Решение аналогично предыдущему, но выбирается наибольшее число, т.е. 53. 3) НАИМЕНЬШЕЕ значение переменной b, которое может быть выведено на экран этой программой, равно Е) 0 Минимальное значение произведения n однозначных чисел будет равно нулю, если среди этих чисел встретить хотя бы один ноль. 4) При исполнении этой программы на экран было сначала выведено число 2. НАИБОЛЬШЕЕ значение переменной b, которое может быть выведено на экран, равно А) 81 Максимальное произведение двух однозначных чисел равно 9х9=81. 5) НАИМЕНЬШЕЕ значение переменной a, которое может быть выведено на экран этой программой, равно D) 1 Понятно, что чисел с количеством знаков, меньшим единицы, быть не может.
Без проверок код был бы намного меньше, но сделал с проверками на всякий случай. Если нужно проще - пишите. По сути достаточно функции 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
1) При исполнении этой программы на экран было сначала выведено число 2, затем число 15. НАИМЕНЬШЕЕ значение переменной x, для которого это возможно, равно С) 35
Здесь количество цифр равно двум, а их произведение равно 15. Число 15 представимо в виде произведения двух однозначных чисел только в виде 3х5 или 5х3. Следовательно, наименьшим числом могло быть только 35.
2) При исполнении этой программы на экран было сначала выведено число 2, затем число 15. НАИБОЛЬШЕЕ значение переменной x, для которого это возможно, равно B) 53
Решение аналогично предыдущему, но выбирается наибольшее число, т.е. 53.
3) НАИМЕНЬШЕЕ значение переменной b, которое может быть выведено на экран этой программой, равно Е) 0
Минимальное значение произведения n однозначных чисел будет равно нулю, если среди этих чисел встретить хотя бы один ноль.
4) При исполнении этой программы на экран было сначала выведено число 2. НАИБОЛЬШЕЕ значение переменной b, которое может быть выведено на экран, равно А) 81
Максимальное произведение двух однозначных чисел равно 9х9=81.
5) НАИМЕНЬШЕЕ значение переменной a, которое может быть выведено на экран этой программой, равно D) 1
Понятно, что чисел с количеством знаков, меньшим единицы, быть не может.