Доброго времени суток, читатели, зрители моего канала programmer's notes.
Дополнение к уроку
Решения задач на множества из урока 19
Важное замечание. Дзен не только убрало обертку для видео из видеохостингов, но и обертку для программ из github. Теперь, если программа с отступами, то мне придется помещать в статью ее скриншот и ссылку на саму программу в github.
Как обычно разбираем задачки из видеоурока.
Задача 1.
Дан список, состоящий из чисел. Получить множество из списка.
Если число в списке повторяется, то вместо него в множество добавляется строка. Например в списке число 7. В множество добавляется число 7. Если оно встречается дважды, то в множество добавляется '*7'. Если трижды то '*7' и '**7'. И т.д.
Решение достаточно простое. Нужно просто перебирая элементы в списке и сверяясь с наличием их в множестве выполнять то или иное действие. Вопрос заключается в алгоритме добавления того или иного элемента. Я этот процесс реализовал следующим образом.
Решение
Сам код
Весь алгоритм реализован в цикле while. В нем определяем, какой элемент нужно добавить. Понятно, что первый раз функция str() воздействует на число и делает из него строку. При второй итерации (если она есть) функция действует на строку, но ошибки нет, просто само действие отсутствует.
Конечно, можно пойти и по другому пути. Сразу перенести все элементы в множество. А потом проверяя, сколько раз встречается элемент в списке, добавлять нужные элементы в множество.
Вот второй вариант решения
Сам код
Как вам такое решение. Пришлось однако создавать еще одно множество - копию первого.
Задача 2.
Имеется эталонное множество и набор множеств, нужно найти все множества которые, которые являются подмножествами первого и имеют наименьшую длину
Решение такое. Признаться несколько неуклюжее. В начале определяем минимальную длину для множеств, которые являются подмножествами эталонного, а потом снова берем те же множества с такой длиной и выводим их.
Кстати, видеоуроке я допустил ошибку. Если смотрели, то без труда найдете.
Задача 3.
Имеется набор строк, требуется найти слово максимальной длины, которое присутствует во всех строках и вывести на консоль. Если таких несколько, то вывести их по слову в строку. Если таких слов нет, то вывести -.
Решение состоит из двух этапов. В начале ищем все общие слова. Он и оказываются в множестве st. Если множество не пусто, то теперь отбираем самые длинные слова. Для это получаем отсортированный список по длинам. А далее дело техники, так в начале идут самые короткие слова.
Второе решение (оно было в видеоуроке) имеет ту же первую часть. Здесь мы определяем сразу наибольшую длину и далее выводим слова с этой длиной.
Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.
#программирование #программисты #python #языки программирования