Ниже 30 задач по Python для начинающих с решениями: от ввода и вывода до словарей и функций. Задачи разбиты на пять уровней. У каждой есть условие, код и запуск с выводом программы. Весь код мы прогнали в Python 3.14, так что ваш результат совпадёт с нашим, если решение верное.
Если Python ещё не установлен, начните с инструкции как скачать и установить Python. Самые первые строки кода разобраны в статье про Hello World и ещё четыре простых примера.
Чтобы задачи превратились в навык, решайте их в таком порядке:
- Прочитайте условие и попробуйте решить сами, прежде чем смотреть код. Двадцать минут без подсказки дают больше, чем десять прочитанных решений.
- Запустите своё решение на данных из блока «Запуск» и сравните вывод.
- Сломайте программу нарочно: введите букву вместо числа, ноль, пустую строку. Посмотрите, что произойдёт.
- Через пару дней решите ту же задачу заново, не подглядывая.
Писать код можно в любом редакторе. Для старта удобен VS Code, а как создать в нём файл и запустить его, рассказано в отдельной инструкции.
Уровень 1: ввод, вывод и арифметика

Первые шесть задач о том, с чего начинается любая программа: получить данные от человека, посчитать и показать результат. Здесь пригодятся input(), print() и операторы // и %. Если знаки //, % и ** пока путаются, откройте шпаргалку по операторам Python.
Задача 1: приветствие по имени
Программа спрашивает имя и здоровается с человеком.
name = input("Как вас зовут? ")
print(f"Привет, {name}!")
Запуск:
Как вас зовут? Анна
Привет, Анна!
Тренирует ввод и f-строки. Фигурные скобки внутри f"…" подставляют значение переменной прямо в текст.
Задача 2: сумма и среднее трёх чисел
Человек вводит три целых числа в одну строку через пробел. Нужно вывести их сумму и среднее с точностью до сотых.
a, b, c = map(int, input("Три числа через пробел: ").split())
total = a + b + c
print("Сумма:", total)
print("Среднее:", round(total / 3, 2))
Запуск:
Три числа через пробел: 4 8 16
Сумма: 28
Среднее: 9.33
input() всегда возвращает строку. split() режет её по пробелам, а map(int, …) превращает каждый кусок в число.
Задача 3: минуты в часы и минуты
Дано число минут. Выведите, сколько это часов и минут.
minutes = int(input("Минут: "))
hours, rest = divmod(minutes, 60)
print(f"{hours} ч {rest} мин")
Запуск:
Минут: 135
2 ч 15 мин
divmod(a, b) за один вызов отдаёт пару из целой части и остатка, то есть то же, что a // b и a % b.
Задача 4: градусы Цельсия в Фаренгейты
Переведите температуру из градусов Цельсия в градусы Фаренгейта по формуле F = C × 9 / 5 + 32.
c = float(input("Градусы Цельсия: "))
f = c * 9 / 5 + 32
print(f"{c} °C = {f} °F")
print(f"{c} °C = {f:.1f} °F")
Запуск:
Градусы Цельсия: 36.6
36.6 °C = 97.88000000000001 °F
36.6 °C = 97.9 °F
Первая строка вывода показывает, как дробные числа хранятся в памяти: появляется хвост из нулей и единицы. Почему так, разобрано в учебнике Python. Формат :.1f оставляет один знак после точки.
Задача 5: цифры трёхзначного числа
Дано трёхзначное число. Выведите его цифры по отдельности и их сумму, не превращая число в строку.
n = int(input("Трёхзначное число: "))
a = n // 100
b = n // 10 % 10
c = n % 10
print("Цифры:", a, b, c)
print("Сумма цифр:", a + b + c)
Запуск:
Трёхзначное число: 472
Цифры: 4 7 2
Сумма цифр: 13
Классика школьной информатики. Целочисленное деление на 10 отбрасывает последнюю цифру, остаток от деления на 10 её достаёт.
Задача 6: обмен значений двух переменных
Поменяйте местами значения переменных a и b без третьей переменной.
a = 5
b = 9
a, b = b, a
print("a =", a, "b =", b)
Запуск:
a = 9 b = 5
В Python обмен делается одной строкой: справа собирается пара значений, слева она раскладывается обратно по именам.
Уровень 2: условия if, elif и else
Во второй группе программа начинает выбирать, что делать. Главное здесь порядок проверок: Python идёт по веткам сверху вниз и останавливается на первой подходящей.
Задача 7: чётное или нечётное число
Напишите программу, которая определяет, является число чётным или нечётным.
n = int(input("Число: "))
if n % 2 == 0:
print(n, "чётное")
else:
print(n, "нечётное")
Запуск:
Число: -7
-7 нечётное
Решение работает и для отрицательных чисел: в Python остаток от деления получает знак делителя, поэтому -7 % 2 равно 1.
Задача 8: наибольшее из трёх чисел без max()
Найдите наибольшее из трёх чисел, не используя встроенную функцию max().
a, b, c = map(int, input("Три числа: ").split())
biggest = a
if b > biggest:
biggest = b
if c > biggest:
biggest = c
print("Наибольшее:", biggest)
print("Проверка через max():", max(a, b, c))
Запуск:
Три числа: 12 47 3
Наибольшее: 47
Проверка через max(): 47
Приём «запомнить лучшего и сравнивать с ним остальных» потом пригодится в задачах на списки.
Задача 9: високосный год
Определите, високосный ли год. Год високосный, если делится на 4, но годы, кратные 100, високосные только тогда, когда делятся ещё и на 400.
import calendar
year = int(input("Год: "))
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
print(year, "високосный")
else:
print(year, "обычный")
print("Проверка calendar.isleap:", calendar.isleap(year))
Запуск:
Год: 1900
1900 обычный
Проверка calendar.isleap: False
1900 год делится на 4, но не високосный: он кратен 100 и не кратен 400. Свой ответ удобно сверять с функцией calendar.isleap() из стандартной библиотеки.
Задача 10: оценка по баллам
Переведите баллы от 0 до 100 в оценку. От 85 баллов ставим «отлично», от 70 «хорошо», от 50 «удовлетворительно», ниже «неудовлетворительно». Шкала условная, её легко поменять.
score = int(input("Баллы (0–100): "))
if score >= 85:
grade = "отлично"
elif score >= 70:
grade = "хорошо"
elif score >= 50:
grade = "удовлетворительно"
else:
grade = "неудовлетворительно"
print("Оценка:", grade)
Запуск:
Баллы (0–100): 73
Оценка: хорошо
Если поставить проверку score >= 50 первой, все 73 балла превратятся в «удовлетворительно». Порядок elif здесь решает всё.
Задача 11: какой это треугольник
Даны три стороны. Определите, существует ли треугольник, и если да, то равносторонний он, равнобедренный или разносторонний.
a, b, c = sorted(map(float, input("Стороны через пробел: ").split()))
if a + b <= c:
print("Такого треугольника нет")
elif a == b == c:
print("Равносторонний")
elif a == b or b == c:
print("Равнобедренный")
else:
print("Разносторонний")
Запуск:
Стороны через пробел: 5 5 8
Равнобедренный
Сортировка сторон упрощает проверку: достаточно сравнить сумму двух меньших с наибольшей.
Задача 12: калькулятор на четыре действия
Программа получает два числа и знак операции и печатает результат. Деление на ноль обрабатывается отдельно.
a = float(input("Первое число: "))
op = input("Операция (+ - * /): ")
b = float(input("Второе число: "))
if op == "+":
print(a + b)
elif op == "-":
print(a - b)
elif op == "*":
print(a * b)
elif op == "/":
if b == 0:
print("На ноль делить нельзя")
else:
print(a / b)
else:
print("Неизвестная операция")
Запуск:
Первое число: 10
Операция (+ - * /): /
Второе число: 0
На ноль делить нельзя
Без проверки b == 0 программа упала бы с ошибкой ZeroDivisionError. Полезная привычка: думать о плохом вводе сразу.
Уровень 3: циклы for и while

Третья группа про повторение. for нужен, когда число повторов известно заранее. while крутится, пока выполняется условие. Подробнее о нём и его ловушках рассказано в статье про цикл while в Python.
Задача 13: таблица умножения
Выведите таблицу умножения для введённого числа от 1 до 10.
n = int(input("Число: "))
for i in range(1, 11):
print(f"{n} × {i} = {n * i}")
Запуск:
Число: 7
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63
7 × 10 = 70
range(1, 11) даёт числа от 1 до 10: правая граница в диапазон не входит.
Задача 14: через сколько лет вклад удвоится
На счёте 100 000 ₽, каждый год сумма растёт на 10 %. Через сколько лет она впервые станет не меньше 200 000 ₽?
money = 100_000
years = 0
while money < 200_000:
money = money * 1.1
years += 1
print("Лет до удвоения:", years)
print(f"На счёте: {money:,.0f} ₽".replace(",", " "))
Запуск:
Лет до удвоения: 8
На счёте: 214 359 ₽
Здесь заранее неизвестно, сколько раз крутить цикл, поэтому while. Подчёркивание в 100_000 Python игнорирует, оно нужно только для читаемости.
Задача 15: факториал числа
Посчитайте факториал n, то есть произведение всех чисел от 1 до n.
import math
n = int(input("n = "))
result = 1
for i in range(2, n + 1):
result *= i
print(f"{n}! = {result}")
print("math.factorial:", math.factorial(n))
Запуск:
n = 10
10! = 3628800
math.factorial: 3628800
Свой цикл полезно сверять с готовой функцией math.factorial(): если ответы разошлись, ошибка в границах range.
Задача 16: простое ли число
Определите, простое число или составное.
n = int(input("Число: "))
is_prime = n > 1
for d in range(2, int(n ** 0.5) + 1):
if n % d == 0:
is_prime = False
break
print(n, "простое" if is_prime else "составное")
Запуск:
Число: 97
97 простое
Делители достаточно искать до квадратного корня из n: если у числа есть делитель больше корня, парный ему окажется меньше. break останавливает цикл на первом найденном делителе. В последней строке стоит тернарный оператор, то есть if-else в одну строку.
Задача 17: угадай число
Компьютер загадывает число от 1 до 100, человек угадывает, программа подсказывает «больше» или «меньше» и в конце считает попытки.
import random
secret = random.randint(1, 100)
tries = 0
while True:
guess = int(input("Ваш вариант: "))
tries += 1
if guess < secret:
print("Больше")
elif guess > secret:
print("Меньше")
else:
print(f"Угадали за {tries} попыток")
break
Запуск:
Ваш вариант: 50
Меньше
Ваш вариант: 25
Меньше
Ваш вариант: 12
Меньше
Ваш вариант: 6
Больше
Ваш вариант: 9
Меньше
Ваш вариант: 7
Больше
Ваш вариант: 8
Угадали за 7 попыток
Число каждый раз новое, выше один из запусков. Если каждый раз называть середину оставшегося отрезка, хватает семи попыток: 2 в седьмой степени уже больше 100.
Задача 18: числа Фибоначчи
Выведите первые n чисел Фибоначчи: каждое следующее равно сумме двух предыдущих.
n = int(input("Сколько чисел: "))
a, b = 0, 1
for _ in range(n):
print(a, end=" ")
a, b = b, a + b
print()
Запуск:
Сколько чисел: 12
0 1 1 2 3 5 8 13 21 34 55 89
Параметр end=" " оставляет вывод в одной строке. Знак _ вместо имени переменной показывает, что номер шага нам не нужен.
Задача 19: пирамида из звёздочек
Нарисуйте пирамиду высотой h из символов «*».
h = int(input("Высота: "))
for i in range(1, h + 1):
print(" " * (h - i) + "*" * (2 * i - 1))
Запуск:
Высота: 5
*
***
*****
*******
*********
Строку можно умножить на число: "*" * 3 даёт три звёздочки. На строке i стоит 2i − 1 звёздочек и h − i пробелов слева.
Уровень 4: строки и списки
В четвёртой группе данных становится больше одного значения. Здесь тренируются срезы, перебор и методы строк и списков. Как сложить все элементы списка разными способами, мы разбирали в инструкции про сумму списка.
Задача 20: палиндром
Проверьте, читается ли фраза одинаково слева направо и справа налево. Пробелы, знаки препинания и регистр не учитываются.
text = input("Фраза: ")
clean = "".join(ch for ch in text.lower() if ch.isalnum())
if clean == clean[::-1]:
print("Палиндром")
else:
print("Не палиндром")
Запуск:
Фраза: А роза упала на лапу Азора
Палиндром
Срез [::-1] разворачивает строку. isalnum() оставляет только буквы и цифры.
Задача 21: сколько в строке гласных
Посчитайте гласные буквы в строке, русские и латинские.
text = input("Строка: ")
vowels = "аеёиоуыэюяaeiou"
count = 0
for ch in text.lower():
if ch in vowels:
count += 1
print("Гласных:", count)
Запуск:
Строка: Привет, Python!
Гласных: 3
Латинскую y мы в список гласных не включили, поэтому в слове Python нашлась одна гласная, а всего их три. Какие буквы считать гласными, решает программист, и это стоит оговорить в условии.
Задача 22: самое длинное слово
Найдите самое длинное слово в предложении.
words = input("Предложение: ").split()
longest = max(words, key=len)
print("Самое длинное слово:", longest, f"({len(longest)} букв)")
Запуск:
Предложение: Программирование начинается с маленьких задач
Самое длинное слово: Программирование (16 букв)
Параметр key=len говорит функции max() сравнивать слова по длине, а не по алфавиту. Знаки препинания split() оставит приклеенными к словам. Все параметры max() описаны в документации, а как в ней ориентироваться, мы рассказывали в статье про сайт python.org.
Задача 23: второе по величине число
Найдите второе по величине значение в списке. Повторы не считаются.
numbers = [7, 3, 9, 9, 2, 5]
unique = sorted(set(numbers))
print("Второе по величине:", unique[-2])
Запуск:
Второе по величине: 7
Если просто отсортировать список, вторым с конца окажется ещё одна девятка. Множество set() убирает повторы.
Задача 24: убрать повторы и сохранить порядок
Удалите из списка повторяющиеся элементы так, чтобы остальные остались в исходном порядке.
items = ["яблоко", "груша", "яблоко", "слива", "груша"]
result = list(dict.fromkeys(items))
print(result)
Запуск:
['яблоко', 'груша', 'слива']
Множество тоже убирает повторы, но оно неупорядочено. Словарь хранит ключи в порядке добавления, поэтому dict.fromkeys() решает задачу в одну строку.
Задача 25: слить два отсортированных списка
Даны два списка, отсортированных по возрастанию. Соберите из них один отсортированный список, не вызывая sort().
a = [1, 4, 9, 12]
b = [2, 3, 10]
i = j = 0
merged = []
while i < len(a) and j < len(b):
if a[i] <= b[j]:
merged.append(a[i])
i += 1
else:
merged.append(b[j])
j += 1
merged += a[i:] + b[j:]
print(merged)
print("Совпадает с sorted():", merged == sorted(a + b))
Запуск:
[1, 2, 3, 4, 9, 10, 12]
Совпадает с sorted(): True
Это приём «двух указателей»: на каждом шаге берём меньший из двух текущих элементов. На нём построена сортировка слиянием.
Уровень 5: словари, множества и функции
Последняя группа ближе к настоящим программам: данные лежат в словарях, повторяющийся код уходит в функции. Когда эти задачи покажутся простыми, попробуйте проект побольше, например шифр Цезаря на Python: там пригодятся и строки, и словари, и функции.
Задача 26: частота слов в тексте
Посчитайте, сколько раз встречается каждое слово, и выведите два самых частых.
from collections import Counter
text = "кот ест рыбу кот спит рыба спит"
counts = {}
for word in text.split():
counts[word] = counts.get(word, 0) + 1
print(counts)
print(Counter(text.split()).most_common(2))
Запуск:
{'кот': 2, 'ест': 1, 'рыбу': 1, 'спит': 2, 'рыба': 1}
[('кот', 2), ('спит', 2)]
counts.get(word, 0) возвращает 0, если слова ещё нет в словаре. Counter из модуля collections делает то же одной строкой, а слова с одинаковой частотой ставит в порядке первого появления.
Задача 27: общие элементы двух списков
Найдите числа, которые есть в обоих списках, только в первом и хотя бы в одном.
a = [1, 2, 3, 4, 5, 6]
b = [4, 5, 6, 7, 8]
print("Общие:", sorted(set(a) & set(b)))
print("Только в первом:", sorted(set(a) - set(b)))
print("Хотя бы в одном:", sorted(set(a) | set(b)))
Запуск:
Общие: [4, 5, 6]
Только в первом: [1, 2, 3]
Хотя бы в одном: [1, 2, 3, 4, 5, 6, 7, 8]
Операции над множествами повторяют школьные: & даёт пересечение, - разность, | объединение.
Задача 28: функция проверки анаграмм
Напишите функцию, которая проверяет, состоят ли два слова из одних и тех же букв.
def is_anagram(first, second):
letters1 = sorted(first.lower().replace(" ", ""))
letters2 = sorted(second.lower().replace(" ", ""))
return letters1 == letters2
print(is_anagram("Апельсин", "спаниель"))
print(is_anagram("кот", "ток"))
print(is_anagram("кот", "кит"))
Запуск:
True
True
False
Отсортированные буквы двух анаграмм совпадают. Функция возвращает True или False, а печатает результат уже вызывающий код.
Задача 29: функция суммы от 1 до n
Создайте функцию, которая вычисляет сумму всех чисел от 1 до n, где n передаётся как параметр.
def sum_to_n(n):
total = 0
for i in range(1, n + 1):
total += i
return total
print(sum_to_n(100))
print("По формуле:", 100 * 101 // 2)
Запуск:
5050
По формуле: 5050
Цикл и формула n × (n + 1) / 2 дают одно и то же. Сверка двумя способами быстро показывает, верны ли границы цикла.
Задача 30: мини-проект «учёт расходов»
Человек вводит расходы в формате «категория сумма», пустая строка завершает ввод. Программа выводит суммы по категориям от большей к меньшей и общий итог.
def add_expense(book, line):
category, amount = line.split()
book[category] = book.get(category, 0) + int(amount)
book = {}
while True:
line = input("Расход (категория сумма): ")
if not line:
break
add_expense(book, line)
for category, total in sorted(book.items(), key=lambda item: item[1], reverse=True):
print(f"{category}: {total} ₽")
print("Всего:", sum(book.values()), "₽")
Запуск:
Расход (категория сумма): еда 450
Расход (категория сумма): транспорт 120
Расход (категория сумма): еда 300
Расход (категория сумма): кафе 680
Расход (категория сумма):
еда: 750 ₽
кафе: 680 ₽
транспорт: 120 ₽
Всего: 1550 ₽
Здесь собрано всё сразу: цикл while, словарь, функция и сортировка по значению через key=lambda. Следующий шаг: сохранять расходы в файл, чтобы они не пропадали после закрытия программы.
Частые ошибки новичка в этих задачах

Большая часть ошибок в первых задачах повторяется у всех. Если программа ведёт себя странно, сначала проверьте эту таблицу.
| Что видите | Почему так | Что делать |
|---|---|---|
"2" + "3" даёт 23, а не 5 |
input() возвращает строку, и плюс склеивает строки |
Обернуть ввод в int() или float() |
Ошибка IndentationError |
Сбит отступ или смешаны пробелы и табуляция | Ставить четыре пробела на уровень, как советует PEP 8, и включить в редакторе показ невидимых символов |
| Цикл делает на один шаг меньше | range(1, n) не включает n |
Писать range(1, n + 1) |
0.1 + 0.2 == 0.3 даёт False |
Дробные числа хранятся в двоичном виде с погрешностью | Сравнивать через round() или math.isclose() |
round(2.5) даёт 2, а не 3 |
При равном расстоянии round() округляет к чётному числу | Для денег и отчётов брать модуль decimal с нужным правилом округления |
| Программа падает на нуле или пустой строке | Нет проверки ввода | Проверять данные до вычисления, как в задаче 12 |
Ещё одна частая ловушка: менять список прямо во время перебора. Элементы «проскакивают», и результат выходит неполным.
Решение: собирать новый список из нужных элементов, как в задаче 24.
Где решать задачи по Python дальше
Тридцати задач хватит, чтобы почувствовать основы. Дальше нужен поток новых задач и проверка, которую нельзя обмануть. На площадках ниже решение проверяет программа.
| Площадка | Язык | Что там | Как сдаётся решение |
|---|---|---|---|
| Информатикс | русский | Задачи по темам, от ввода-вывода до динамического программирования, и курс Д. П. Кириенко «Программирование на языке Python» школы 179 | Отправка в систему после входа, у части задач есть разборы |
| acmp.ru | русский | «Школа программиста»: архив из 1000 задач с темами и сложностью, раздел «Новичкам» | Проверяющая система, среди компиляторов Python 3.13.8 |
| Timus Online Judge | русский, английский | Архив задач, по описанию сайта, в основном с соревнований Уральского федерального университета, уральских чемпионатов и отборов ICPC | Автоматическая проверка, доступны Python 3.12 и PyPy 3.10 |
| pyTask | русский | 168 задач на Python с фильтром от «Начинающий» до «Эксперт» и тегами: строки, списки, словари, ООП | Часть задач помечена PREMIUM, у решивших есть рейтинг |
| Codewars | английский | Задачи-«ката» на технику и логику, от простых до трудных | Тесты запускаются в браузере, после решения открываются чужие решения |
| Exercism | английский | 146 упражнений и 17 тем Python, бесплатно | Автоматический разбор кода и наставники |
| CheckiO | английский | Задачи в виде игры с картой миссий, уровни Easy, Normal и Advanced | Сайт открывается не всегда: 15 октября 2026 года py.checkio.org не отвечал ни из России, ни из-за рубежа, при этом главная checkio.org работала |
| Edabit | английский | Больше 2500 задач на Python, фильтр сложности начинается с Very Easy | Кнопка Check в редакторе |
| HackerRank | английский | Раздел Python начинается с задачи «Hello, World!», у задач видны баллы и доля решивших | Решение в редакторе на сайте |
| Project Euler (перевод на русский) | английский, русский перевод | 1004 задачи на стыке математики и программирования | Решать можно на любом языке |
| Advent of Code | английский | Адвент-календарь коротких головоломок, новые выходят в декабре | Ответ считается по вашим входным данным. Из России сайт открывается не всегда: в нашей проверке он ответил только со второй попытки |
Порядок простой: начните с русскоязычных задачников, где условия понятны без словаря, а к английским площадкам переходите, когда базовые темы перестанут пугать. Заодно подтянется технический английский, без которого документацию Python не прочитать.
Как мы отбирали площадки
Мы взяли 17 сайтов, которые чаще всего советуют начинающим, и 14 октября 2026 года открыли каждый с сервера в России. Смотрели три вещи: открывается ли сайт, есть ли на нём задачи для начинающих и как сдаётся решение. В таблицу попали только факты, которые видны на самих страницах: число задач, уровни, версии Python.
Шесть сайтов не вошли. LeetCode и Codeforces ответили нашему серверу кодом 403: так сайты обычно отсекают автоматические запросы, и в браузере они, скорее всего, откроются, но проверить их мы не смогли. Новая версия PythonTutor на ru.pythontutor.ru не ответила вовсе. Яндекс Контест служит площадкой для соревнований и занятий, которые проводят школы и вузы. CodinGame учит через игры-соревнования. Code.mu в первую очередь учебник по десяткам технологий, задачник там идёт приложением.
Данные в таблице актуальны на 14 октября 2026 года. Сайты закрываются и меняют условия, поэтому перед регистрацией загляните на страницу площадки.
Где освоить Python системно
Задачи хорошо закрепляют синтаксис, но сами по себе не складываются в профессию. Дальше нужны проекты, работа с файлами и базами данных, ООП, тесты и разбор кода с наставником. С ООП можно начать прямо сейчас: в статье про классы и объекты те же идеи показаны на Python.
Если вы целитесь в работу, посмотрите, как стать Python-разработчиком с нуля, и сравните программы обучения в каталоге курсов по Python. Там собраны программы разных школ, и их удобно сравнить по цене и содержанию.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Профессия «Python-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 161 200 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 118 666 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Программирование на Python ПРО Перейти на сайт курса | 119 600 ₽ | - | 17 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




