Задачи по Питон. Задачи по Python_1. Задача 1 Дан произвольный список. Представьте его в обратном порядке. Задача 2
Скачать 67.54 Kb.
|
Задачи по Python II Списки Список – последовательность элементов, объединенных в один контейнер. Главная особенность – они изменяемы. Элементы списка индексируются, состоят в основном из однотипных данных, перебираются, сохраняют порядок. Для решения заданий необходимо повторить свойства и методы списков. Задача 1 Дан произвольный список. Представьте его в обратном порядке. Задача 2 Напишите функцию change(lst), которая принимает список и меняет местами его первый и последний элемент. В исходном списке минимум 2 элемента. Задача 3 Функция to_list() принимает неограниченное количество параметров. Обработайте их так, чтобы на выходе получить список из этих элементов. Задача 4 Николай задумался о поиске «бесполезного» числа на основании списка. Суть оного в следующем: он берет произвольный список чисел, находит самое большое из них, а затем делит его на длину списка. Студент пока не придумал, где может пригодиться подобное значение, но ищет у вас помощи в реализации такой функции useless(s). Задача 5 Требуется создать функцию list_sort(lst), которая сортирует список чисел по убыванию их абсолютного значения. Задача 6* На входе имеем список строк разной длины. Необходимо написать функцию all_eq(lst), которая вернет новый список из строк одинаковой длины. Длину итоговой строки определяем исходя из самой большой из них. Если конкретная строка короче самой длинной, дополнить ее нижними подчеркиваниями с правого края до требуемого количества символов. Задача 7* Задан список: flst = [[1,2,3],[8,9,12,17],[3,7]] Сформируйте из элементов всех подсписков одномерный упорядоченный список [1, 2, 3, 3, 7, 8, 9, 12, 17] и выведите его на печать. Есть решение в одну строку. Словари Словари (dict) в языке Python – наиболее распространенный тип данных. Они буквально везде (в классах, модулях, функциях), поэтому сделаны максимально эффективными. Для решения заданий необходимо повторить: свойства, стандартные операции со словарями, как их создавать, каковы требования к ключам и значениям, как копировать, обновлять, распаковывать, какими способами можно просматривать содержимое. Для углубленного погружения в тему следует ознакомиться с типами defaultdict, OrderedDict, Counter, ChainMap, UserDict из встроенного модуля collections. В некоторых случаях они могут пригодиться, существенно сократив длину кода. Задача 1 Напишите функцию to_dict(lst), которая принимает аргумент в виде списка и возвращает словарь, в котором каждый элемент списка является и ключом и значением. Предполагается, что элементы списка будут соответствовать правилам задания ключей в словарях. Задача 3 Дана строка в виде случайной последовательности чисел от 0 до 9. Требуется создать словарь, который в качестве ключей будет принимать данные числа (т. е. ключи будут типом int), а в качестве значений – количество этих чисел в имеющейся последовательности. Для построения словаря создайте функцию count_it(sequence), принимающую строку из цифр. Функция должна возвратить словарь из 3-х самых часто встречаемых чисел. Задача 4 Создайте словарь с количеством элементов не менее 5-ти. Поменяйте местами первый и последний элемент объекта. Удалите второй элемент. Добавьте в конец ключ «new_key» со значением «new_value». Выведите на печать итоговый словарь. Важно, чтобы словарь остался тем же (имел тот же адрес в памяти). Задача 5* Имеется ряд словарей с пересекающимися ключами (значения - положительные числа). Напишите 2 функции, которые делают с массивом словарей следующие операции: 1-ая функция max_dct(*dicts) формирует новый словарь по правилу: Если в исходных словарях есть повторяющиеся ключи, выбираем среди их значений максимальное и присваиваем этому ключу (например, в словаре_1 есть ключ "а" со значением 5, и в словаре_2 есть ключ "а", но со значением 9. Выбираем максимальное значение, т. е. 9, и присваиваем ключу "а" в уже новом словаре). Если ключ не повторяется, то он просто переносится со своим значением в новый словарь (например, ключ "с" встретился только у одного словаря, а у других его нет. Следовательно, переносим в новый словарь этот ключ вместе с его значением). Сформированный словарь возвращаем. 2-ая функция sum_dct(*dicts) суммирует значения повторяющихся ключей. Значения остальных ключей остаются исходными. (Проводятся операции по аналогу первой функции, но берутся не максимумы, а суммы значений одноименных ключей). Функция возвращает сформированный словарь. Кортежи Кортеж (tuple) – неизменяемый тип данных. Эта последовательность является упорядоченной и итерируемой, к элементам можно получить доступ по индексу. Чаще всего кортежи используются для разнородных данных (представленных строками, числами, списками, множествами и т.п.). Для решения задач необходимо вспомнить свойства кортежей, методы, способы их копирования, срезы, индексирование последовательностей. Углубиться в тему можно при помощи namedtuple из модуля collections, которые позволяют давать имена каждому элементу последовательности, делая эту структуру данных в чем-то похожей на словарь. Задача 1 Напишите функцию tpl_sort(), которая сортирует кортеж, состоит из целых чисел по возрастанию и возвращает его. Если хотя бы один элемент не является целым числом, то функция возвращает исходный кортеж. Задача 2 Функция slicer() на вход принимает кортеж и случайный элемент. Требуется вернуть новый кортеж, начинающийся с первого появления элемента в нем и заканчивающийся вторым его появлением включительно. Если элемента нет вовсе – вернуть пустой кортеж. Если элемент встречается только один раз, то вернуть кортеж, который начинается с него и идет до конца исходного. Задача 3 Перед студентом стоит задача: на вход функции sieve() поступает список целых чисел. В результате выполнения этой функции будет получен кортеж уникальных элементов списка в обратном порядке. Задача 4 Николай знает, что кортежи являются неизменяемыми, но он с этим не готов соглашаться. Ученик решил создать функцию del_from_tuple(), которая будет удалять первое появление определенного элемента из кортежа по значению и возвращать кортеж без оного. Попробуйте повторить шедевр не признающего авторитеты начинающего программиста. К слову, Николай не всегда уверен в наличии элемента в кортеже (в этом случае кортеж вернется функцией в исходном виде). Задача 5* Создайте кортеж из 7-ми именованных кортежей учащихся ВУЗов. В именованном кортеже будут присутствовать следующие поля: имя студента, возраст, оценка за семестр, город проживания. Функция good_students() будет принимать этот кортеж, вычислять среднюю оценку по всем учащимся и выводить на печать следующее сообщение: "Ученики {список имен студентов через запятую} в этом семестре хорошо учатся!". В список студентов, которые выводятся по результатам работы функции, попадут лишь те, у которых оценка за семестр равна или выше средней по всем учащимся. Множества Множества – неупорядоченный тип уникальных данных, включающий только хешируемые элементы. Их можно изменять, неизменяемый аналог – frozenset. Не имеют индексации. Поиск объекта внутри множества очень быстрый (по сравнению со списками и кортежами). Для успешного решения заданий требуется повторить: особенности множеств, уникальные методы, основные операции, способы модификации. Задача 1 На входе функция to_set() получает строку или список чисел. Преобразуйте их в множество. На выходе должно получиться множество и его мощность. Задача 2 Имеется список с произвольными данными. Поставлена задача преобразовать его в множество. Если какие-то элементы нельзя хешировать, то пропускаем их. Функция list_to_set() выводит на печать получившееся множество. Задача 3 На основании 3 исходных множеств (передаются в качестве аргументов функции diff()) требуется написать функцию, которая будет возвращать либо симметричную разность, либо просто разность (если дополнительный аргумент функции symmetric имеет значение False) приведенных объектов в порядке: 1-ое множество, 2-ое множество, 3-е множество. Задача 4 Напишите функцию superset(), которая принимает 2 множества. Результат работы функции: вывод в консоль одного из сообщений в зависимости от ситуации: 1 - «Супермножество не обнаружено» 2 – «Объект {X} является чистым супермножеством» 3 – «Множества равны» Задача 5* Предоставлен список натуральных чисел. Требуется сформировать из них множество. Если какое-либо число повторяется, то преобразовать его в строку по образцу: например, если число 4 повторяется 3 раза, то в множестве будет следующая запись: само число 4, строка 44 (второе повторение, т.е. число дублируется в строке), строка 444 (третье повторение, т.е. строка множится на 3). Реализуйте вывод множества через функцию set_gen(). Строки Строки в языке питон являются неизменяемыми объектами. Это значит, что в момент запуска скрипта ячейка памяти, на которую ссылается строка, не меняется. Из этого следует, что символы этого типа данных не могут меняться или переприсваиваться. Они поддерживают различные операторы, могут сравниваться, включают большое количество встроенных методов. Любые действия над строками не модифицируют их, а создают новый объект. Для успешного решения заданий нужно повторить: срезы, методы строк, операции и основные свойства. Задача 1 Напишите функцию search_substr(subst, st), которая принимает 2 строки и определяет, имеется ли подстрока subst в строке st. В случае нахождения подстроки, возвращается фраза «Есть контакт!», а иначе «Мимо!». Должно быть найдено совпадение независимо от регистра обеих строк. Задача 2 Требуется определить индексы первого и последнего вхождения буквы в строке. Для этого нужно написать функцию first_last(letter, st), включающую 2 параметра: letter – искомый символ, st – целевая строка. В случае отсутствия буквы в строке, нужно вернуть кортеж (None, None), если же она есть, то кортеж будет состоять из первого и последнего индекса этого символа. Задача 3 На основании предоставленного отрывка текста определить 3 наиболее часто встречаемых символа в ней. Пробелы нужно игнорировать (не учитывать при подсчете). Для выведения результатов вычислений требуется написать функцию top3(st). Итог работы функции представить в виде строки: «символ – количество раз, символ – количество раз…». Задача 4* Николай решил вспомнить старые времена. В свое время было модно писать сообщения с чередующимися заглавной и малой буквами. Он захотел изобрести функцию, которая будет делать с любой предоставленной строкой аналогичное. Ваша задача: повторить труд студента camel(st) с учетом того, что пробелы и знаки препинания не должны портить чередование регистра символов (они в этом процессе не учитываются, но возвращаются в итоговой строке). Задача 5* Дмитрий считает, что когда текст пишут в скобках (как вот тут, например), его читать не нужно. Вот и надумал он существенно укоротить время чтения, написав функцию, которая будет удалять все, что расположено внутри скобок. Помогите ленивому Диме разработать функцию shortener(st), которая будет удалять все, что внутри скобок и сами эти скобки, возвращая очищенный текст (скобки могут быть вложенными). Задача 6* Александр решил как-то отобразить в тексте BACKSPACE (т.е. удаление последнего символа). Он подумал, что символ @ отлично для этого подходит. Всем своим знакомым он дал строки такого вида (например, гр@оо@лк@оц@ва), чтобы посмотреть, кому удастся написать функцию cleaned_str(st), возвращающую строку в ее чистом виде. Условный оператор Задача 1 Николай написал функцию is_alive(health), которая проверяет здоровье персонажа в игре. Если оно равно или меньше нуля, то функция возвращает False, в противном случае True. К сожалению, функция не работает, так как ученик допустил в ней ряд ошибок. Исправьте их и проверьте работоспособность программы (в качестве аргумента всегда передается число). def is_alive(health): ____if: ____health < 0 _______False ____else: _______return true Задача 2 Составьте функцию season_events(number_of_month), которая принимает номер месяца вашего рождения и в зависимости от сезона печатает на выходе следующее: Вы родились в <НАЗВАНИЕ_МЕСЯЦА>. <ОПИСАНИЕ_СОБЫТИЙ>. В качестве ОПИСАНИЯ_СОБЫТИЙ будет характеристика сезона: - для зимы За окном падал белый снег, - для весны Птицы пели прекрасные песни, - для лета Солнце светило ярче чем когда-либо, - для осени Урожай был невероятным. Важно учесть, что пользователи могут ввести любой тип данных в качестве аргумента (не попадитесь на этом и предупредите о том, что Требуется ввести реальный номер месяца). Задача 3* Анатолию в последний месяц удача улыбалась очень плохо. У него 3 раза взломали пароль. Вот он и задумался над тем, что неправильно подходит к вопросу составления паролей. Чтобы не напрягаться больше и опять не попасть впросак, молодой человек решил написать функцию на Python, которая будет проверять его пароль на надежность. Требования к паролю у Анатолия следующие (он внимательно изучил рекомендации знатоков): 1. Длина – 8 символов (если меньше – то проще взломать, а если длиннее – то сложно запомнить). 2. В пароле должны быть: 1) заглавные буквы, 2) строчные символы, 3) числа 4) специальные знаки (из перечня *-#; другие спецсимволы недопустимы, так как Анатолий их не может запомнить). Помогите парню составить функцию check_pass (pswd), которая проверит пароль на соответствие требованиям. В случае верного пароля выведется на печать Пароль идеален, а в остальных случаях будут перечислены все ошибки, которые Анатолий допустил (для представления перечня ошибок заведите переменную err в виде словаря). Задача 4* Число делится на 6 только в случае соблюдения двух условий: 1. Последняя его цифра четная 2. Сумма всех цифр делится на 3 Напишите функцию is_divisible_by_6(number), которая возвращает Число Х делится на 6 или Число Х неделимо на 6 в зависимости от того, можно ли его разделить на 6. В качестве аргумента может быть передано любое целое число. Циклы В Питоне имеется только два типа циклов: while и for. Цикл for позволяет перебирать элементы по индексу или напрямую. Оба вида циклических структур могут включать условные выражения и специальные «прерыватели»: continue, break. Для успешного решения заданий необходимо понимать устройство циклов в Python, уметь использовать вложенные циклы, стремиться минимизировать количество итераций (при такой возможности). Задача 1 На вход функция more_than_five(lst) получает список из целых чисел. Результатом работы функции должен стать новый список, в котором содержатся только те числа, которые больше 5 по модулю. Задача 2 Евгению предоставили строку, состоящую из русских букв разных регистров, и попросили очистить ее от заглавных литер. Как ему показалось, он написал верный код, но результат совсем не порадовал. Ниже представлен пример работы «чистильщика строк», которому срочно требуется ваша помощь. Пример – IDE ---- letters = 'ЫгВЫоЯСремДШНККАыкЩЙФа' for letter in letters: ____if letter.upper() = letters: ________letters.replace(letter, '') print(letters) Задача 3 Анна решила представить некую таблицу с заглавными и строчными буквами русского алфавита в красивом формате. Об этом ее попросили англоязычные друзья из социальных сетей. Недолго думая девушка создала скрипт, который выполнял подобную операцию. Результат работы программы продемонстрирован ниже. Сможете повторить (в строках с галочками - их 27 штук, чтобы вам не пришлось долго считать)? Для идентичности результатов примените любой моноширинный шрифт (в котором все символы имеют одинаковую ширину). ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | А а || К к || Х х | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | Б б || Л л || Ц ц | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | В в || М м || Ч ч | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | Г г || Н н || Ш ш | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | Д д || О о || Щ щ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | Е е || П п || Ъ ъ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | Ё ё || Р р || Ы ы | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | Ж ж || С с || Ь ь | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | З з || Т т || Э э | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | И и || У у || Ю ю | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | Й й || Ф ф || Я я | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Задача 4 Для идентификации своего круга проверенных лиц будущий тайный агент (ведь все о чем-то мечтают) Максим решил пускать на свою страничку в Интернете только тех, чьи никнеймы есть в его секретном списке. Он уверен в своих людях (особенно в том, что они по глупости не расскажут никому своё секретное прозвище), как и в том, что имена товарищей невозможно подобрать случайно. К слову, вот этот список: Мавпродош, Лорнектиф, Древерол, Фиригарпиг, Клодобродыч. По мере увеличения круга знакомых Максим, естественно, дополнит данный список. Ваша задача такова: повторите код, который будет спрашивать у пользователя его ник и либо пускать на сайт (выведется сообщение Ты – свой. Приветствую, любезный {НИК_ПОСЕТИТЕЛЯ}!), либо нет (в этом случае будет такой текст: Тут ничего нет. Еще есть вопросы?. Фактически, будущий супергерой решил поиздеваться над теми, кого нет в его удивительном перечне, так как им будет показываться это сообщение постоянно. Очень коварный замысел!). Для проверки прозвищ посетителей используйте встроенную функцию input(). Задача 5* Валентина прогуляла лекцию по математике. Преподаватель решил подшутить над нерадивой студенткой и попросил ее на практическом занятии перечислить все положительные делители некоторых целых чисел. Для несложных примеров студентка быстро нашла решения (для числа 6 это: 1, 2, 3, 6; а для числа 16 это: 1, 2, 4, 8, 16), но этим все не закончилось. На домашнее задание ей дали варианты посложнее: 23436, 190187200, 380457890232. Решить такое вручную, как вы понимаете, практически нереально. Вот Валентина и обратилась к вам за помощью. Помогите ей (при помощи функции all_divisors(number)). Постарайтесь найти самое оптимальное решение. Результат представьте в виде списка (не забудьте отсортировать по возрастанию). Функции Главные причины применения функций в Python: Изолирование блоков кода. Исключение повторного написания программных строк (принцип Don't repeat yourself, Не повторяйся). К функциям в Python относят: встроенные (например, range(), len(), int(), chr(). Они доступны в любом скрипте в любое время. Полный список представлен по ссылке: https://docs.python.org/3/library/functions.html); пользовательские (написаны нами для решения возникающих задач. Объявляются конструкцией def); лямбда-функции (анонимные, предваряются словом lambda); импортируемые (из встроенных или сторонних модулей. Для их использования требуется установка библиотеки, если она не встроена, и импорт модуля); методы классов (являются функциями по своему поведению). При работе с заданиями следует повторить синтаксис написания функций, способы применения встроенных и особенности передачи параметров. Задача 1 Напишите функцию sum_range(start, end), которая суммирует все целые числа от значения start до величины end включительно. Если пользователь задаст первое число большее чем второе, просто поменяйте их местами. Задача 2 Чтобы проверить понимание параметров и область их видимости Николай создал 3 функции (представлены ниже). Попытайтесь предугадать, как поведет себя каждая из них при запуске (возникнут ли ошибки, что возвратится). Пример – IDE - Функция 1 def func1(): ____param = 4 ____def inner(): ________param += 1 ____return param Пример – IDE - Функция 2 def func2(): _____param = 4 _____def inner(var): _________var += 1 ____inner(param) ____return param Пример – IDE - Функция 3 def func3(): ____param = 4 ____def inner(var): ________var += 1 ________return var ____param = inner(param) ____return param Задача 3 Создайте функцию three_args(), которая принимает 1, 2 или 3 строго ключевых параметра. В результате ее работы на печать в консоль выводятся значения переданных переменных, но только если они не равны None. Получим, например, следующее сообщение: Переданы аргументы: var1 = 2, var3 = 10. Задача 4* Антон попал в коллизию: его функция time_now() работает очень странно. Казалось бы, задача простая: показать текущее время с сообщением. Тем не менее, время не меняется. Код предоставлен ниже с примерами. Постарайтесь решить проблему незадачливого программиста. Пример – IDE from datetime import datetime from time import sleep def time_now(msg, *, dt=datetime.now()): ____print(msg, dt) # Тесты time_now('Сейчас такое время: ') sleep(1) time_now('Прошла секунда: ') sleep(1) time_now('Ничего не понимаю... ') Результат выполнения Сейчас такое время: 2021-03-14 15:48:55.117455 Прошла секунда: 2021-03-14 15:48:55.117455 Ничего не понимаю... 2021-03-14 15:48:55.117455 Задача 5* Чтобы лучше разобраться в типах параметров функций Инна создала inspect_function(), которая в качестве аргумента принимает другую функцию (главное, не встроенную, built-in). В результате работы она выводит следующие данные: название анализируемой функции, наименование всех принимаемых ею параметров и их типы (позиционные, ключевые и т.п.). Попробуйте повторить результат девушки. Модули и пакеты Задача 1 Создайте пакет figures, состоящий из трех подпакетов: triangle, circle, square. В каждом подпакете будем иметь файл code.py, где создадим ряд функций: – для пакета circle: функции circle_perimeter() – вычисляет длину окружности, circle_area() – вычисляет площадь окружности. Еще заведем переменную default_radius = 5, которая будет скрыта при импорте модуля. Ее назначение – дефолтный радиус для окружности, если пользователь не введет свой. Обе функции принимают на вход только радиус. – для пакета triangle: функции triangle_perimeter() – вычисляет периметр треугольника, triangle_area() – вычисляет площадь фигуры. Дополнительно создадим три переменные (длины сторон треугольника): a = 7, b = 2, c = 8, которые также не будут видны при импорте. На вход функциям передается длина трех сторон (если пользователь ничего не введет, то используются значения по умолчанию). – для пакета square: функции square_perimeter() – вычисляет периметр квадрата, square_area() – вычисляет площадь фигуры. Дополнительная переменная a = 15 не доступна при импорте и принимается функциями, если пользователь не предоставил свои размеры стороны квадрата. Ваша итоговая задача – позволить человеку, загрузившему ваш пакет, иметь возможность напрямую импортировать все функции из подпакетов. Например, он может написать так: from figure import circle_area. Также вы, как разработчик, после написания всей библиотеки решили поменять ее имя на figures. Постарайтесь сделать код таким, чтобы это не заставило вас переписывать все внутренние импорты с учетом нового именования. |