Урок 1.1. Что такое Python и где живёт код

Шаги урока (Stepik): Видео → Текст → Тест → Тест → Текст → Сопоставление → Итог.


Шаг 1. [ВИДЕО] Язык, на котором говорят с компьютером

Хронометраж ~2:30. Формат: скринкаст + голос за кадром. Цель: заинтересовать, без кода.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:15Заставка курса«Это курс, на котором вы научитесь писать программы на Python. Уже через несколько занятий вы напишете свою первую программу – и она заработает.»
0:15–0:50Коллаж: сайт, игра, график, чат-бот«Python – это язык, на котором человек объясняет компьютеру, что делать. На нём пишут сайты, игры, чат-ботов, программы для анализа данных и для искусственного интеллекта. Это не учебная игрушка: им пользуются настоящие инженеры и учёные.»
0:50–1:30Рядом два текста: длинный на другом языке и короткий на Python, оба печатают «Привет»«Почему мы начинаем именно с Python? Потому что его легко читать. Перед вами программа, которая выводит слово на экран: слева – на другом языке, справа – на Python. Питон короче и понятнее. А значит, меньше времени уходит на технические детали и больше – на саму задачу.»
1:30–2:10Экран PyCharm: вставляем готовый код, нажимаем Run, внизу появляется результат«Программу пишут в специальной программе – среде разработки. Мы будем работать в PyCharm. Это выглядит так: вставляем готовый код, нажимаем «Запустить» – и компьютер выполняет то, что мы попросили. А как код устроен внутри, начнём разбирать со следующего урока.»
2:10–2:30Чек-лист урока, кнопка «Дальше»«В этом уроке мы разберёмся, что такое Python и где живёт код. А в следующем – установим PyCharm и запустим вашу первую программу.»
Заметка для записи: код на экране набирать живьём (виден процесс), шрифт крупный (≥ 18 pt), тема PyCharm – светлая для контраста.

Шаг 2. [ТЕКСТ] Что такое Python?

Python – современный язык программирования. На нём пишут самые разные программы: от простых учебных задач до больших настоящих проектов.

На Python создают:

  • сайты и веб-сервисы;
  • игры и учебные проекты;
  • чат-ботов;
  • программы для анализа данных;
  • программы для искусственного интеллекта.

Python часто выбирают, чтобы начать программировать: его код легко читать, многие команды понятны даже новичку. Но это не «детский» язык – им пользуются инженеры, аналитики и учёные по всему миру.

Главное удобство: на Python можно быстро превратить идею в работающую программу. Меньше внимания уходит на сложные технические детали – больше на саму задачу: что программа должна получить на вход и какой результат выдать.

В этом курсе мы будем двигаться шаг за шагом: сначала научимся запускать простые команды, затем – писать программы, которые задают вопросы, считают, принимают решения, повторяют действия и обрабатывают данные.


Шаг 3. [ТЕСТ · один ответ] B1-04

Где здесь команда на языке Python?

  • print("Привет!")
  • ◯ Компьютер, выведи, пожалуйста, слово «Привет»
  • ◯ Просто текст: Привет!

Подсказка при ошибке: язык программирования – это точные команды по своим правилам (со скобками и кавычками), а не просьба обычными словами и не просто текст.


Шаг 4. [ТЕСТ · несколько ответов] B1-05

Что из этого можно сделать с помощью Python? (выберите все верные варианты)

  • ☑ Сделать сайт или чат-бота ✔
  • ☑ Посчитать числа и построить по ним график ✔
  • ☑ Запрограммировать игру ✔
  • ☐ Полить цветы на подоконнике
  • ☐ Помыть чашку

Подсказка при ошибке: Python создаёт программы – то, что живёт внутри компьютера (сайты, игры, расчёты). Дела в реальном мире сам по себе он не делает.


Шаг 5. [ТЕКСТ] Где живёт код?

Мы сказали, что язык программирования нужен, чтобы «разговаривать» с компьютером. Но компьютер – необычный собеседник: голосом с ним не поговоришь, команды нужно передавать очень точно. Поэтому придумали специальные программы – в них пишут код, запускают его, смотрят результат и находят ошибки.

Код можно писать в разных местах:

  • простые текстовые редакторы – в них можно набрать код как обычный текст, но они почти не помогают;
  • онлайн-среды, например Google Colab – сайты, где код пишут и запускают прямо в браузере, ничего не устанавливая (пригодятся как запасной вариант, если PyCharm установить не получилось);
  • редакторы кода, например VS Code – подсвечивают код и подсказывают;
  • среды разработки, например PyCharm – мощные программы, созданные специально для работы с кодом.

В таких программах код подсвечивается цветами: сразу видно, где команда, где текст, где число. А если забыть кавычку или скобку – среда подскажет, что что-то не так.

В этом курсе мы работаем в PyCharm. Его удобно представлять как рабочее место программиста: здесь создают файлы, пишут команды на Python, запускают программы и проверяют результат. PyCharm создан специально для Python, поэтому он подсвечивает код цветом, подсказывает команды по мере набора и сразу показывает, где ошибка – таких удобных функций в нём много, и дальше в курсе мы будем ими пользоваться. В следующем уроке мы установим PyCharm и создадим первый проект.


Шаг 6. [СОПОСТАВЛЕНИЕ] B1-06

Соедините название с тем, что это на самом деле.

ПонятиеЧто это
PythonЯзык программирования – правила, по которым записывают команды
PyCharmПрограмма, в которой набирают код и нажимают «Запустить»
КодТекст программы – команды, которые мы написали

Эти три слова легко перепутать, а разница простая: Python – это на чём пишем (язык), PyCharm – где пишем и запускаем (программа), код – что мы написали. Дальше в курсе все три встречаются постоянно.


Шаг 7. [ТЕКСТ · Итог] Что мы поняли

  • Python – язык, которым человек объясняет компьютеру, что делать; на нём пишут сайты, игры, ботов, анализ данных и искусственный интеллект.
  • Его выбирают для старта, потому что код легко читать.
  • Код пишут в специальных программах. Наша – PyCharm, «рабочее место программиста».

Дальше: установим PyCharm и напишем первую программу.

Урок 1.2. Первый запуск: скопируй, вставь, запусти

Шаги: Видео → Текст (что ставим) → Текст (установка + запасной вариант) → Код (B1-01: первый запуск) → Численная задача (B1-02) → Итог.

Цель урока – почувствовать, как программа запускается: скопировать готовый код, вставить, нажать «Запустить» и посмотреть, что появилось. Как устроены команды – разберём в Блоке 2.
Наш основной инструмент – PyCharm. Если установить его не получается, в конце шага про установку есть онлайн-вариант (Google Colab) – тоже подойдёт.

Шаг 1. [ВИДЕО] Устанавливаем PyCharm и запускаем код

Хронометраж ~3:20. Экран компьютера, всё «вживую».

ВремяНа экранеГолос за кадром (дословно)
0:00–0:20Заставка урока«Сейчас установим PyCharm и запустим первую программу. Если что-то не пойдёт – под видео есть текст с запасными вариантами.»
0:20–1:10Установочный файл / сайт PyCharm → Community«Ставим бесплатную версию – Community. Файл с установкой можно скачать или взять у преподавателя – он легко пересылается.»
1:10–2:00Установщик: Next, галочки, Install«Запускаем установщик. Next. Отмечу ярлык на рабочий стол и «.py». Install – и ждём.»
2:00–2:40New Project → файл main.py«Открываем PyCharm, создаём новый проект и в нём файл main.py
2:40–3:20Вставляем готовый код, Run, в консоли результат«Берём готовый код из урока, копируем, вставляем в файл и жмём зелёную стрелку «Запустить». Внизу, в консоли, появляется результат. Что именно делает код, разберём позже – сейчас главное увидеть, что программа работает.»
Заметка для записи: показать установку целиком, без склеек. Скриншоты ниже ([СКРИНШОТ: …]) снять с этого же экрана.

Шаг 2. [ТЕКСТ] Что именно мы ставим

Мы ставим PyCharm Community Edition – это бесплатная среда разработки для Python. Платная версия Professional нам не нужна.

PyCharm – это «рабочее место программиста»: здесь удобно писать код, запускать программы и видеть ошибки.


Шаг 3. [ТЕКСТ] Установка по шагам

Windows (основной вариант)

  1. Запустите установочный файл PyCharm Community (мы прикладываем его к курсу; его же можно скачать с jetbrains.com/pycharm, столбец Community). [СКРИНШОТ: установочный файл]
  2. В установщике нажимайте Next; на шаге с галочками отметьте Create Desktop Shortcut и .py. [СКРИНШОТ: окно с галочками]
  3. Install → дождитесь окончания → запустите PyCharm.

macOS / Linux

macOS: откройте .dmg (Community) и перетащите PyCharm в Программы. Linux: распакуйте архив (Community) и запустите pycharm.sh из папки bin (или поставьте через JetBrains Toolbox).

Если PyCharm установить не получилось – запасной вариант

  • Сначала попробуйте установочный файл, приложенный к курсу: его можно переслать и установить без захода на сайт.
  • Если установить никак не выходит, воспользуйтесь онлайн-средой Google Colab (colab.research.google.com): код пишут и запускают прямо в браузере, ничего не устанавливая. Нужен только аккаунт Google. Это полноценный запасной вариант – все задания курса в нём решаются.
  • По возможности всё же ставьте PyCharm: с ним мы работаем в видео, и он удобнее для постоянной работы.

Шаг 4. [КОД] B1-01. Первый запуск

Условие. Сейчас вы запустите свою первую программу. Писать ничего не нужно – код уже готов, ваша задача его запустить.

  1. Откройте PyCharm → New Project → выберите папку → Create. [СКРИНШОТ: экран приветствия]
  2. Правой кнопкой по папке проекта → New → Python File → имя main. [СКРИНШОТ: создание файла]
  3. Скопируйте код задания и вставьте его в файл.
  4. Нажмите зелёную стрелку ▶ (она запускает программу). Внизу откроется консоль с результатом. [СКРИНШОТ: консоль с выводом]

Программа должна вывести такие строки:

Привет! Это моя первая программа на Python.
Я её запустил, и она работает.
Дальше я научусь писать такие программы сам.

Получилось? Вы только что запустили настоящую программу – пока не разбираясь, как она устроена. Это нормально: сначала пробуем, потом понимаем.

Шаблон кода (уже заполнен):

::code
print("Привет! Это моя первая программа на Python.")
print("Я её запустил, и она работает.")
print("Дальше я научусь писать такие программы сам.")

Тесты:

def generate():
    return ['']

def solve(dataset):
    return ("Привет! Это моя первая программа на Python.\n"
            "Я её запустил, и она работает.\n"
            "Дальше я научусь писать такие программы сам.")

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B1-01_hello.py. Подсказка: ничего не меняйте – просто нажмите «Запустить»/«Отправить».


Шаг 5. [ЧИСЛЕННАЯ ЗАДАЧА] B1-02. Что выведет программа?

Условие. Эта программа выглядит сложнее: в ней есть переменные, список и циклы. Но разбираться, как она работает, пока не нужно – просто вставьте её в редактор, запустите и впишите число, которое появилось в консоли.

numbers = [3, 8, 5, 2, 7]
total = 0
for x in numbers:
    total = total + x
biggest = numbers[0]
for x in numbers:
    if x > biggest:
        biggest = x
print(total + biggest)

Ответ: 33 Цель – привыкнуть запускать даже «страшный» на вид код и спокойно читать результат. Скоро вы сами научитесь писать такие программы.


Шаг 6. [ТЕКСТ · Итог] Что мы умеем

  • Установили PyCharm Community (а если не вышло – онлайн-вариант Google Colab).
  • Создали проект, вставили готовый код и запустили его.
  • Научились смотреть результат в консоли – даже у программы, которая выглядит сложной.

Дальше – урок 1.3: что делать, когда программа ломается.

Урок 1.3. Когда что-то ломается

Шаги: Видео → Текст (как читать ошибку) → Численная задача (B1-03) → Численная задача (B1-07) → Итог.

Ошибки будут у всех – это часть работы. Здесь научимся не пугаться сообщения об ошибке и находить строку, в которой Python споткнулся. Команды разберём в Блоке 2 – пока просто запускаем и читаем сообщения.

Шаг 1. [ВИДЕО] Ошибка – это подсказка

Хронометраж ~2:30. Скринкаст: запускаем код, ломаем его и читаем сообщение.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:20Рабочий код print("Привет, мир!"), запуск – всё хорошо«В прошлом уроке мы запустили готовую программу. Теперь нарочно её сломаем – и увидим, что это совсем не страшно.»
0:20–1:10Стираем закрывающую кавычку, запускаем → красное сообщение в консоли«Уберём одну кавычку и запустим. Внизу появилось красное сообщение – это ошибка. Программа не «сломалась навсегда»: Python просто говорит, что чего-то не понял.»
1:10–2:05Подсвечиваем в сообщении номер строки«Главное в сообщении – номер строки. Python показывает, где он споткнулся. Наша задача – найти эту строку и посмотреть, что в ней не так. Здесь – не хватает кавычки.»
2:05–2:30Возвращаем кавычку, запускаем – снова работает«Стоит вернуть кавычку – и программа снова работает. Видеть, где ошибка, – главный навык на старте. Дальше вы будете находить такие строки сами.»

Шаг 2. [ТЕКСТ] Как читать сообщение об ошибке

Когда программа не запускается, Python показывает сообщение об ошибке. Пугаться его не нужно – это подсказка. В нём есть две полезные вещи:

  • номер строки, где Python споткнулся;
  • тип ошибки (например, SyntaxError – «ошибка записи»).

Как читать сообщение об ошибке

Главное в сообщении – номер строки и тип ошибки.

Хитрый момент. Если забыли закрыть кавычку, Python ставит ^ там, где строка началась (под открывающей кавычкой), ведь конца он не нашёл. А закрывающую кавычку нужно дописать в конце строки.

Что делать: посмотреть на указанную строку и сравнить с тем, что в ней написано. Частые причины в начале:

  • забыли закрыть кавычку или скобку;
  • написали команду не в том регистре (Print вместо print);
  • случайно набрали русскую букву вместо латинской в команде.

Компьютер делает ровно то, что написано, а не то, что вы имели в виду – поэтому он и «придирается» к мелочам.


Шаг 3. [ЧИСЛЕННАЯ ЗАДАЧА] B1-03. В какой строке ошибка?

Условие. Вставьте программу в редактор и запустите. Python покажет ошибку. В какой строке ошибка? Впишите номер строки.

print("Привет!")
print("Как дела?)
print("Пока!")

Ответ: 2 Подсказка: запустите и посмотрите номер строки в сообщении; затем сравните строки глазами.


Шаг 4. [ЧИСЛЕННАЯ ЗАДАЧА] B1-07. И снова: в какой строке ошибка?

Условие. Ещё одна программа со «сломанной» строкой. Запустите её и впишите номер строки, которую укажет Python.

print("Меню на сегодня:)
print("Суп")
print("Чай")

Ответ: 1 Подсказка: ищите строку, где кавычка открылась, но не закрылась. Python укажет её номер в сообщении.


Шаг 5. [ТЕКСТ · Итог] Что мы умеем

  • Ошибка – это подсказка, а не провал.
  • В сообщении смотрим номер строки и тип ошибки.
  • Умеем найти строку, в которой Python споткнулся, – это главный навык на старте.

Дальше – Блок 2: начнём писать код сами – познакомимся с командой вывода print, переменными и вычислениями.

Урок 2.1. Вывод на экран: команда print

Шаги урока (Stepik): Видео → Текст (как работает print) → Текст (несколько значений) → Текст (комментарии) → Код (B2-01) → Численная (B2-02) → Численная (B2-08) → Итог.

В Блоке 1 вы запускали готовый код и читали ошибки. Теперь начинаем писать код сами – с самой частой команды Python. Она выводит текст на экран.

Шаг 1. [ВИДЕО] Учимся выводить текст

Хронометраж ~2:40. Скринкаст в PyCharm, код набираем живьём.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:20Пустой файл main.py«В прошлом блоке мы запускали готовую программу. Сегодня разберём команду, которая выводит текст на экран, – и напишем её сами.»
0:20–1:05Набираем print("Привет!"), Run, в консоли Привет!«Команда называется print – по-английски «печатать». В скобках, в кавычках, пишем текст. Запускаем – текст появляется в консоли. Кавычки обязательны: они говорят Python, что внутри – текст, а не команда.»
1:05–1:55Добавляем ещё две строки print(...); выполняются сверху вниз«Команд может быть несколько. Python выполняет их по очереди, сверху вниз – как пункты инструкции. Добавим вторую и третью строку: программа печатает их одну за другой.»
1:55–2:25print("Сумма:", 2 + 2)Сумма: 4«В скобках можно перечислить несколько значений через запятую – Python выведет их в одну строку через пробел. И заметьте: то, что без кавычек, Python считает – здесь он посчитал 2 + 2
2:25–2:40Пишем # моя первая программа над кодом«А это – комментарий, после решётки. Python его пропускает: он нужен человеку. Дальше – ваши задания.»
Заметка для записи: код набирать живьём (виден процесс), шрифт ≥ 18 pt, тема PyCharm – светлая для контраста.

Шаг 2. [ТЕКСТ] Как работает print

print() – команда «вывести на экран». То, что нужно показать, пишут в скобках. Текст всегда заключают в кавычки:

print("Привет, мир!")

Команд может быть несколько, и Python выполняет их по порядку, сверху вниз:

print("Привет!")
print("Меня зовут Лиза")
print("Мне нравится программировать")

Вывод:

Привет!
Меня зовут Лиза
Мне нравится программировать

Как Python выполняет программу – сверху вниз

Python читает команды по порядку, сверху вниз, и каждая печатает свою строку в консоль.


Шаг 3. [ТЕКСТ] Несколько значений в одной строке

В скобках можно перечислить несколько значений через запятую – Python выведет их в одну строку, разделив пробелом:

print("Привет,", "Лиза")

Вывод:

Привет, Лиза

Это удобно, когда рядом нужно показать текст и число:

print("Возраст:", 12)

Вывод:

Возраст: 12

Обратите внимание: "Возраст:" в кавычках – это текст, а 12 без кавычек – число. Разницу между текстом и числом мы подробно разберём в следующем уроке.


Шаг 4. [ТЕКСТ] Комментарии

Комментарии начинаются с #. Это заметки для человека – Python их не выполняет:

# приветствие
print("Здравствуйте!")   # это тоже комментарий

Комментарии помогают не забыть, что делает код, и подписать сложные места. На практике их пишут постоянно – даже опытные программисты, чтобы через месяц понять собственный код.

Комментарии удобны ещё в двух случаях:

  • отладка. Если программа ведёт себя странно, можно временно «выключить» строку – поставить перед ней #. Python её пропустит, и видно, в ней ли было дело:
  print("шаг 1")
  # print("шаг 2")   # временно отключили эту строку
  print("шаг 3")
  • сохранить старый вариант. Прежнюю версию строки можно не удалять, а закомментировать – вдруг ещё пригодится:
  # print("старый вариант")
  print("новый вариант")

Если пояснение длинное, не обязательно ставить # на каждой строке. Можно взять текст в тройные кавычки – Python не выполнит его как команду:

"""
Эта программа здоровается и называет имя.
Здесь можно в несколько строк пояснить, что и зачем.
"""
print("Здравствуйте!")

Шаг 5. [КОД] B2-01. Визитка

Условие. Выведите визитку – ровно три строки:

Имя: Лиза
Любимое число: 7
Любимый цвет: синий

Шаблон кода (Stepik «Code template»):

::code
# выведите три строки визитки

Тесты (вкладка «Тесты» → проверка кодом):

def generate():
    return ['']  # ввода нет – один пустой датасет

def solve(dataset):
    return "Имя: Лиза\nЛюбимое число: 7\nЛюбимый цвет: синий"

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B2-01_visitka.py. Подсказка при ошибке: проверьте двоеточия и пробелы – текст должен совпасть точь-в-точь.


Шаг 6. [ЧИСЛЕННАЯ ЗАДАЧА] B2-02. Найдите ошибку: простая

Условие. В этой короткой программе потеряна кавычка. Запустите её, посмотрите сообщение об ошибке и впишите номер строки, который укажет Python.

print("Привет, Лиза!)

Ответ: 1 Подсказка: если кавычка не закрыта, Python пишет «unterminated string literal (detected at line …)» – там и номер строки.


Шаг 7. [ЧИСЛЕННАЯ ЗАДАЧА] B2-08. Найдите ошибку: посложнее

Условие. Программа побольше, и в ней снова потеряна кавычка. Разбираться, как она работает, не нужно – просто запустите и впишите номер строки с ошибкой.

name = "Лиза"
age = 12
print("Имя:", name)
print("Возраст:", age)
total = age + 5
print("Через 5 лет тебе будет:", total)
print("Любимое число: 7)
print("Любимый цвет: синий")
print("Спасибо за внимание!")
print("Конец программы")

Ответ: 7 Подсказка: ищите строку, где кавычка открылась, но не закрылась. Python назовёт её номер в сообщении.


Шаг 8. [ТЕКСТ · Итог] Что мы умеем

  • print("текст") выводит текст; кавычки обязательны.
  • В скобках можно перечислить значения через запятую – они выведутся через пробел.
  • Команды выполняются сверху вниз.
  • # – комментарий для человека; им же удобно временно отключать строки и пояснять код.
  • По сообщению об ошибке умеем найти строку, где потеряна кавычка.

Дальше – урок 2.2: научимся хранить значения в переменных и спрашивать данные у пользователя.

Урок 2.2. Переменные, типы данных и ввод

Шаги урока (Stepik): Видео → Текст (переменные) → Текст (типы) → Текст (ввод input) → Тест (B2-03) → Код (B2-04) → Код (B2-05) → Итог.

Программа становится интересной, когда умеет запоминать значения и спрашивать их у человека. Этим и займёмся.

Шаг 1. [ВИДЕО] Коробки с ярлыками

Хронометраж ~3:00. Скринкаст в PyCharm, код набираем живьём.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:20Пустой main.py«Пока наши программы умели только печатать готовый текст. Сегодня научим их запоминать значения и спрашивать данные у пользователя.»
0:20–1:10name = "Лиза"print(name)Лиза«Вот переменная. Слева – имя, которое мы придумали, справа от знака равно – значение. Это как коробка с ярлыком: на ярлыке написано name, внутри лежит "Лиза". Дальше можно обращаться к коробке по имени.»
1:10–1:55age = 12print("Возраст:", age)«В коробку можно положить не только текст, но и число. Число пишем без кавычек. И заметьте: name хранит текст, age хранит число – Python различает их.»
1:55–2:40name = input() → ввод в консоли → print("Привет,", name)«А вот команда input – она ждёт, пока человек что-то напечатает, и кладёт это в переменную. Запускаем, печатаем имя, нажимаем Enter – программа здоровается.»
2:40–3:00input() для числа + int(...)«Важно: input всегда возвращает текст. Если ждём число – оборачиваем в int. Зачем – разберём в задании. Дальше – практика.»

Шаг 2. [ТЕКСТ] Переменные

Переменная – это именованное хранилище для значения. Удобно представлять её как коробку с ярлыком: на ярлыке – имя, которое мы придумали, внутри – значение.

name = "Лиза"
age = 12

Слева от = – имя переменной, справа – значение. Знак = здесь означает не «равно», а «положить значение в коробку».

Переменная – коробка с ярлыком

После этого к значению обращаются по имени:

name = "Лиза"
print("Привет,", name)

Вывод:

Привет, Лиза

Имя переменной придумываете вы. Несколько правил: пишут латиницей, без пробелов, понятными словами (age, price, user_name). Так код легче читать – и вам, и другим.


Шаг 3. [ТЕКСТ] Типы данных

У каждого значения есть тип – то, что это за данные. В начале нам хватит трёх:

ТипЧто этоПример
intцелое число12, -3, 0
floatдробное число2.5, -0.1, 3.0
strтекст (строка)"Лиза", "привет", "12"

Главное различие – число или текст:

  • число пишут без кавычек: 12 – это int, с ним можно считать;
  • текст пишут в кавычках: "12" – это str, набор символов.

Это не мелочь. 12 и "12" выглядят похоже, но ведут себя по-разному:

print(12 + 12)     # 24  – сложили числа
print("12" + "12") # 1212 – склеили текст

Для чисел + складывает, а для текста + склеивает строки. Поэтому важно знать, что у вас в руках – число или текст.


Шаг 4. [ТЕКСТ] Ввод данных: input

Команда input() ждёт, пока пользователь что-нибудь напечатает и нажмёт Enter, и возвращает введённое:

name = input()
print("Здравствуйте,", name)

Один важный момент, на котором спотыкаются все новички: input() всегда возвращает текст (str), даже если человек ввёл цифры. Чтобы получить число, текст нужно преобразовать:

  • int(...) – в целое число;
  • float(...) – в дробное.
age = int(input())   # ждём целое число
print("Через 5 лет вам будет", age + 5)

Если убрать int, то age останется текстом, и age + 5 приведёт к ошибке: Python не умеет складывать текст и число. С этой ошибкой мы разберёмся в следующем уроке.


Шаг 5. [ТЕСТ · один ответ] B2-03

Чем отличается 5 от "5" в Python?

  • 5 – это число, с ним можно считать; "5" – это текст в кавычках, и + его не складывает, а склеивает
  • ◯ Ничем – Python понимает их одинаково
  • ◯ Наоборот: "5" – это число, а 5 – текст
  • 5 можно вывести через print, а "5" нельзя

Подсказка при ошибке: кавычки превращают значение в текст. 5 + 5 даёт 10, а "5" + "5" даёт "55". Поэтому числа, полученные из input(), оборачивают в int().


Шаг 6. [КОД] B2-04. Приветствие по имени

Условие. Программа спрашивает имя и здоровается. Считайте имя через input() и выведите приветствие. Ввод: одна строка – имя. Вывод: Здравствуйте, <имя> (имя через пробел после запятой). Пример: ввод Лиза → вывод Здравствуйте, Лиза.

Шаблон кода:

::code
name = input()
# выведите приветствие

Тесты:

def generate():
    return ['Лиза', 'Мария', 'Иван Петров']

def solve(dataset):
    return "Здравствуйте, " + dataset.strip()

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B2-04_privetstvie.py. Подсказка: print("Здравствуйте,", name) выведет текст и значение переменной через пробел.


Шаг 7. [КОД] B2-05. Сумма двух чисел

Условие. Даны два целых числа, каждое на своей строке. Выведите их сумму. Ввод: две строки, в каждой целое число. Вывод: одно число – сумма. Пример: ввод 3 и 5 → вывод 8.

Шаблон кода:

::code
a = int(input())
b = int(input())
# выведите сумму

Тесты:

def generate():
    return ['3\n5', '10\n20', '-4\n9', '0\n0']

def solve(dataset):
    a, b = dataset.split('\n')
    return str(int(a) + int(b))

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B2-05_summa.py. Подсказка: не забудьте int() вокруг input() – иначе + склеит две строки ("3" + "5" даст "35", а не 8).


Шаг 8. [ТЕКСТ · Итог] Что мы умеем

  • Переменная – коробка с ярлыком: имя = значение.
  • У значений есть типы: int (целое), float (дробное), str (текст).
  • Число пишут без кавычек, текст – в кавычках; для них + работает по-разному.
  • input() спрашивает данные у пользователя и всегда возвращает текст; для числа нужен int() или float().

Дальше – урок 2.3: научимся считать (арифметика) и собирать текст из частей.

Урок 2.3. Вычисления и работа со строками

Шаги урока (Stepik): Видео → Текст (арифметика) → Текст (склейка текста) → Код (B2-06) → Код (B2-07) → Почини (B2-FIX-01) → Итог.

Переменные умеют хранить значения. Теперь научим программу считать и собирать текст из частей – это нужно почти в каждой задаче.

Шаг 1. [ВИДЕО] Калькулятор и сборка текста

Хронометраж ~2:50. Скринкаст в PyCharm.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:20Пустой main.py«Python отлично считает. Сейчас используем его как калькулятор, а потом соберём из чисел и текста готовую фразу.»
0:20–1:10print(2 + 3), print(10 - 4), print(6 * 7), print(20 / 8)«Плюс, минус, звёздочка – умножение, косая черта – деление. Обратите внимание: деление всегда даёт дробное число – 20 / 8 это 2.5
1:10–1:45print(17 // 5)3, print(17 % 5)2«Две косые черты – это деление нацело, а процент – остаток от деления. 17 // 5 это 3, остаток 2. Пригодится дальше в курсе.»
1:45–2:30price = 50 · count = 3 · print("Итого:", price * count)«Считать можно и с переменными. Цена, количество – умножаем, выводим результат рядом с подписью через запятую.»
2:30–2:50name = "Лиза" · print("Привет, " + name + "!")«А текст можно склеивать плюсом. Главное – не путать: плюс между числами считает, между строками – склеивает.»

Шаг 2. [ТЕКСТ] Арифметика

Python считает обычными знаками:

ЗнакДействиеПримерРезультат
+сложение2 + 35
-вычитание10 - 46
*умножение6 * 742
/деление20 / 82.5
//деление нацело17 // 53
%остаток от деления17 % 52

Два момента, которые удивляют новичков:

  • деление / всегда даёт дробное число (float): 10 / 2 это 5.0, а не 5;
  • // и % работают в паре: 17 // 5 это 3 (сколько раз пятёрка помещается в 17), а 17 % 5 это 2 (что осталось).

Считать можно и с переменными:

price = 50
count = 3
print("Итого:", price * count)   # Итого: 150

Шаг 3. [ТЕКСТ] Собираем текст из частей

Часто нужно вывести фразу, в которой есть и текст, и значение переменной. Есть два простых способа.

Способ 1 – запятая в print (уже знаком): значения выводятся через пробел.

name = "Лиза"
print("Привет,", name)      # Привет, Лиза

Способ 2 – склейка строк плюсом. Знак + соединяет строки в одну. Так можно управлять текстом точнее – например, поставить восклицательный знак вплотную:

name = "Лиза"
print("Привет, " + name + "!")   # Привет, Лиза!

Важная тонкость: плюсом склеиваются только строки. Склеить текст с числом напрямую нельзя – Python выдаст ошибку. Если очень нужно, число превращают в текст функцией str():

age = 12
print("Возраст: " + str(age))    # Возраст: 12

На практике для простого вывода удобнее запятая, а склейку берут, когда нужно собрать строку без лишних пробелов.


Шаг 4. [КОД] B2-06. Сантиметры в метры

Условие. Дана длина в сантиметрах (целое число). Переведите её в метры и выведите результат. Ввод: одно целое число – сантиметры. Вывод: длина в метрах (дробное число). Пример: ввод 250 → вывод 2.5.

Шаблон кода:

::code
cm = int(input())
# переведите в метры и выведите

Тесты:

def generate():
    return ['250', '100', '30', '7']

def solve(dataset):
    return str(int(dataset) / 100)

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B2-06_cm_v_metry.py. Подсказка: в метре 100 сантиметров – разделите на 100. Деление / сразу даст дробное число.


Шаг 5. [КОД] B2-07. Стоимость покупки

Условие. Известны цена одного билета и количество билетов. Посчитайте, сколько нужно заплатить. Ввод: две строки – цена и количество (целые числа). Вывод: общая стоимость. Пример: ввод 50 и 3 → вывод 150.

Шаблон кода:

::code
price = int(input())
count = int(input())
# выведите общую стоимость

Тесты:

def generate():
    return ['50\n3', '120\n2', '7\n0', '15\n10']

def solve(dataset):
    price, count = dataset.split('\n')
    return str(int(price) * int(count))

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B2-07_stoimost.py. Подсказка: общая стоимость – это цена, умноженная на количество.


Шаг 6. [ПОЧИНИ] B2-FIX-01. Текст вместо числа

Условие. Программа должна прибавить к введённому числу 5 и вывести результат. Но при запуске она падает с ошибкой TypeError – Python не может сложить текст и число. Найдите причину и почините.

Сломанный шаблон (::code):

age = input()
print(age + 5)

Ввод: одно целое число. Вывод: число, увеличенное на 5. Пример: ввод 10 → вывод 15.

Тесты:

def generate():
    return ['10', '14', '7', '0']

def solve(dataset):
    return str(int(dataset) + 5)

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B2-FIX-01_zabyli_int.py. Подсказка: input() возвращает текст. Чтобы считать, оберните его в int(): age = int(input()).


Шаг 7. [ТЕКСТ · Итог] Что мы умеем

  • Python считает знаками + - * /, а ещё есть // (деление нацело) и % (остаток).
  • Деление / всегда даёт дробное число.
  • Текст собирают из частей: через запятую в print или склейкой + (только для строк; число превращают в текст через str()).
  • Типичная ошибка – забыть int() у input(): тогда вместо сложения получается склейка или TypeError.

Дальше – Блок 3: научим программу принимать решения с помощью условий if.

Урок 3.1. Сравнения и условие if

Шаги урока (Stepik): Видео → Текст (сравнения) → Текст (if/else) → Тест (B3-02) → Код (B3-01) → Почини (B3-FIX-01) → Итог.

До сих пор программа выполняла все команды подряд. Теперь научим её принимать решения: делать одно, если условие верно, и другое – если нет.

Шаг 1. [ВИДЕО] Программа, которая решает сама

Хронометраж ~2:50. Скринкаст в PyCharm.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:25Пустой main.py«Иногда программа должна поступать по-разному. Если денег хватает – покупаем, если нет – отказываем. Сегодня научим Python проверять условие и выбирать, что делать.»
0:25–1:10print(5 > 3)True, print(2 > 3)False«Сравнения. Больше, меньше, равно. Python отвечает одним из двух слов: True – верно, False – неверно. Это и есть проверка условия.»
1:10–2:10Набираем if/else с отступом«Команда if – «если». После условия двоеточие, а ниже с отступом – что делать, когда условие верно. После else – что делать в остальных случаях. Отступ для Python важен: он показывает, что строки относятся к if
2:10–2:50Меняем число, видим разные ветки«Поменяем число – и программа пойдёт по другой ветке. Выполнится только одна. Дальше – ваши задания.»

Шаг 2. [ТЕКСТ] Сравнения дают True или False

Чтобы что-то решить, программа сначала сравнивает значения. Любое сравнение даёт одно из двух значений: True (верно) или False (неверно).

ЗаписьЧто значитПримерРезультат
==равно5 == 5True
!=не равно5 != 3True
>больше2 > 7False
<меньше2 < 7True
>=больше или равно5 >= 5True
<=меньше или равно9 <= 4False

Главная ловушка новичка: равенство – это ==, два знака. Один знак = означает «положить значение в переменную» (как в Блоке 2), а сравнение «равно ли» – это ==.

И помните разницу из Блока 2: число и текст – не одно и то же. 5 == "5" даёт False: слева число, справа текст.


Шаг 3. [ТЕКСТ] if и else: развилка

if по-русски – «если». Записывают так:

n = 4
if n % 2 == 0:
    print("чётное")
else:
    print("нечётное")

Как это читается:

  • после if пишут условие и ставят двоеточие;
  • строки, которые выполняются при верном условии, пишут с отступом (обычно 4 пробела);
  • после else: – с отступом то, что делать, когда условие неверно.

Выполнится только одна ветка – та, что подходит:

Условие if – развилка

Python проверяет условие: верно – идёт по ветке if, неверно – по ветке else.

На практике. Отступ для Python – не украшение, а часть кода. PyCharm ставит его сам после двоеточия. Если отступ сбить, программа не запустится – это одна из самых частых ошибок в начале.

Шаг 4. [ТЕСТ · один ответ] B3-02

Какое выражение даёт True?

  • 5 > 3
  • ◯ 10 < 2
  • ◯ 3 != 3
  • ◯ 5 == "5"

Подсказка при ошибке: сравнение отвечает «верно/неверно». 3 != 3 – неверно (числа равны), а 5 == "5" – неверно (число и текст не равны).


Шаг 5. [КОД] B3-01. Чётное или нечётное

Условие. Дано целое число. Выведите чётное, если оно делится на 2 без остатка, иначе – нечётное. Ввод: одно целое число. Вывод: чётное или нечётное. Пример: 4чётное; 7нечётное.

Шаблон кода:

::code
n = int(input())
# проверьте остаток от деления на 2 и выведите ответ

Тесты:

def generate():
    return ['4', '7', '0', '-3']

def solve(dataset):
    return "чётное" if int(dataset) % 2 == 0 else "нечётное"

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B3-01_chet_nechet.py. Подсказка: остаток от деления на 2 даёт %. Если n % 2 == 0 – число чётное.


Шаг 6. [ПОЧИНИ] B3-FIX-01. Один знак или два?

Условие. Программа должна проверить, равно ли число десяти, и вывести да или нет. Но она не запускается: в условии перепутаны знаки. Почините.

Сломанный шаблон (::code):

n = int(input())
if n = 10:
    print("да")
else:
    print("нет")

Ввод: одно целое число. Вывод: да, если число равно 10, иначе нет. Пример: 10да; 7нет.

Тесты:

def generate():
    return ['10', '7', '0']

def solve(dataset):
    return "да" if int(dataset) == 10 else "нет"

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B3-FIX-01_ravno.py. Подсказка: «равно ли» – это == (два знака). Один знак = Python понимает иначе.


Шаг 7. [ТЕКСТ · Итог] Что мы умеем

  • Сравнения (== != < > <= >=) дают True или False.
  • if условие: – выполнить ветку, когда условие верно; else: – в остальных случаях.
  • Строки внутри if/else пишут с отступом.
  • Равенство – это ==, а не =.

Дальше – урок 3.2: что делать, когда вариантов больше двух (elif).

Урок 3.2. Несколько веток: elif

Шаги урока (Stepik): Видео → Текст (elif) → Код (B3-03) → Код (B3-04) → Код (B3-05) → Итог.

Часто вариантов больше двух: не «да/нет», а «красный / жёлтый / зелёный». Для этого есть elif – «иначе если».

Шаг 1. [ВИДЕО] Когда вариантов много

Хронометраж ~2:40. Скринкаст в PyCharm.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:25if/else из прошлого урока«if/else выбирает из двух. А если вариантов три или больше? Скажем, оценка: отлично, хорошо, удовлетворительно. Тут поможет elif
0:25–1:30Пишем if … elif … elif … else«elif – это «иначе если». Python проверяет условия по порядку сверху вниз и выполняет первое подходящее, остальные пропускает. Если ни одно не подошло – ветка else
1:30–2:40Меняем баллы, видим разные ответы«Порядок важен: условия идут от старшего к младшему. Поменяем число – ответ меняется. Дальше – практика.»

Шаг 2. [ТЕКСТ] elif – «иначе если»

Когда вариантов больше двух, между if и else добавляют сколько угодно веток elif:

score = 75
if score >= 85:
    print("отлично")
elif score >= 70:
    print("хорошо")
elif score >= 50:
    print("удовлетворительно")
else:
    print("неудовлетворительно")

Как Python это выполняет:

  • проверяет условия по порядку, сверху вниз;
  • выполняет первое, которое оказалось True, и дальше проверять перестаёт;
  • если ни одно не подошло – выполняет else.

Поэтому порядок веток важен. Здесь условия идут от большего балла к меньшему: при 90 сразу сработает >= 85, а до >= 70 дело не дойдёт.

На практике. elif не обязателен, и else тоже. Но если варианты покрывают все случаи, удобно последний оставить под else – «во всех остальных случаях».

Шаг 3. [КОД] B3-03. Сравните два числа

Условие. Даны два целых числа. Сравните их и выведите знак: <, > или =. Ввод: два числа, каждое на своей строке. Вывод: один символ <, > или =. Пример: 3 и 5<; 4 и 4=.

Шаблон кода:

::code
a = int(input())
b = int(input())
# сравните a и b и выведите знак

Тесты:

def generate():
    return ['3\n5', '9\n2', '4\n4', '-1\n0']

def solve(dataset):
    a, b = (int(x) for x in dataset.split('\n'))
    return "<" if a < b else (">" if a > b else "=")

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B3-03_sravnenie.py. Подсказка: три случая – a < b, a > b и равны. Это if … elif … else.


Шаг 4. [КОД] B3-04. Оценка по баллам

Условие. Дан балл от 0 до 100. Выведите оценку: отлично (85 и выше), хорошо (70–84), удовлетворительно (50–69), иначе неудовлетворительно. Ввод: целое число. Вывод: одно слово-оценка. Пример: 90отлично; 55удовлетворительно.

Шаблон кода:

::code
score = int(input())
# выведите оценку по баллам

Тесты:

def generate():
    return ['90', '75', '55', '30', '85', '50', '49']

def solve(dataset):
    s = int(dataset)
    if s >= 85:
        return "отлично"
    if s >= 70:
        return "хорошо"
    if s >= 50:
        return "удовлетворительно"
    return "неудовлетворительно"

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B3-04_ocenka.py. Подсказка: ветки идут от большего балла к меньшему. Тогда хватает проверять только нижнюю границу: >= 85, >= 70, >= 50.


Шаг 5. [КОД] B3-05. Светофор

Условие. Дан цвет светофора. Выведите действие: красныйСтойте, жёлтыйПриготовьтесь, зелёныйИдите. Для любого другого слова – Неизвестный сигнал. Ввод: одно слово (цвет). Вывод: действие. Пример: зелёныйИдите.

Шаблон кода:

::code
color = input()
# выведите действие по цвету

Тесты:

def generate():
    return ['красный', 'жёлтый', 'зелёный', 'синий']

def solve(dataset):
    c = dataset.strip()
    return {"красный": "Стойте", "жёлтый": "Приготовьтесь",
            "зелёный": "Идите"}.get(c, "Неизвестный сигнал")

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B3-05_svetofor.py. Подсказка: сравнивайте color с каждым цветом через ==. Последняя ветка else – на случай неизвестного слова.


Шаг 6. [ТЕКСТ · Итог] Что мы умеем

  • elif («иначе если») добавляет дополнительные ветки между if и else.
  • Python проверяет условия сверху вниз и выполняет первое подходящее.
  • Порядок веток важен: обычно идут от частного/старшего к общему/младшему.

Дальше – урок 3.3: объединим несколько условий с помощью and, or, not.

Урок 3.3. Логика: and, or, not

Шаги урока (Stepik): Видео → Текст (and/or/not) → Код (B3-06) → Код (B3-07) → Чтение (B3-08) → Итог.

Иногда решение зависит сразу от нескольких условий: «если денег хватает и магазин открыт». Объединять условия помогают and, or, not.

Шаг 1. [ВИДЕО] Несколько условий сразу

Хронометраж ~2:40. Скринкаст в PyCharm.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:25Два отдельных if«Бывает, что условий несколько и важны они вместе. Например, число должно быть больше 0 и меньше 100. Объединим условия в одно.»
0:25–1:30and, or, not на примерах«and – «и», верно, когда верны оба условия. or – «или», верно, когда верно хотя бы одно. not – «не», переворачивает: из True делает False
1:30–2:40if 0 < x and x < 100:«Условия пишем по обе стороны от and. Если оба верны – заходим внутрь. Дальше попробуете сами.»

Шаг 2. [ТЕКСТ] and, or, not

Эти слова объединяют несколько условий в одно.

СловоКогда даёт TrueПримерРезультат
andкогда верны оба условия5 > 0 and 5 < 100True
orкогда верно хотя бы одно5 < 0 or 5 < 100True
notпереворачивает значениеnot (5 > 0)False

Пример: число в диапазоне от 1 до 10 (включительно):

x = 7
if x >= 1 and x <= 10:
    print("в диапазоне")
else:
    print("вне диапазона")

Несколько условий можно комбинировать, но не усложняйте без нужды: чем проще условие, тем легче его прочитать.

На практике. and верно, только когда верны обе части; or достаточно одной. Частая путаница новичка – перепутать их местами. Если сомневаетесь, проговорите условие словами: «и то, и то» – это and, «хотя бы одно» – это or.

Шаг 3. [КОД] B3-06. Високосный год

Условие. Дан год. Определите, високосный ли он. Год високосный, если делится на 4, но не делится на 100, или делится на 400. Выведите да или нет. Ввод: целое число (год). Вывод: да или нет. Пример: 2020да; 1900нет; 2000да.

Шаблон кода:

::code
year = int(input())
# проверьте правило високосного года

Тесты:

def generate():
    return ['2020', '1900', '2000', '2023', '2024']

def solve(dataset):
    y = int(dataset)
    leap = (y % 4 == 0 and y % 100 != 0) or y % 400 == 0
    return "да" if leap else "нет"

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B3-06_visokosny.py. Подсказка: правило – (year % 4 == 0 and year % 100 != 0) or year % 400 == 0. Скобки задают порядок.


Шаг 4. [КОД] B3-07. Число в диапазоне

Условие. Даны три числа: x, а затем границы a и b (ab). Выведите да, если x попадает в диапазон от a до b включительно, иначе нет. Ввод: три числа, каждое на своей строке: x, a, b. Вывод: да или нет. Пример: 5, 1, 10да; 15, 1, 10нет.

Шаблон кода:

::code
x = int(input())
a = int(input())
b = int(input())
# проверьте, что x не меньше a и не больше b

Тесты:

def generate():
    return ['5\n1\n10', '15\n1\n10', '1\n1\n10', '10\n1\n10']

def solve(dataset):
    x, a, b = (int(v) for v in dataset.split('\n'))
    return "да" if a <= x <= b else "нет"

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B3-07_diapazon.py. Подсказка: нужно сразу два условия – x >= a и x <= b. Соедините их через and.


Шаг 5. [ЧИСЛЕННАЯ ЗАДАЧА] B3-08. Что выведет программа?

Условие. Вставьте программу, запустите и впишите число, которое появилось в консоли.

a = 7
b = 3
if a > b and a % 2 == 1:
    print(1)
else:
    print(0)

Ответ: 1 Подсказка: проверьте обе части условия по отдельности, а потом соедините через and. 7 > 3 – верно; 7 % 2 == 1 – тоже верно.


Шаг 6. [ТЕКСТ · Итог] Что мы умеем

  • and – верно, когда верны оба условия; or – когда верно хотя бы одно; not – переворачивает.
  • Несколько условий соединяются в одно; скобки задают порядок.
  • Условие любой сложности всё так же даёт True или False.

Дальше – Блок 4: научимся повторять действия много раз с помощью циклов.

Урок 4.1. Цикл for и range

Шаги урока (Stepik): Видео → Текст (for/range) → Текст (накопитель) → Код (B4-01) → Код (B4-03) → Итог.

Пока, чтобы повторить действие, пришлось бы писать команду много раз. Цикл повторяет её за нас – столько раз, сколько нужно.

Шаг 1. [ВИДЕО] Повторяем без копипаста

Хронометраж ~2:50. Скринкаст в PyCharm.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:25Три одинаковых print("Привет")«Если нужно поздороваться три раза, можно написать print трижды. А если тысячу? Копировать неудобно. Для повторов есть цикл.»
0:25–1:25for i in range(3): print("Привет")«for i in range(3) – повторить три раза. После двоеточия, с отступом, – что повторять. Это тело цикла. Python сам выполнит его нужное число раз.»
1:25–2:10Показываем, что i принимает 0,1,2«Переменная i на каждом шаге своя: сначала 0, потом 1, потом 2. Её можно использовать, а можно и не трогать.»
2:10–2:50Накопитель total = total + x«Часто в цикле что-то копят: сумму, счётчик. Заводим переменную до цикла и меняем её на каждом шаге. Дальше – практика.»

Шаг 2. [ТЕКСТ] for и range

Цикл for повторяет тело нужное число раз:

for i in range(3):
    print("Привет")

Вывод:

Привет
Привет
Привет
  • range(3) задаёт три повтора;
  • тело цикла пишут с отступом – как в if;
  • переменная i на каждом шаге принимает значения 0, 1, 2. Её можно использовать (например, как номер), а если не нужна – часто пишут _.

Цикл for – петля

Python выполняет тело, возвращается к началу и повторяет, пока не пройдёт все повторы; потом идёт дальше.


Шаг 3. [ТЕКСТ] Накопитель

Часто в цикле что-то накапливают – сумму, количество. Переменную заводят до цикла и меняют на каждом шаге:

total = 0
for x in [10, 20, 30]:
    total = total + x
print(total)   # 60

Здесь for x in [10, 20, 30] перебирает числа из списка по очереди (со списками подробно – в Блоке 5), а total копит сумму. Этот приём – основа многих задач: сумма, среднее, счётчик подходящих элементов.


Шаг 4. [КОД] B4-01. Повторите вывод

Условие. Дано число N. Выведите слово Привет ровно N раз, каждое с новой строки. Ввод: целое N (0 ≤ N ≤ 100). Вывод: N строк (при N = 0 – пусто). Пример: 3Привет / Привет / Привет.

Шаблон кода:

::code
n = int(input())
# повторите вывод слова Привет n раз

Тесты:

def generate():
    return ['3', '1', '5', '0']

def solve(dataset):
    n = int(dataset)
    return "\n".join(["Привет"] * n)

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B4-01.py. Подсказка: for _ in range(n): повторит тело n раз. Внутри – print("Привет").


Шаг 5. [КОД] B4-03. Среднее нескольких чисел

Условие. Дано N чисел. Найдите их среднее, округлённое до одного знака после запятой. Ввод: первая строка – N; вторая строка – N целых через пробел. Вывод: среднее (например, 25.0). Пример: 4 / 10 20 30 4025.0.

Шаблон кода:

::code
n = int(input())
readings = list(map(int, input().split()))
# посчитайте сумму, разделите на n, округлите до 1 знака

Тесты:

def generate():
    return ['4\n10 20 30 40', '3\n5 5 5', '1\n7', '5\n10 11 12 13 14']

def solve(dataset):
    lines = dataset.split("\n")
    n = int(lines[0])
    xs = list(map(int, lines[1].split()))
    return str(round(sum(xs) / n, 1))

def check(reply, clue):
    try:
        return abs(float(reply.strip()) - float(clue.strip())) < 0.05
    except ValueError:
        return False

Эталон: solutions/B4-03.py. Подсказка: сумму можно накопить циклом или взять sum(readings). Среднее – сумма, делённая на n; округление – round(значение, 1).


Шаг 6. [ТЕКСТ · Итог] Что мы умеем

  • for i in range(n): повторяет тело n раз; тело – с отступом.
  • Переменная цикла i идёт по значениям 0 … n-1.
  • В цикле удобно накапливать результат (сумма, среднее, счётчик).

Дальше – урок 4.2: цикл while – повтор, пока выполняется условие.

Урок 4.2. Цикл while

Шаги урока (Stepik): Видео → Текст (while) → Чтение (B4-07) → Код (B4-02) → Почини (B4-FIX-01) → Итог.

for хорош, когда число повторов известно заранее. А если повторять, пока выполняется условие, и сколько раз – заранее не знаем? Для этого есть while.

Шаг 1. [ВИДЕО] Повторяем, пока выполняется условие

Хронометраж ~2:40. Скринкаст в PyCharm.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:25for из прошлого урока«for повторяет известное число раз. Но бывает иначе: тратим деньги, пока они есть; считаем, пока не дойдём до нуля. Число повторов заранее неизвестно.»
0:25–1:25while money >= price:«while – «пока». Пишем условие, и тело повторяется, пока условие верно. Как только стало неверно – цикл заканчивается.»
1:25–2:40Внутри цикла меняем переменную«Главное правило: внутри цикла что-то должно менять условие – иначе оно всегда верно, и цикл не закончится никогда. Это частая ошибка, разберём её в задании.»

Шаг 2. [ТЕКСТ] while – «пока»

while повторяет тело, пока условие верно:

n = 5
while n > 0:
    print(n)
    n = n - 1

Программа печатает 5 4 3 2 1. На каждом шаге n уменьшается; когда n стало 0, условие n > 0 неверно – цикл заканчивается.

Запомните главное: внутри while что-то должно приближать условие к концу (здесь – n = n - 1). Если этого не делать, условие останется верным навсегда и программа зациклится. Такой «бесконечный цикл» в PyCharm останавливают красным квадратом «Стоп».

На практике. for берут, когда число повторов известно (повторить N раз, пройти по списку). while – когда повторяем до события: пока хватает денег, пока не получили нужный ответ.

Шаг 3. [ТЕСТ · один ответ] B4-07. Сколько раз выполнится цикл?

Сколько строк выведет программа?

n = 10
count = 0
while n > 1:
    n = n // 2
    count += 1
print(count)
  • 3
  • ◯ 4
  • ◯ 9
  • ◯ 10

Подсказка: проследите за n: 10 → 5 → 2 → 1. Деление нацело сработало три раза, значит count стал 3.


Шаг 4. [КОД] B4-02. Сколько поездок

Условие. На карте money рублей, одна поездка стоит price. Сколько поездок можно совершить? Используйте цикл while (не формулу). Ввод: два целых в одной строке: money price (1 ≤ price ≤ money ≤ 1000). Вывод: число поездок. Пример: 100 1010; 55 77.

Шаблон кода:

::code
money, price = map(int, input().split())
rides = 0
# пока денег хватает на поездку — вычитайте цену и считайте поездки

Тесты:

def generate():
    return ['100 10', '55 7', '9 10', '100 1']

def solve(dataset):
    b, d = map(int, dataset.split())
    return str(b // d)

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B4-02.py. Подсказка: while money >= price: – внутри уменьшайте money на price и увеличивайте счётчик rides.


Шаг 5. [ПОЧИНИ] B4-FIX-01. Бесконечный цикл

Условие. Программа должна вывести обратный отсчёт от N до 1 (каждое число с новой строки), но зацикливается – печатает одно и то же без конца. Найдите причину и почините.

Сломанный шаблон (::code):

n = int(input())
while n > 0:
    print(n)
    # забыли изменить n

Ввод: целое N. Вывод: N, N−1, …, 1. Пример: 55 / 4 / 3 / 2 / 1.

Тесты:

def generate():
    return ['5', '1', '3']

def solve(dataset):
    n = int(dataset)
    return "\n".join(str(i) for i in range(n, 0, -1))

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B4-FIX-01.py. Подсказка: условие n > 0 никогда не станет неверным, потому что n не меняется. Добавьте внутри цикла n = n - 1.


Шаг 6. [ТЕКСТ · Итог] Что мы умеем

  • while условие: повторяет тело, пока условие верно.
  • Внутри цикла нужно менять то, от чего зависит условие, иначе цикл бесконечный.
  • for – когда число повторов известно; while – когда повторяем до события.

Дальше – урок 4.3: прервать цикл досрочно (break) и вложенные циклы.

Урок 4.3. Досрочный выход break и вложенные циклы

Шаги урока (Stepik): Видео → Текст (break) → Текст (вложенные циклы) → Код (B4-04) → Код (B4-05) → Код (B4-06) → Итог.

Иногда из цикла нужно выйти раньше – как только нашли что искали. А иногда цикл нужен внутри другого цикла. Разберём оба случая.

Шаг 1. [ВИДЕО] Выйти раньше и цикл в цикле

Хронометраж ~2:50. Скринкаст в PyCharm.

ВремяНа экранеГолос за кадром (дословно)
0:00–0:30Перебор чисел, ищем первое подходящее«Допустим, ищем первый холодный день. Как только нашли – дальше смотреть незачем. Команда break прерывает цикл сразу.»
0:30–1:30for … if … break«Внутри цикла проверяем условие; если сработало – break, и цикл заканчивается, не доходя до конца.»
1:30–2:50Вложенный for для таблицы«А ещё цикл можно вложить в цикл: внешний идёт по строкам, внутренний – по столбцам. Так строят таблицы. Дальше – практика.»

Шаг 2. [ТЕКСТ] break – выйти из цикла

break досрочно прерывает цикл – как только стало ясно, что дальше можно не продолжать:

for x in [7, 4, 9, 2, 5]:
    if x < 5:
        print("нашли:", x)
        break

Цикл дойдёт до 4, напечатает его и сразу остановится – остальные числа не проверяются. Без break цикл прошёл бы список до конца.

break удобен в задачах «найди первое подходящее»: не нужно перебирать всё, если ответ уже найден.


Шаг 3. [ТЕКСТ] Вложенные циклы

Цикл можно поместить внутрь другого цикла. На каждом шаге внешнего цикла внутренний проходит полностью:

for i in range(1, 4):
    for j in range(1, 4):
        print(i * j, end=" ")
    print()

Внешний цикл – строки, внутренний – столбцы. Так удобно строить таблицы и сетки. Отступы показывают, какой цикл вложен: тело внутреннего – с двойным отступом.

На практике. Вложенные циклы – мощная вещь, но за каждым лишним уровнем растёт число шагов. Для начала хватает двух уровней (как в таблице).

Шаг 4. [КОД] B4-04. Первый холодный день

Условие. Дана температура за N дней. Выведите номер первого дня (счёт с 1), когда температура стала меньше 10, или нет, если такого дня не было. Ввод: первая строка – N; вторая – N целых через пробел. Вывод: номер дня или нет. Пример: 5 / 18 15 8 12 53.

Шаблон кода:

::code
n = int(input())
temps = list(map(int, input().split()))
# пройдите по дням; на первом дне с температурой меньше 10 выведите номер и остановитесь

Тесты:

def generate():
    return ['5\n18 15 8 12 5', '3\n18 15 12', '1\n5', '4\n10 10 10 9']

def solve(dataset):
    lines = dataset.split("\n")
    n = int(lines[0])
    t = list(map(int, lines[1].split()))
    for i in range(n):
        if t[i] < 10:
            return str(i + 1)
    return "нет"

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B4-04.py. Подсказка: заведите ответ "нет". В цикле, найдя первый день с temps[i] < 10, запишите номер i + 1 и сделайте break.


Шаг 5. [КОД] B4-05. Таблица умножения

Условие. Выведите таблицу умножения N × N. В строке i – произведения i*1 i*2 … i*N через пробел. Ввод: целое N (1 ≤ N ≤ 9). Вывод: N строк. Пример: 31 2 3 / 2 4 6 / 3 6 9.

Шаблон кода:

::code
n = int(input())
# внешний цикл — строки i, внутренний — столбцы j; печатайте i*j

Тесты:

def generate():
    return ['3', '1', '5']

def solve(dataset):
    n = int(dataset)
    rows = []
    for i in range(1, n + 1):
        rows.append(" ".join(str(i * j) for j in range(1, n + 1)))
    return "\n".join(rows)

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B4-05.py. Подсказка: два цикла for i in range(1, n+1) и for j in range(1, n+1). В строке собирайте числа через пробел.


Шаг 6. [КОД] B4-06. FizzBuzz

Условие. Для чисел от 1 до N: кратное 3 – выведите Физз; кратное 5 – Бузз; кратное и 3, и 5 – ФиззБузз; иначе – само число. Каждое с новой строки. Ввод: целое N. Вывод: N строк. Пример: 51 / 2 / Физз / 4 / Бузз.

Шаблон кода:

::code
n = int(input())
# для каждого числа от 1 до n проверьте кратность 15, потом 3, потом 5

Тесты:

def generate():
    return ['15', '5', '3', '1']

def solve(dataset):
    n = int(dataset)
    out = []
    for i in range(1, n + 1):
        if i % 15 == 0:
            out.append("ФиззБузз")
        elif i % 3 == 0:
            out.append("Физз")
        elif i % 5 == 0:
            out.append("Бузз")
        else:
            out.append(str(i))
    return "\n".join(out)

def check(reply, clue):
    return reply.strip() == clue.strip()

Эталон: solutions/B4-06.py. Подсказка: сначала проверяйте кратность 15 (и 3, и 5), иначе число, кратное 15, попадёт в Физз раньше. Это знакомый if/elif/else из Блока 3.


Шаг 7. [ТЕКСТ · Итог] Что мы умеем

  • break досрочно прерывает цикл – удобно в задачах «найди первое подходящее».
  • Цикл можно вложить в цикл: внешний – строки, внутренний – столбцы.
  • Циклы и условия работают вместе (как в FizzBuzz).

Дальше – Блок 5: списки – как хранить много значений и обрабатывать их циклом.