Первая программа
Самые первые шаги в Python для тех, кто никогда не программировал — print, числа и арифметика, переменные-коробки, строки, input и комментарии; три способа запустить код и семь крошечных задач с разбором.
Зачем это нужно
Заголовок раздела «Зачем это нужно»Вы уже набирали строки на Python: в уроке 0.0.2 — print и арифметику прямо
в браузере, в уроке 0.1.3 — первую функцию для автопроверки. Тогда мы
просили поверить на слово. С этого урока начинается Python по-настоящему: разберём каждый символ, и ни одна строка
больше не будет заклинанием.
Любой скрипт обучения нейросети, даже у DeepSeek и Qwen, устроен из тех же кирпичиков, что и программы этого урока.
Он получает данные (читает текст), считает (умножает числа) и сообщает результат (печатает loss).
Получить, посчитать, показать — к концу урока вы будете уметь все три действия.
Вот программа из пяти строк. Сейчас она может выглядеть загадочно, но через час вы объясните каждый её символ:
# Сколько недель займёт курс?course_hours = 470 # примерно столько часов в курсе ChinaAIhours_per_week = 10 # сколько часов в неделю вы готовы заниматьсяweeks = course_hours / hours_per_weekprint("Недель до финиша:", weeks)Недель до финиша: 47.0Три способа запустить код
Заголовок раздела «Три способа запустить код»Код на Python — это обычный текст. Чтобы он заработал, его нужно отдать интерпретаторуинтерпретаторEN interpreterПрограмма, которая читает код и сразу выполняет его строку за строкой. Python — интерпретируемый язык. — программе, которая читает строки сверху вниз и выполняет их. Сделать это можно в браузере, в терминале и в Jupyter, причём в терминале у Python два режима: интерактивный (по строчке) и запуск файла целиком.
| Способ | Как запустить | Когда удобно | Что видно на экране |
|---|---|---|---|
| В браузере | окно задания на сайте, кнопка «▶ Запустить» | уроки этого курса; ничего не нужно устанавливать | только то, что напечатал print |
| Интерактивный режим | в терминале команда python, появится приглашение >>> | проверить одну строку: «а что будет, если…» | значение каждого выражения — сразу |
| Файл-скрипт | python hello.py в терминале | настоящие программы, домашние работы | только то, что напечатал print |
| Jupyter | ячейка блокнота, Shift+Enter | эксперименты с данными и графиками | print плюс значение последней строки ячейки |
Как установить Python, VS Code и Jupyter, мы разобрали в уроке 0.1.2. Запустим первую программу файлом:
-
В VS Code откройте папку для учёбы и создайте файл
hello.py(File → New File). Имя — латиницей, без пробелов. -
Напишите в нём одну строку:
print("Привет, мир!")и сохраните файл (Ctrl+S). -
Откройте встроенный терминал (Terminal → New Terminal) и выполните
python hello.py. Если система ответитpython: command not found, пишитеpython3 hello.py. -
В терминале появится
Привет, мир!. Это ваша первая программа, запущенная по-взрослому.
А в интерактивном режимеинтерактивный режим (REPL)EN REPL, interactive modeRead–Eval–Print Loop: Python читает строку, вычисляет и сразу показывает результат. Приглашение — >>>. Python отвечает на каждую строку сразу, как калькулятор:
>>> 2 + 35>>> "ха" * 3'хахаха'>>> exit()Кавычки вокруг 'хахаха' интерактивный режим добавляет сам, чтобы было видно: это текст, а не число. print
печатает тот же текст без кавычек.
print: программа говорит
Заголовок раздела «print: программа говорит»print — это функцияфункцияEN functionВ Python функция — обычный объект, её можно передать как аргумент или вернуть из другой функции.: готовая команда с именем, которой в круглых скобках передают данные.
Функция что-то делает (print выводит текст на экран) или вычисляет ответ и возвращает его в программу, как
len и round ниже. Скобки после имени обязательны: без них функция не вызывается. Свои функции вы научитесь писать
в уроке 0.2.2, а пока будем пользоваться готовыми.
print(...) выводит на экран то, что стоит в скобках. Текст берут в кавычки, числа и вычисления пишут без кавычек:
print("Привет, мир!")print("Мне", 30, "лет") # несколько значений через запятую — между ними пробелprint("2 + 2 =", 2 + 2) # текст в кавычках печатается как есть, выражение вычисляетсяprint() # пустая строкаprint("Data", "whale", sep="") # sep — чем разделять значения (по умолчанию пробел)print("Загрузка", end="... ") # end — чем закончить (по умолчанию переход на новую строку)print("готово")Привет, мир!Мне 30 лет2 + 2 = 4
DatawhaleЗагрузка... готовоКавычки бывают двойные "..." и одинарные '...' — разницы нет, лишь бы открывающая и закрывающая совпадали.
Это удобно, когда кавычки нужны внутри текста: print('Он сказал: "Привет"'). Сочетание \n внутри строки означает
переход на новую строку: print("строка 1\nстрока 2") напечатает две строки.
Забудете кавычки — Python решит, что Привет — это имя чего-то, и ответит NameError: name 'Привет' is not defined.
Такие сообщения вы уже умеете читать (урок 0.0.3), а подробно об ошибках —
в уроке 0.2.5.
Числа и арифметика
Заголовок раздела «Числа и арифметика»В Python два основных вида чисел: целые (int, от integer): 42, -7, 1_000_000 — и дробные
(float): 3.14, 0.5, 36.6. Дробную часть отделяют только точкой. Подчёркивания в 1_000_000 Python
пропускает: они нужны, чтобы человеку было легче считать нули. Узнать вид значения можно функцией type:
type(42) даёт <class 'int'>, а type(3.14) — <class 'float'>. Слово class пока пропускайте: важно то,
что стоит после него.
Знаки действий называются операторамиоператорEN operatorЗнак действия: + - * / // % ** и другие.. Посмотрим на все семь на числах 17 и 5:
| Оператор | Что делает | Пример | Результат |
|---|---|---|---|
+ | сложение | 17 + 5 | 22 |
- | вычитание | 17 - 5 | 12 |
* | умножение | 17 * 5 | 85 |
/ | деление, результат всегда дробный | 17 / 5 | 3.4 (и 6 / 2 даёт 3.0) |
// | целочисленное деление: сколько раз 5 целиком помещается в 17 | 17 // 5 | 3 |
% | остаток от деления | 17 % 5 | 2, потому что 17 = 3 · 5 + 2 |
** | возведение в степень | 2 ** 10 | 1024 |
Операторы // и % кажутся экзотикой, но нужны постоянно. Фильм идёт 135 минут: 135 // 60 даёт 2 полных часа,
135 % 60 — 15 оставшихся минут. Число чётное, если n % 2 равно 0. Как они ведут себя с отрицательными числами,
покажет следующий урок.
Запись вроде 17 // 5 + 17 % 5, из чисел и операторов, называется выражениемвыражениеEN expressionЗапись из значений, имён и операторов, которую Python вычисляет до одного значения, например 17 // 5 + 1..
Python вычисляет его в привычном со школы порядке — это приоритет операцийприоритет операцийEN operator precedenceПорядок вычисления: скобки, затем , затем * / // %, затем + -. Поэтому -2 2 = -4.:
- скобки;
- степень
**; - умножение и все виды деления:
*,/,//,%; - сложение и вычитание.
Действия одного уровня выполняются слева направо. Поэтому 2 + 3 * 4 — это 14, а (2 + 3) * 4 — 20.
Одна ловушка: -2 ** 2 равно -4, потому что степень считается раньше минуса. Квадрат минус двух пишут со скобками:
(-2) ** 2 — это 4. Правило на все случаи: не уверены в порядке — ставьте скобки, лишними они не бывают.
Несколько готовых функций для чисел:
print(round(97.88000000000001, 1)) # округлить до 1 знака после точки → 97.9print(abs(-5)) # модуль числа → 5print(max(3, 7, 2), min(3, 7, 2)) # наибольшее и наименьшее → 7 2Откуда в первой строке странное 97.88000000000001? Это 36.6 °C, переведённые в градусы Фаренгейта.
Дробные числа хранятся в двоичном виде с крошечной ошибкой (урок 0.0.2),
и иногда она вылезает в последнем знаке. Для вывода человеку такие числа округляют через round.
Переменные: подписанные коробки
Заголовок раздела «Переменные: подписанные коробки»Числа и тексты нужно где-то хранить. Для этого есть переменныепеременнаяEN variableВ Python переменная — это имя, привязанное к объекту, а не «коробка» с фиксированным типом.. Представьте коробку,
на которой маркером написано имя. Знак = значит: «положи в коробку с этим именем то, что справа».
price = 120 # в коробку price положили 120count = 3 # в коробку count — 3total = price * countprint(total) # → 360Сначала Python вычисляет правую часть (price * count = 360), потом кладёт результат в коробку total.
Важно: = в Python — это не равенство из математики, а команда «положить». Поэтому строка x = x + 1
совершенно законна: «возьми, что лежит в x, прибавь 1 и положи обратно». Для неё есть сокращение x += 1.
Переменная хранит значение, а не формулу. Если поменять count, то total сам не пересчитается:
count = 5 # в коробке count теперь 5, старое значение выброшеноprint(total) # → 360, а не 600: total посчитали раньше, и он не следит за countЭто главное отличие от таблицы Excel, где ячейка с формулой обновляется сама. Программа выполняется строка за строкой, и каждая строка видит значения коробок на момент своего выполнения. Проследить за этим помогает таблица трассировки: выписываем, что лежит в каждой коробке после каждой строки.
a = 5b = aa = 10print(a, b)| Шаг | Строка | a | b |
|---|---|---|---|
| 1 | a = 5 | 5 | — |
| 2 | b = a | 5 | 5 — в b положили то, что сейчас лежит в a |
| 3 | a = 10 | 10 | 5 — b не изменилась |
| 4 | print(a, b) | напечатает 10 5 |
Для чисел и строк картинка с коробками работает идеально. В следующем уроке, когда появятся списки, мы её уточним.
Как называть переменные. Имя состоит из букв, цифр и подчёркивания _ и не может начинаться с цифры.
Большие и маленькие буквы различаются: Score и score — разные коробки. Пробелы и дефисы нельзя: my-score Python
прочитает как «my минус score». Нельзя брать служебные слова языка (if, for, class, True…): class = 5
даёт SyntaxError: invalid syntax. Русские буквы в именах технически работают (цена = 10), но так не принято:
пишите латиницей, слова через подчёркивание, по смыслу — hours_per_week, а не h или x1.
СтрокастрокаEN string (str)В Python 3 строка — неизменяемая последовательность символов Юникода; длина считается в символах, а не в байтах. — это текст в кавычках. Строки можно склеивать знаком +, повторять знаком *
и измерять функцией len:
city = "Пекин"print("Город: " + city) # → Город: Пекинprint("ха" * 3) # → хахахаprint(len(city)) # → 5 — число символовprint(len("🐉")) # → 1 — эмодзи тоже один символСамое важное в этом разделе — число и строка из цифр — разные вещи:
| Выражение | Результат | Почему |
|---|---|---|
2 + 3 | 5 | сложение чисел |
"2" + "3" | "23" | склейка строк |
"2" * 3 | "222" | строка, повторённая 3 раза |
"2" + 3 | TypeError | строку с числом склеить нельзя |
Переходить между ними помогает приведение типовприведение (преобразование) типовEN type conversionint("42"), float("36.6"), str(42). Ответ input() — всегда строка, поэтому его приводят к числу. — функции с именами типов:
print(int("42") + 1) # строка → целое число → 43print(float("36.6")) # строка → дробное число → 36.6print(str(42) + "!") # число → строка → 42!print(int(3.9)) # дробное → целое: дробная часть отбрасывается → 3# int("3.5") # ValueError: invalid literal for int() with base 10: '3.5'Склеивать текст с числами можно тремя способами: через запятую в print("Итого:", total), через str и +,
и f-строкой f"Итого: {total}", которую вы видели в уроке 0.1.3. Как с её помощью красиво печатать дробные числа,
расскажет следующий урок.
input: программа слушает
Заголовок раздела «input: программа слушает»input() останавливает программу и ждёт, пока человек что-нибудь наберёт и нажмёт Enter. Текст в скобках —
подсказка, которую увидит пользователь:
name = input("Как вас зовут? ")print("Привет,", name)Как вас зовут? МэйПривет, МэйГлавное правило: input() всегда возвращает строку, даже если человек набрал цифры. Попробуем посчитать возраст
через год:
age = input("Сколько вам лет? ")print("В следующем году вам будет", age + 1)Сколько вам лет? 29Traceback (most recent call last): File "/home/user/age.py", line 2, in <module> print("В следующем году вам будет", age + 1) ~~~~^~~TypeError: can only concatenate str (not "int") to strЧитаем снизу вверх: «склеивать можно только строку со строкой, а не с целым числом». В age лежит строка "29".
Исправление — превратить её в число сразу при вводе:
age = int(input("Сколько вам лет? ")) # сначала input, потом int — как матрёшка, изнутри наружуprint("В следующем году вам будет", age + 1)Сколько вам лет? 29В следующем году вам будет 30Если человек наберёт 3.5, int не справится и выдаст ValueError. Для дробных чисел есть float(input()),
а как вежливо переспросить вместо падения, вы узнаете в уроках 0.2.4 и 0.2.6.
Почти любая программа устроена по одной схеме:
flowchart LR A["Ввод<br/>input(): получить данные"] --> B["Обработка<br/>int(), формулы, переменные"] B --> C["Вывод<br/>print(): показать результат"]
Вот она целиком на примере перевода температуры:
# Перевод температуры из Цельсия в Фаренгейтcelsius = float(input("Температура в °C: ")) # ввод: строка → дробное числоfahrenheit = celsius * 9 / 5 + 32 # обработка: формулаprint(celsius, "°C =", round(fahrenheit, 1), "°F") # выводТемпература в °C: 36.636.6 °C = 97.9 °FКомментарии
Заголовок раздела «Комментарии»Всё, что стоит после # до конца строки, — комментарийкомментарийEN commentТекст после. Python его пропускает, он пишется
для людей, в том числе для вас самих через месяц. Хороший комментарий объясняет зачем, а не пересказывает код:
price = price * 0.9 # умножаем на 0.9 ← бесполезно: это видно и такprice = price * 0.9 # скидка 10% для студентов курса ← полезно: объясняет, откуда 0.9Второе применение — временно выключить строку, не удаляя её: поставили # в начале, и Python её не выполняет.
В VS Code и Jupyter это делает сочетание Ctrl+/ (на Mac — Cmd+/) для выделенных строк.
Семь крошечных задач
Заголовок раздела «Семь крошечных задач»Решайте каждую сами — в интерактивном режиме, файлом или в Jupyter — и только потом открывайте разбор. Код из разборов набирайте руками: пальцы тоже учатся.
1. Визитка. Напечатайте три строки: ваше имя, город и фразу «Учу Python для ИИ».
Разбор
print("Мэй")print("Пекин")print("Учу Python для ИИ")То же одной командой: print("Мэй", "Пекин", "Учу Python для ИИ", sep="\n") — разделителем станет переход на новую
строку. Частая ошибка — забыть закрывающую кавычку: SyntaxError: unterminated string literal.
2. Что напечатает? Сначала ответьте в уме, заполнив таблицу трассировки, потом проверьте.
x = 3y = x * 2x = x + yprint(x, y)Разбор
9 6. После второй строки x = 3, y = 6. Третья строка берёт старый x (3), прибавляет y (6) и кладёт 9
обратно в x. На y это никак не влияет.
3. Часы и минуты. Фильм идёт 135 минут. Напечатайте 2 ч 15 мин, вычислив числа, а не написав их руками.
Разбор
total_minutes = 135hours = total_minutes // 60 # 2 — полных часовminutes = total_minutes % 60 # 15 — остатокprint(hours, "ч", minutes, "мин")Если написать total_minutes / 60, получится 2.25 — это 2 с четвертью часа, а не 2 часа 15 минут.
4. Скидка. Курс стоит 1990 рублей, скидка 15%. Сколько стоит курс со скидкой?
Разбор
price = 1990discount = 15 # процентыnew_price = price * (1 - discount / 100)print(new_price) # → 1691.5Скобки обязательны: без них price * 1 - discount / 100 даст 1989.85 — из цены вычтется 0.15 рубля.
5. Обмен. В a лежит "чай", в b — "кофе". Поменяйте содержимое местами, чтобы print(a, b) напечатал кофе чай.
Разбор
Как поменять местами напитки в двух чашках? Нужна третья, пустая:
a = "чай"b = "кофе"temp = a # перелили чай во временную чашкуa = b # в a — кофеb = temp # в b — чай из временной чашкиprint(a, b) # → кофе чайЕсли написать просто a = b и b = a, оба станут "кофе": чай потерялся на первой же строке. В следующем уроке
вы увидите питоновский трюк a, b = b, a, который делает то же самое в одну строку.
6. Цена токенов. Компании берут плату за доступ к LLM по числу токеновтокенEN tokenВ разговорной речи и статьях китайцы чаще всего пишут просто «token». — кусочков текста, которые обрабатывает модель. Пусть миллион токенов стоит 2 юаня (цена условная, реальные смотрите на сайтах провайдеров). Сколько стоит обработать книгу в 300 000 токенов?
Разбор
price_per_million = 2 # юаней за 1 000 000 токеновbook_tokens = 300_000cost = book_tokens / 1_000_000 * price_per_millionprint("Стоимость:", cost, "юаня") # → Стоимость: 0.6 юаняСначала узнаём, сколько это миллионов токенов (0.3), потом умножаем на цену миллиона. Такую прикидку «объём × цена за единицу» инженеры делают постоянно, выбирая модель под задачу.
7. A + B. Программа спрашивает два числа и печатает их сумму.
Разбор
Первая попытка почти у всех такая:
a = input("Первое число: ")b = input("Второе число: ")print("Сумма:", a + b) # ввели 20 и 30 → Сумма: 2030Ошибки нет, но ответ неверный: склеились две строки. Python промолчал, потому что склеивать строки законно. Это логическая ошибка — самая коварная (урок 0.0.3). Правильно:
a = int(input("Первое число: "))b = int(input("Второе число: "))print("Сумма:", a + b) # → Сумма: 50Практика
Заголовок раздела «Практика»Шесть задач в одном окне: калькулятор, приветствие, перевод минут в часы, температуры, «ввод» с превращением строки
в число и чек. Нажмите «▶ Запустить», чтобы увидеть, что печатает заготовка, потом заменяйте многоточия и проверяйте
кнопкой «✓ Проверить». Тесты подскажут, если вы перепутаете / и // или забудете скобки.
# Первая программа: шесть крошечных задач.
# Строки, которые начинаются с #, — комментарии. Python их пропускает.
#
# В каждой задаче замените ... (многоточие) на выражение Python.
# Над задачами есть готовые примеры — смотрите на них.
# В браузере input() не работает, поэтому «ввод» мы задаём прямо в коде переменной.
# ─── 1. Калькулятор ──────────────────────────────────────────────────────────
a = 17
b = 5
total = a + b # готовый пример: сумма, 22
quotient = ... # обычное деление a на b (знак /)
whole = ... # сколько раз b целиком помещается в a (знак //)
rest = ... # остаток от деления a на b (знак %)
# ─── 2. Приветствие ──────────────────────────────────────────────────────────
name = "Мэй"
greeting = ... # строка "Привет, Мэй!" — склейте "Привет, ", name и "!" через +
# ─── 3. Минуты в часы ────────────────────────────────────────────────────────
total_minutes = 135
hours = ... # полных часов в 135 минутах
minutes = ... # сколько минут остаётся сверх полных часов
# ─── 4. Температура ──────────────────────────────────────────────────────────
# Формула: F = C · 9 / 5 + 32, и обратно: C = (F − 32) · 5 / 9
celsius = 36.6
fahrenheit = ... # 36.6 °C по Фаренгейту
fahrenheit_rounded = ... # то же, округлённое до 1 знака: round(число, 1)
f_hot = 100
c_hot = ... # 100 °F по Цельсию (не забудьте скобки!)
# ─── 5. «Ввод» ───────────────────────────────────────────────────────────────
age_text = "29" # так выглядел бы ответ input("Сколько вам лет? ") — это СТРОКА
age = ... # превратите строку в целое число
next_year = ... # сколько лет будет через год
# ─── 6. Чек ──────────────────────────────────────────────────────────────────
price = 120
count = 3
total_price = ... # стоимость трёх товаров по 120
receipt = ... # строка "Итого: 360 руб." — число превратите в строку через str()
# Нажмите «▶ Запустить», чтобы увидеть свои ответы, и «✓ Проверить», чтобы запустить тесты.
# Пока вместо ответа стоит ..., print печатает слово Ellipsis — это нормально.
print("1.", total, quotient, whole, rest)
print("2.", greeting)
print("3.", hours, "ч", minutes, "мин")
print("4.", fahrenheit, fahrenheit_rounded, c_hot)
print("5.", age, next_year)
print("6.", receipt)
Проверь себя
Заголовок раздела «Проверь себя»- Код запускают в браузере, в интерактивном режиме
>>>, файломpython hello.pyи в Jupyter. В файле на экран попадает только то, что передали вprint. - Семь арифметических операторов:
+ - * / // % **. Деление/всегда даёт дробное число,//— целую часть,%— остаток. Порядок как в школе, а в сомнительных местах помогут скобки. - Переменная — подписанная коробка:
=кладёт в неё значение правой части. Значение не пересчитывается само, когда меняются другие переменные. - Строки склеиваются
+и повторяются*."2" + "3"— это"23", а"2" + 3— ошибка. input()всегда возвращает строку; числа из неё получают черезint(...)иfloat(...).
Дальше: урок 0.2.1 «Переменные, типы, условия, циклы». Программа научится принимать решения (if) и повторять
действия (for, while), а вы познакомитесь со списками и словарями — главными контейнерами данных в ML-коде.