книга заданий пайтон. книга практических заданий, pyton. Сборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python
Скачать 2.24 Mb.
|
Упражнение 181. Возможный размен(41 строка) Напишите программу, которая будет определять, можно ли составить конкретную сумму из определенного количества монет. Например, можно набрать доллар из четырех монет номиналом в 25 центов. Но при помощи пяти монет доллар никак не собрать. При этом из шести монет это снова возможно, если взять три монеты по 25 центов, две – по 10 и одну номиналом в 5 центов. Также возможно собрать сумму $1,25 из пяти или восьми монет, но не удастся это сделать с четырьмя, шестью или семью монетами. Ваша основная программа должна запрашивать у пользователя искомую сумму и количество монет. На выходе вы должны получить сообщение о том, можно или нет собрать введенную сумму при помощи заданного количества монет. Представьте, что для решения этой задачи в вашем распоряжении есть монеты номиналом 1, 5, 10 и 25 центов. Также ваша программа должна включать рекурсивный алгоритм. Циклов в ней быть не должно. Упражнение 182. Слова через химические элементы(67 строк) Каждый химический элемент из таблицы Менделеева характеризуется своим обозначением, состоящим из одного, двух или трех символов. Есть такая игра – пытаться выразить то или иное слово через химические элементы. Например, слово silicon может быть записано при помощи следующих химических элементов: Si, Li, C, O и N. В то же время слово hydrogen не может быть составлено из названий элементов. Напишите рекурсивную функцию, способную определять, можно ли выразить переданное ей слово исключительно через обозначения химических элементов. Ваша функция должна принимать два параметра: слово, которое нужно проверить, и список символов, которые можно при этом использовать. Возвращать функция должна строку, состоящую из использованных символов, если собрать искомое слово можно, и пустую строку в противном случае. При этом регистры символов учитываться не должны. В основной программе должна быть использована ваша функция для проверки всех элементов таблицы Менделеева на возможность составить их названия из обозначений химических элементов. Отобразите на экране названия элементов вместе с обозначениями, которые были использованы для их написания. Например, одна из строчек может выглядеть так: Silver может быть представлен как SiLvEr Для решения задачи вы можете воспользоваться набором данных с химическими элементами, который можно скачать на сайте автора. Этот набор включает в себя названия и обозначения всех 118 элементов периодической таблицы. Упражнение 183. Последовательность химических элементов(Решено. 81 строка) Существует такая игра, в которой химические элементы выстраиваются в длинную цепочку таким образом, чтобы каждое очередное слово начиналось на букву, на которую заканчивается предыдущее. Например, если последовательность начинается с элемента Hydrogen, то следующий элемент должен начинаться на N, и это может быть Nickel. Следом может идти Lithium. При этом элементы в ряду не должны повторяться. При игре в одиночку целью является составление списка элементов максимально возможной длины. Если в игре принимают участие двое, то целью становится назвать такой химический элемент, чтобы оппонент не смог продолжить последовательность. Напишите программу, которая будет запрашивать у пользователя химический элемент и при помощи рекурсивной функции определять максимально возможную последовательность слов. Выведите на экран полученный ряд. Удостоверьтесь, что программа выводит соответствующее сообщение об ошибке, если пользователь укажет несуществующий химический элемент. Подсказка. Для некоторых элементов вашей программе может понадобиться до двух минут, чтобы найти последовательность максимально возможной длины. Так что вам лучше начать проверку своей программы с элементов Molybdenum или Magnesium, для которых длина последовательности составляет всего восемь слов. На выполнение этой задачи уйдет всего несколько секунд. Упражнение 184. Выравниваем список(Решено. 33 строки) Списки в языке Python могут содержать в себе вложенные списки. В то же время вложенные списки могут также состоять из списков, тем самым увеличивая глубину общей иерархии. В результате списки могут обретать структуру, похожую на следующую: [1, [2, 3], [4, [5, [6, 7]]], [[[8], 9], [10]]]. Списки со множеством уровней вложенности могут пригодиться при описании сложных отношений между элементами, но при этом такая структура значительно усложняет выполнение операций над элементами. Процесс выравнивания (flattening) списка заключается в избавлении от вложенной структуры и простом перечислении входящих в него элементов. Допустим, для приведенного выше примера выровненный список будет выглядеть так: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. Для выполнения операции выравнивания списка data можно последовать следующему алгоритму: Если список data пуст, тогда Возвращаем пустой список Если первый элемент списка data также является списком, тогда Выравниваем первый элемент списка data и присваиваем результат переменной l1 Выравниваем все элементы первого элемента списка data, за исключением первого, и присваиваем результат переменной l2 Возвращаем результат конкатенации списков l1 и l2 Если первый элемент списка data не является списком, тогда Присваиваем переменной l1 список, состоящий из первого элемента списка data Выравниваем все элементы первого элемента списка data, за исключением первого, и присваиваем результат переменной l2 Возвращаем результат конкатенации списков l1 и l2 Напишите функцию, реализующую рекурсивный алгоритм выравнивания списка, описанный выше. Функция должна принимать на вход список и возвращать выровненную версию списка. В основной программе продемонстрируйте работу функции на примере приведенного выше списка, а также нескольких других. Подсказка. В Python есть функция type, возвращающая тип данных своего единственного аргумента. Информацию о том, как узнать, является ли передаваемый ей аргумент списком, можно найти в интернете. |