38. Переводим меры.
Условие:
Во многих кулинарных книгах до сих пор можно встретить рецепты, в которых ингредиенты отмеряются стаканами, чайными и столовыми ложками.
И хотя при наличии этих нехитрых предметов таким рецептам следовать довольно удобно, бывает трудно быстро преобразовать подобные меры при приготовлении рождественского ужина на огромную семью.
Например, если в рецепте сказано взять четыре столовые ложки того или иного ингредиента, то при увеличении выхода в четыре раза можно просто отсчитать 16 столовых ложек. Однако гораздо проще было бы привести эту меру к одному стакану.
Напишите функцию, выражающую заданный объем ингредиентов с использованием минимально возможных замеров.
Функция должна принимать в качестве параметра количество единиц измерения, а также их тип (стакан, столовая или чайная ложка).
На выходе мы должны получить строку, представляющую указанное количество вещества, с задействованием минимального количества действий и предметов. Например, если на вход функции вы подали объем, равный 59 чайным ложкам, возвращенная строка должна быть такой: «1 стакан, 3 столовые ложки, 2 чайные ложки».
Один стакан вмещает 16 столовых ложек, а одна столовая ложка эквивалентна трем чайным ложкам.
Код:
def my_cook_measure(cups, tablespoons, teaspoons):
tablespoons_in_cup = 16
teaspoons_in_tablespoons = 3
teaspoons_in_cups = teaspoons_in_tablespoons * tablespoons_in_cup
teaspoons = teaspoons + teaspoons_in_tablespoons * tablespoons + teaspoons_in_cups * cups
cups_result = teaspoons // teaspoons_in_cups
tablespoons_result = (teaspoons - cups_result * teaspoons_in_cups) // teaspoons_in_tablespoons
teaspoons_result = (teaspoons - cups_result * teaspoons_in_cups - tablespoons_result * teaspoons_in_tablespoons)
return (cups_result, tablespoons_result, teaspoons_result)
while True:
cups = input("%50s" % "Введите количество стаканов: ")
tablespoons = input("%50s" % "Введите количество столовых ложек: ")
teaspoons = input("%50s" % "Введите количество чайных ложек: ")
print()
try:
cups = int(cups)
tablespoons = int(tablespoons)
teaspoons = int(teaspoons)
if cups < 0 or tablespoons < 0 or teaspoons < 0:
print(("%49s" % "Вы ввели отрицательные значения."))
continue
break
except:
print("%49s" % "Вы допустили ошибку при вводе.")
result = my_cook_measure(cups, tablespoons, teaspoons)
print("%49s" % f"Количество чашек: {result[0]}", "%49s" % f"Количество столовых ложек: {result[1]}", "%49s" % f"Количество чайных ложек: {result[2]}")