Задачи по Python для начинающих от Tproger и GeekBrains
Для обучения программированию на питоне нужны тренировки. Совместно с GeekBrains собрали для вас несколько простых задач на Python 3 c решениями.
Вместе с факультетом Python-разработки GeekUniversity собрали для вас несколько простых задач по Python для обучения и тренировки. Их можно решать в любом порядке.
Обратите внимание, что у любой задачи по программированию может быть несколько способов решения. Чтобы посмотреть добавленный нами вариант решения, кликните по соответствующей кнопке. Все приведённые варианты написаны на Python 3.
Задача 1
Есть список a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] .
Выведите все элементы, которые меньше 5 .
Вариант решения
Самый простой вариант, который первым приходит на ум — использовать цикл for :
for elem in a: if elem < 5: print(elem)
Также можно воспользоваться функцией filter , которая фильтрует элементы согласно заданному условию:
print(list(filter(lambda elem: elem < 5, a)))
И, вероятно, наиболее предпочтительный вариант решения этой задачи — списковое включение:
print([elem for elem in a if elem < 5])
Задача 2
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] ;
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] .
Нужно вернуть список, который состоит из элементов, общих для этих двух списков.
Вариант решения
Можем воспользоваться функцией filter :
result = list(filter(lambda elem: elem in b, a))
Или списковым включением:
result = [elem for elem in a if elem in b]
А можно привести оба списка к множествам и найти их пересечение:
result = list(set(a) & set(b))
Однако в таком случае каждый элемент встретится в результирующем списке лишь один раз, т.к. множество поддерживает уникальность входящих в него элементов. Первые два решения (с фильтрацией) оставят все дубли на своих местах.
Задача 3
Отсортируйте словарь по значению в порядке возрастания и убывания.
Вариант решения
Импортируем нужный модуль и объявляем словарь:
import operator d =
Сортируем в порядке возрастания:
result = dict(sorted(d.items(), key=operator.itemgetter(1)))
И в порядке убывания:
result = dict(sorted(d.items(), key=operator.itemgetter(1), reverse=True))
Задача 4
Напишите программу для слияния нескольких словарей в один.
Вариант решения
Допустим, вот наши словари:
dict_a = dict_b = dict_c =
Объединить их можно вот так:
result = <> for d in (dict_a, dict_b, dict_c): result.update(d)
А можно с помощью «звёздочного» синтаксиса:
О звёздочном синтаксисе можно прочитать в нашей статье.
Задача 5
Найдите три ключа с самыми высокими значениями в словаре my_dict = .
Вариант решения
Можно воспользоваться функцией sorted :
result = sorted(my_dict, key=my_dict.get, reverse=True)[:3]
Аналогичный результат можно получить с помощью функции nlargest из модуля heapq :
from heapq import nlargest result = nlargest(3, my_dict, key=my_dict.get)
Читайте также: Всё о сортировке на Python
Задача 6
Напишите код, который переводит целое число в строку, при том что его можно применить в любой системе счисления.
Вариант решения
Второй аргумент функции int отвечает за указание основания системы счисления:
Задача 7
Нужно вывести первые n строк треугольника Паскаля. В этом треугольнике на вершине и по бокам стоят единицы, а каждое число внутри равно сумме двух расположенных над ним чисел.
Вариант решения
def pascal_triangle(n): row = [1] y = [0] for x in range(max(n, 0)): print(row) row = [left + right for left, right in zip(row + y, y + row)] pascal_triangle(6)
Задача 8
Напишите проверку на то, является ли строка палиндромом. Палиндром — это слово или фраза, которые одинаково читаются слева направо и справа налево.
Вариант решения
Тут всё просто, достаточно сравнить строку с её обратной версией, для чего можно использовать встроенную функцию reversed:
def is_palindrome(string): return string == ''.join(reversed(string)) print(is_palindrome('abba'))
Того же эффекта можно добиться с помощью срезов:
def is_palindrome(string): return string == string[::-1] print(is_palindrome('abba'))
Задача 9
Сделайте так, чтобы число секунд отображалось в виде дни:часы:минуты:секунды .
Вариант решения
def convert(seconds): days = seconds // (24 * 3600) seconds %= 24 * 3600 hours = seconds // 3600 seconds %= 3600 minutes = seconds // 60 seconds %= 60 print(f':::') convert(1234565)
Задача 10
Вы принимаете от пользователя последовательность чисел, разделённых запятой. Составьте список и кортеж с этими числами.
Вариант решения
values = input('Введите числа через запятую: ') ints_as_strings = values.split(',') ints = map(int, ints_as_strings) lst = list(ints) tup = tuple(lst) print('Список:', lst) print('Кортеж:', tup)
Задача 11
Выведите первый и последний элемент списка.
Вариант решения
lst = [1, 2, 3, 4, 5] print(f'Первый: ; последний: ')
Задача 12
Напишите программу, которая принимает имя файла и выводит его расширение. Если расширение у файла определить невозможно, выбросите исключение.
Вариант решения
def get_extension(filename): filename_parts = filename.split('.') if len(filename_parts) < 2: # filename has no dots raise ValueError('the file has no extension') first, *middle, last = filename_parts if not last or not first and not middle: # example filenames: .filename, filename., file.name. raise ValueError('the file has no extension') return filename_parts[-1] print(get_extension('abc.py')) print(get_extension('abc')) # raises ValueError print(get_extension('.abc')) # raises ValueError print(get_extension('.abc.def.')) # raises ValueError
Задача 13
При заданном целом числе n посчитайте n + nn + nnn.
Вариант решения
def solve(n): n1 = n n2 = int(str(n) * 2) n3 = int(str(n) * 3) print(n1 + n2 + n3) solve(5)
Задача 14
Напишите программу, которая выводит чётные числа из заданного списка и останавливается, если встречает число 237.
Вариант решения
numbers = [ 386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345, 399, 162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217, ] for x in numbers: if x == 237: break elif x % 2 == 0: print(x)
Задача 15
Напишите программу, которая принимает два списка и выводит все элементы первого, которых нет во втором.
Вариант решения
set_1 = set(['White', 'Black', 'Red']) set_2 = set(['Red', 'Green']) print(set_1 - set_2)
Задача 16
Выведите список файлов в указанной директории.
Вариант решения
from os import listdir from os.path import isfile, join files = [f for f in listdir('/home') if isfile(join('/home', f))] print(files)
Задача 17
Сложите цифры целого числа.
Вариант решения
def sum_digits(num): digits = [int(d) for d in str(num)] return sum(digits) print(sum_digits(5245))
Задача 18
Посчитайте, сколько раз символ встречается в строке.
Вариант решения
string = 'Python Software Foundation' string.count('o')
Задача 19
Поменяйте значения переменных местами.
Вариант решения
Можно написать монструозную конструкцию в стиле языка C:
x = 5 y = 10 temp = x x = y y = temp
Но в Python есть более удобный способ для решения этой задачи:
x = 5 y = 10 x, y = y, x
Задача 20
С помощью анонимной функции извлеките из списка числа, делимые на 15.
Вариант решения
nums = [45, 55, 60, 37, 100, 105, 220] result = list(filter(lambda x: not x % 15, nums))
Задача 21
Нужно проверить, все ли числа в последовательности уникальны.
Вариант решения
def all_unique(numbers): return len(numbers) == len(set(numbers))
Задача 22
Напишите программу, которая принимает текст и выводит два слова: наиболее часто встречающееся и самое длинное.
Вариант решения
import collections text = 'lorem ipsum dolor sit amet amet amet' words = text.split() counter = collections.Counter(words) most_common, occurrences = counter.most_common()[0] longest = max(words, key=len) print(most_common, longest)
На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.
Где решать задачи по программированию, чтобы пройти путь from zero to hero
Если вам о чём-то говорят фамилии Зив, Хомченко и Рымкевич, иди сюда, дай обниму, бедолага-олимпиадник, то вы наверняка знаете, как важно прорешивать задачи для полноценного, осознанного и глубокого понимания изученного материала. Когда нет или совсем мало реальной практики, задачи дают возможность покрыть практикой все теоретические знания, погрузиться в неожиданные выводы, сложности, баги, препятствия. Более того, даже если практики достаточно, задачи помогают относительно быстро, комплексно и глубоко проработать типичные и нетипичные ситуации, возникающие в разработке (любой другой науке). Это всегда безопасный (никто не взрывает лабораторию и не роняет прод), доступный и удобный способ подробно разобраться в предмете. Определённо, программирования это касается в первую очередь.

Как решать задачи?
Большинство сайтов из этого дайджеста предоставляют удобные и интуитивные интерфейсы для работы с кодом онлайн, и, кажется, этого вполне достаточно. Но такая практика быстро выветривается из головы: на 12-15 задаче ты уже напрочь не помнишь даже формулировку первых, не то что свои выводы и находки. Это неудобно и иногда сводит все старания на нет.
- Положите перед собой блокнот или тетрадку, чтобы фиксировать там две важных вещи: свои находки и вопросы, в которых нужно не забыть разобраться (они обязательно возникают по ходу решения задач, особенно более высокого уровня сложности).
- После окончания работы над очередным сетом задач пройдитесь по записям, подчеркните самое главное, начните искать ответы на вопросы.
- Перед новым подходом просмотрите предыдущие записи, освежите в памяти решённое.
- Если вы нашли изящный путь решения, обязательно используйте его в дальнейшем. Старайтесь, как и в математике, найти наиболее рациональное и даже красивое решение.
- Если вам удалось решить очередную задачу, нагородив костылей, вернитесь к ней позже и попробуйте отрефакторить своё же решение — это не напрасная трата времени, а практика работы над хорошим кодом, которая не помешает любому уровню специалиста.
- Если на портале есть какие-то челленджи или соревнования, обязательно участвуйте — даже если у вас нет ни шанса на победу, вы испытаете своё мышление в новых экстремальных условиях и сможете сравнить себя с другими участниками. В таком опыте обычно лежат точки роста.
- Если не получается — не сдавайтесь, разбирайтесь, используйте источники и сторонние сайты, не стесняйтесь обращаться к менторам и коммьюнити.
- Помните: путь в любую разработку начинается с hello world.
Kaggle — сайт содержит множество исследовательских задач, связанных с машинным обучением и большими данными. Особенно ценно то, что на Kaggle можно найти крутые датасеты, код и материалы для самостоятельного изучения и тренировок.
- Kaggle titanic dataset. Анализ данных с помощью SQL запросов
- Разговор с дата-сайентистом — гроссмейстером Kaggle
- Kaggle: Британские спутниковые снимки. Как мы взяли третье место
- Как я занял 13 место из 3500+ участников и стал Kaggle Competition Master / Хабр
- «Айсберг вместо Оскара!» или как я пробовал освоить азы DataScience на kaggle / Хабр
- Kaggle: История о том как мы учились предсказывать релевантность поисковых запросов и заняли 3-е место
Codewars — сборник задач и челленджей по широком спектру тем: алгоритмам, проектированию, паттернам, различным языкам программирования.
LeetCode — популярный сайт с задачами, который особенно любят соискатели, мечтающие о работе в FAANG. Отличается от остальных тем, что решение задач нацелено именно на подготовку к собеседованиям в крупных компаниях.
- From Zero to Hero: определите ваш уровень решения LeetCode задач от 1 до 5
- Я решил 500 задач на LeetCode — и они действительно меня чему-то научили
- Есть ли польза от решения алгоритмических задач на LeetCode?
- Пройти LeetCode за год: экскурсия по сайту и roadmap
- Моя история подготовки к интервью в FAANG
- Разбор алгоритмических задач с собеседований в Google, Facebook, Amazon
- Первые 255 задач на «литкоде» / Хабр
Codeforces — популярнейший сайт с задачами, тренировками, соревнованиями (раундами) и прочими активностями для прокачки практики программирования. Кроме того, что позволяет решать всё про всё и содержит одну из крутейших баз заданий, имеет развитое сообщество, систему рейтинга и множество встроенных элементов геймификации.
- Если хочешь разобраться, найдешь возможность»: говорим о Codeforces с основателем проекта
- Как выиграть ВСОШ по информатике и больше не волноваться о ЕГЭ?
Exercism — классический задачник для 67 языков программирования. Подразумевает геймификацию, систему менторинга, обучение и т.д. При таких параметрах, конечно, имеет своё коммьюнити (хоть и не такое впечатляющее, как у предыдущих ресурсов).
All Cups — соревновательно-обучательно-решательный портал с множеством задач от VK. Включает задачи по спортивному программированию (привет участникам олимпиады!), машинному обучению, искусственному интеллекту и, что особенно важно, по системному администрированию и всяческому хайлоаду. Если так можно сказать, это самый комфортный сайт для русскоязычного программиста (но мы же помним, что без английского далеко всё равно не уйти, даже здесь).
- All Cups — новая экосистема чемпионатов для IT-специалистов / Хабр
- Соревнования по программированию на платформе All Cups
- All Cups: история одного дизайна экосистемы с большой историей
Задачи для программистов — раздел задач на ТПрогере, который включает задачи и их разбор от компаний и пользователей. Ещё один комфортный русскоязычный ресурс с форматом статей-разборов.
SQL-EX.ru — совершенно вырвиглазный сайт с наикрутейшими задачами и базой знаний по SQL. Отличное русскоязычное сообщество, справочники, учебники, обсуждения, статьи и книги. Настоящий мир SQL, пригодный как для школьника, так и для старшего инженера и разработчика.
- Как изучать SQL в 2023 году
- Ультимативная дорожная карта для изучения SQL и баз данных в 2023 году + источники для знаний
Питонтьютор — интерактивный учебник-задачник по Python с задачами разной сложности. Русскоязычный, приятный, пошаговый и комфортный. Отличная помощь начинающим (и не только) питонистам.
- Как не стать Python-разработчиком
- Изучаем Python за 6 месяцев. Подробный план обучения
Подборки от авторов Хабра — где-то есть неактуальные ссылки, но в целом подборки полезные.
- Сайты для обучения программированию: Топ 100
- Топ 8 лучших ресурсов для практики программирования в 2018
- 11 крупнейших международных соревнований по программированию на 2022 год / Хабр
P.S. Если вы давно хотели написать статью на Хабр, но сомневаетесь в своих силах или качестве материала, пишите мне в личку или присылайте черновик и свои вопросы на neo@habr.team — поможем, подскажем, дадим редакторский совет.
- обучение
- практика программирования
- обучение программированию
- задачи по программированию
Python в примерах и задачах
В курсе реализуется проблемно-ориентированное обучение, когда минимальные теоретические аспекты программирования на Python предлагаются слушателю, только если этого потребует решаемая задача. Кроме того, в научно-популярной форме объясняется физическая, математическая или экономическая суть каждой задачи.
Начальный уровень
Сертификат Stepik

39 951 учащийся
Чему вы научитесь
- формализовать решаемую задачу, выбрать необходимые инструменты для ее реализации средствами языка Python;
- выбрать и использовать необходимый инструментарий библиотек Python для решения широкого класса задач;
- написать программу, отладить и протестировать ее, обработать и визуализировать результаты.
О курсе
Существует классическая техника изучения языков программирования: сначала типы данных, потом конструкции, затем сложные структуры, классы, объекты и т.д. Как следствие, решаемые в качестве примеров задачи демонстрируют возможности определенного элемента языка и не имеют никакого прикладного значения. Но в жизни все совсем не так: есть задача, ее нужно решить желательно средствами, которые не потребуют глубоких знаний по программированию.
И этот курс именно об этом: Как решить задачу средствами языка Python?
Минимальные теоретические аспекты программирования на Python предлагаются слушателю, только если этого потребует решаемая задача.
В курсе рассматривается:
- основные операторы языка Python;
- основные типы данных;
- построение графиков функций;
- работа со списками и массивами;
- модули math, numpy, matplotlib;
Для кого этот курс
- для тех, кто только решил стать программистом, но не выбрал, в какой сфере собирается работать; - для тех, кто уже осваивает Python самостоятельно или по учебникам; - для тех, кому Python нужен для
Начальные требования
Наличие алгоритмического мышления и знания основ программирования приветствуется!
Как проходит обучение
Каждый урок курса посвящен решению одной задачи на языке Python.
Начинается урок с видео-лекции. Для тех, кто больше любит читать, информация дублируется в текстовом виде.
Затем последовательно, по шагам, решается поставленная задача. Если для ее решения требуется что-то новое из языка Python (оператор, тип данных, модуль) - в шаге приводится краткая теория.
Для закрепления знаний, в уроке предусмотрены интерактивные задачи разного типа.
В каждом уроке есть шаги, позволяющие реализовать программу на языке Python и проверить как она работает.
В конце урока приводятся типовые ошибки, возникающие при отладке программы.
Как Решать Задачи По Программированию
Наверное, у многих новичков бывало такое, когда ты смотришь решение какой-то задачи в Интернете или на уроке, читаешь чужой код и кажется что всё максимально просто и понятно. Но вот приступаю к решению такой же задачи самостоятельно, впадаешь в ступор. Что делать, с чего начать и т. д. Хотя казалась бы было всё было понятно. Знакомое чувство? С ним сталкивается каждый, кто только начинает изучать программирование. Поэтому сегодня я расскажу как решать зачади по программированию на языке Python, да и любом другом языке. Меня зовут Макс. Я один из авторов YouTube-канала PyLounge. Поехали!

Во-первых, ты должен чётко понимать, что от тебя требуется.
Как нельзя лучше сделать это тебе поможет декомпозиция. Декомпозиция — это когда ты разбиваешь одну большую сложную задачу на несколько мелких простых задача. При этом в момент дробления задачи не пытайся думать о программной реализации и программировании вообще. Старайся думать как ТЫ бы решал эту задачу, ты сам, будучи человеком. Опиши свои человеческие действия на каждом этапе. Перед этим вдумчиво прочитай текст задачи. Можно даже читать вслух. Часто проговаривание вслух помогает восприятию. И начинай декомпозировать с человеческой точки зрения.
Допустим перед нами стоит задача:
Написать функцию, которая получает из текстового файла словарь с настройками графики для игры.
Файл имеет следующий вид:

Начинаем смотреть на задачу глазами обычного человека. Вот у меня на Рабочем столе лежит текстовый файл. Чтобы мне прочитать содержимое файла его надо открыть. Соответственно это и есть первый пункт наше алгоритма — Открыть файл.
Далее я глазами вижу первую строчку файла. Здесь через пробел записаны два слова. Так как в файле записаны настройки графики то, очевидно, в каждой строчке хранится пара «название опции — её значение». Например, Разрешение 1920×1080. Соответственно я, будучи человеком, мысленно читаю первую строчку. Дальше мне нужно отделить «ключ настройки» от её значения. Как я будучи человеком понимаю, что в этой строчке два разных слова? Как я понимаю, что здесь не одно слово? Слова разделены между собой пробелами. Значит слово до пробела ключ, после значение. Это и есть следующий этап нашего алгоритма — читаем строку и делим её, за разделитель принимаем символ пробела. Затем первую половину строки заносим в ключ, вторую в значение.
Далее я будучи человеком, опускаю взгляд на следующую строку и повторяю описанное выше действие. Потом следующую и следующую. До тех пор, пока в файле не закончатся строки. Это и есть следующий шаг — по очереди обрабатывать каждую строчку из файла.
Теперь у меня в голове (или в переменной типа dict (словарь)) имеется вся нужная информация. По аналогии с функцией мы возвращаем словарь с данными. Потом я закрываю файл. Вот у нас и есть по сути готовый алгоритм:
1. Открыть файл.
2. Читаем строку из файла.
3. Делим её на две части через символ пробела.
4. Записываем первую часть строки в «ключ», а второю в «значение ключа» (например, ключ vsync — значение ключа off).
5. Аналогичным образом по очереди обрабатываем каждую следующую строку. Пока строчки в файл не кончатся.
6. Закрываем файл.
7. Сообщаем результат.
Можно для себя набросать псевдокод. То есть описание каждого шага алгоритма не на конкретно языке программирования, а абстрактно, на русском. Также неплохим вариантом может являться нарисовать блок-схему.

Псевдокод — это изложенные простым языком шаги алгоритма. Иными словами, это пошаговый план решения задачи. Если вы и так чётко понимаете процесс или задача относительно простая, то псевдокод и схему можно пропустить.
Теперь когда у нас имеется алгоритм, надо задать себе два вопроса:
1. Что мы имеем на вход (входящие данные).
2. Что мы имеем на выходе.
Снова смотри с позиции обычного человека. Чтобы я, будучи человеком, смог открыть какой-то файл и прочитать его, я должен знать где он лежит. Значит на вход мы и наша функция получает путь до файла.
Также в условии уже сказано, что мы должны сформировать словарь настроек. Значит словарь с ключами и значениями (куда сохраняются данные из файла) мы и должны вернуть из функции (вывести результат).
Теперь пытаемся переложить это на программный код. Также построчно всё проговаривая:
import os def read_settings_file(file_name): settings = dict() file = open(file_name, 'r') for row in file.readlines(): key, value = row.split(' ') settings[key] = value file.close() return settings print(read_settings_file('D://game_settings.txt')
Очень важно давать осмысленные и понятные названия переменным и функция. Это помогает делать код более читаемым и ты сам не запутаешься, если откроешь его спустя неделю. Рекомендую посмотреть наше видео «4 Совета Которые Помогут Сделать Твой Код Лучше».
Также стоит подумать, какие ошибки у нас могут возникнуть. Опять таки, задаём себе вопросы, например:
1. Что делать если файл не будет существовать?
Надо сделать проверку, добавить обработку такой ситуации.
2. Что случится если структура файла будет другой?
3. Кодировка файла будет нестандартной?
Нужно придумать как можно больше таких вопросов. И ответить на каждый из них, реализовав программное решение с помощью исключений, сообщений об ошибках и т.д.
Теперь когда у нас есть рабочее решение на руках, надо подумать, как его можно улучшить. То есть надо провести рефакторинг кода и сделать решение более эффективным.
Рефакторинг — это процесс улучшения кода, когда мы переписываем какие-то участки кода, которые можно сделать лучше.
При рефакторинге можно задавать себе следующие вопросы:
1. Можно ли получить этот результат как-то иначе? Какие еще подходы есть?
2. Понятно ли это решение с первого взгляда?
3. Можно ли использовать результат или метод для какой-то другой задачи?
4. Можно ли улучшить производительность решения?
5. Как эту задачу решают другие люди?
Никогда не пренебрегай внутренним диалогом с собой. Составляй план, блок-схему и т. д. Многие люди не делают этого, им кажется, что это бесполезная трата времени. Но на самом деле именно в этом и кроется ключевой момент в решении любой задачи.
В нашем случае мы могли бы работать с файлом через менеджер контекста, чтобы явно не вызывать функцию close () и метод readlines (). И применить к значением настроек функцию strip (), что бы не оставлять в строке символы переноса, табуляции и т. д. В случае с Python можно ещё и аннотации типов добавить:
from typing import Optional, Dict import os def read_settings_file(file_name:str) -> Optional[str]: if not os.path.exists(file_name): return None settings:Dict[str, str] = dict() with open(file_name, 'r') as file: for row in file: key, value = row.split(' ') settings[key] = value.strip() return settings print(read_settings_file('D://game_settings.txt')
К слову, очень важно смотреть, как другие решали подобную задачу. Так читая чужой код вы набираетесь опыта и вырабатываете надсмотренность. В чужом коде можно подсмотреть интересные решения, которые затем взять себе на вооружение.
Я в своё время очень часто смотрел чужие решения, сравнивал их со своим и это сильно мне помогло. Главное не смотреть ответ сразу) А именно сравнивать своё решение с чужим, если сам ну никак не можешь сделать.
Я привел пример простой задачи. Но более сложная задача будет отличаться лишь количеством этапов и инструментами, которые будет необходимо применить.
Запомните, умение решать задачи — это навык. Чем больше практики, тем лучше вам это будет удаваться. Если вы хотите много раз подтягиваться, то надо подтягиваться. Если вы хотите научиться быстро бегать, то надо бегать. Если вы хотите научиться решать задачи по программированию, то надо решать задачи. Истина всегда на поверхности.
Также есть чуть более подробная видеоверсия этой статьи на YouTube: