книга заданий пайтон. книга практических заданий, pyton. Сборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python
Скачать 2.24 Mb.
|
Упражнение 107. Максимальное сокращение дробей## # Максимальное сокращение дробей # ## Вычислить наибольший общий делитель для двух целых чисел # @param n – первое число (должно быть ненулевым) # @param m – второе число (должно быть ненулевым) # @return наибольший общий делитель двух целых чисел def gcd(n, m): # Инициализируем d как меньшее значение из n и m d = min(n, m) # Используем цикл while для поиска наибольшего общего делителя n и m while n % d != 0 or m % d != 0: d = d – 1 return d Для достижения цели функция gcd использует цикл. Также существует простой и элегантный способ определения наибольшего общего делителя двух чисел при помощи рекурсии. Эта концепция будет описана в упражнении 174. ## Сокращаем дробь до предела # @param num – числитель дроби # @param den – знаменатель дроби (должен быть ненулевым) # @return числитель и знаменатель сокращенной дроби def reduce(num, den): # Если числитель равен нулю, сокращенная дробь будет равна 0/1 if num == 0: return (0, 1) # Находим наибольший общий делитель числителя и знаменателя g = gcd(num, den) # Делим числитель и знаменатель на НОД и возвращаем результат return (num // g, den // g) В функции reduce мы использовали оператор //, чтобы вернуть целочисленные значения числителя и знаменателя. # Запрашиваем дробь у пользователя и отображаем ее максимально сокращенный вариант def main(): # Запрашиваем числитель и знаменатель у пользователя num = int(input("Введите числитель дроби: ")) den = int(input("Введите знаменатель дроби: ")) # Вычисляем сокращенную дробь (n, d) = reduce(num, den) # Выводим результат print("Дробь %d/%d может быть сокращена до %d/%d." % (num, den, n, d)) # Вызов основной функции main() Упражнение 108. Переводим меры## # Преобразуем меры объема ингредиентов в рецептах с целью их более лаконичного # выражения # Например, 59 чайных ложек можно сократить до 1 стакана, 3 столовых ложек # и 2 чайных ложек. # TSP_PER_TBSP = 3 TSP_PER_CUP = 48 ## # Преобразуем меры объема ингредиентов в рецептах с целью их более лаконичного # выражения # @param num – количество единиц объема для преобразования # @param unit – единица измерения (''cup'', ''tablespoon'' или ''teaspoon'') # @return строка, представляющая меры в сокращенной форме def reduceMeasure(num, unit): # Приводим единицу измерения к нижнему регистру unit = unit.lower() Единицы измерения приводятся к нижнему регистру путем вызова метода lower и сохранения результата в ту же переменную. Это позволит пользователю вводить меру в любом регистре. # Вычислим объем в чайных ложках if unit == "teaspoon" or unit == "teaspoons": teaspoons = num elif unit == "tablespoon" or unit == "tablespoons": teaspoons = num * TSP_PER_TBSP elif unit == "cup" or unit == "cups": teaspoons = num * TSP_PER_CUP # Преобразуем объем в чайных ложках в другие единицы измерения cups = teaspoons // TSP_PER_CUP teaspoons = teaspoons – cups * TSP_PER_CUP tablespoons = teaspoons // TSP_PER_TBSP teaspoons = teaspoons – tablespoons * TSP_PER_TBSP # Создаем строковую переменную для хранения результата result = "" # Добавляем количество стаканов к результату (если надо) if cups > 0: result = result + str(cups) + " cup" # Множественное число if cups > 1: result = result + "s" # Добавляем количество столовых ложек к результату (если надо) if tablespoons > 0: # Добавляем запятую, если нужно if result != "": result = result + ", " result = result + str(tablespoons) + " tablespoon" # Множественное число if tablespoons > 1: result = result + "s" # Добавляем количество чайных ложек к результату (если надо) if teaspoons > 0: # Добавляем запятую, если нужно if result != "": result = result + ", " result = result + str(teaspoons) + " teaspoon" # Множественное число if teaspoons > 1: result = result + "s" # Обрабатываем ноль if result == "": result = "0 teaspoons" return result В эту программу мы включили сразу несколько вызовов функции для охвата большого числа разнообразных мер. # Демонстрируем работу функции reduceMeasure путем нескольких обращений def main(): print("59 teaspoons is %s." % reduceMeasure(59, "teaspoons")) print("59 tablespoons is %s." % \ reduceMeasure(59, "tablespoons")) print("1 teaspoon is %s." % reduceMeasure(1, "teaspoon")) print("1 tablespoon is %s." % reduceMeasure(1, "tablespoon")) print("1 cup is %s." % reduceMeasure(1, "cup")) print("4 cups is %s." % reduceMeasure(4, "cups")) print("3 teaspoons is %s." % reduceMeasure(3, "teaspoons")) print("6 teaspoons is %s." % reduceMeasure(6, "teaspoons")) print("95 teaspoons is %s." % reduceMeasure(95, "teaspoons")) print("96 teaspoons is %s." % reduceMeasure(96, "teaspoons")) print("97 teaspoons is %s." % reduceMeasure(97, "teaspoons")) print("98 teaspoons is %s." % reduceMeasure(98, "teaspoons")) print("99 teaspoons is %s." % reduceMeasure(99, "teaspoons")) # Вызов основной функции main() |