Перейти к содержимому
Ступень 00.2 Python с нуля

Первая программа

Самые первые шаги в Python для тех, кто никогда не программировал — print, числа и арифметика, переменные-коробки, строки, input и комментарии; три способа запустить код и семь крошечных задач с разбором.

УРОКstage-0/0-2-python/00-first-program.mdx1 ч 30 минУрок 1 из 7
После урока вы сможете
  • Запустить код на Python тремя способами — в браузере, в терминале и в Jupyter — и понимать, чем они отличаются
  • Считать на Python как на калькуляторе: + - * / // % ** и порядок действий
  • Хранить данные в переменных, склеивать строки и превращать ответ input() в число
  • Читать короткую программу строка за строкой и предсказывать, что она напечатает

Вы уже набирали строки на Python: в уроке 0.0.2 — print и арифметику прямо в браузере, в уроке 0.1.3 — первую функцию для автопроверки. Тогда мы просили поверить на слово. С этого урока начинается Python по-настоящему: разберём каждый символ, и ни одна строка больше не будет заклинанием.

Любой скрипт обучения нейросети, даже у DeepSeek и Qwen, устроен из тех же кирпичиков, что и программы этого урока. Он получает данные (читает текст), считает (умножает числа) и сообщает результат (печатает loss). Получить, посчитать, показать — к концу урока вы будете уметь все три действия.

Вот программа из пяти строк. Сейчас она может выглядеть загадочно, но через час вы объясните каждый её символ:

# Сколько недель займёт курс?
course_hours = 470 # примерно столько часов в курсе ChinaAI
hours_per_week = 10 # сколько часов в неделю вы готовы заниматься
weeks = course_hours / hours_per_week
print("Недель до финиша:", 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. Запустим первую программу файлом:

  1. В VS Code откройте папку для учёбы и создайте файл hello.py (File → New File). Имя — латиницей, без пробелов.

  2. Напишите в нём одну строку: print("Привет, мир!") и сохраните файл (Ctrl+S).

  3. Откройте встроенный терминал (Terminal → New Terminal) и выполните python hello.py. Если система ответит python: command not found, пишите python3 hello.py.

  4. В терминале появится Привет, мир!. Это ваша первая программа, запущенная по-взрослому.

А в интерактивном режимеинтерактивный режим (REPL)EN REPL, interactive modeRead–Eval–Print Loop: Python читает строку, вычисляет и сразу показывает результат. Приглашение — >>>. Python отвечает на каждую строку сразу, как калькулятор:

>>> 2 + 3
5
>>> "ха" * 3
'хахаха'
>>> exit()

Кавычки вокруг 'хахаха' интерактивный режим добавляет сам, чтобы было видно: это текст, а не число. 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 + 522
-вычитание17 - 512
*умножение17 * 585
/деление, результат всегда дробный17 / 53.4 (и 6 / 2 даёт 3.0)
//целочисленное деление: сколько раз 5 целиком помещается в 1717 // 53
%остаток от деления17 % 52, потому что 17 = 3 · 5 + 2
**возведение в степень2 ** 101024

Операторы // и % кажутся экзотикой, но нужны постоянно. Фильм идёт 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.:

  1. скобки;
  2. степень **;
  3. умножение и все виды деления: *, /, //, %;
  4. сложение и вычитание.

Действия одного уровня выполняются слева направо. Поэтому 2 + 3 * 4 — это 14, а (2 + 3) * 4 — 20. Одна ловушка: -2 ** 2 равно -4, потому что степень считается раньше минуса. Квадрат минус двух пишут со скобками: (-2) ** 2 — это 4. Правило на все случаи: не уверены в порядке — ставьте скобки, лишними они не бывают.

Несколько готовых функций для чисел:

print(round(97.88000000000001, 1)) # округлить до 1 знака после точки → 97.9
print(abs(-5)) # модуль числа → 5
print(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 положили 120
count = 3 # в коробку count — 3
total = price * count
print(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 = 5
b = a
a = 10
print(a, b)
ШагСтрокаab
1a = 55—
2b = a55 — в b положили то, что сейчас лежит в a
3a = 10105 — b не изменилась
4print(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 + 35сложение чисел
"2" + "3""23"склейка строк
"2" * 3"222"строка, повторённая 3 раза
"2" + 3TypeErrorстроку с числом склеить нельзя

Переходить между ними помогает приведение типовприведение (преобразование) типовEN type conversionint("42"), float("36.6"), str(42). Ответ input() — всегда строка, поэтому его приводят к числу. — функции с именами типов:

print(int("42") + 1) # строка → целое число → 43
print(float("36.6")) # строка → дробное число → 36.6
print(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() останавливает программу и ждёт, пока человек что-нибудь наберёт и нажмёт Enter. Текст в скобках — подсказка, которую увидит пользователь:

name = input("Как вас зовут? ")
print("Привет,", name)
Как вас зовут? Мэй
Привет, Мэй

Главное правило: input() всегда возвращает строку, даже если человек набрал цифры. Попробуем посчитать возраст через год:

age = input("Сколько вам лет? ")
print("В следующем году вам будет", age + 1)
Сколько вам лет? 29
Traceback (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(): показать результат"]
Ввод → обработка → вывод: так устроены и калькулятор, и скрипт обучения LLM

Вот она целиком на примере перевода температуры:

# Перевод температуры из Цельсия в Фаренгейт
celsius = float(input("Температура в °C: ")) # ввод: строка → дробное число
fahrenheit = celsius * 9 / 5 + 32 # обработка: формула
print(celsius, "°C =", round(fahrenheit, 1), "°F") # вывод
Температура в °C: 36.6
36.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 = 3
y = x * 2
x = x + y
print(x, y)
Разбор

9 6. После второй строки x = 3, y = 6. Третья строка берёт старый x (3), прибавляет y (6) и кладёт 9 обратно в x. На y это никак не влияет.

3. Часы и минуты. Фильм идёт 135 минут. Напечатайте 2 ч 15 мин, вычислив числа, а не написав их руками.

Разбор
total_minutes = 135
hours = total_minutes // 60 # 2 — полных часов
minutes = total_minutes % 60 # 15 — остаток
print(hours, "ч", minutes, "мин")

Если написать total_minutes / 60, получится 2.25 — это 2 с четвертью часа, а не 2 часа 15 минут.

4. Скидка. Курс стоит 1990 рублей, скидка 15%. Сколько стоит курс со скидкой?

Разбор
price = 1990
discount = 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_000
cost = book_tokens / 1_000_000 * price_per_million
print("Стоимость:", 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

Шесть задач в одном окне: калькулятор, приветствие, перевод минут в часы, температуры, «ввод» с превращением строки в число и чек. Нажмите «▶ Запустить», чтобы увидеть, что печатает заготовка, потом заменяйте многоточия и проверяйте кнопкой «✓ Проверить». Тесты подскажут, если вы перепутаете / и // или забудете скобки.

Первая программа: шесть крошечных задач7 тестов
# Первая программа: шесть крошечных задач.
# Строки, которые начинаются с #, — комментарии. 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)
Проверь себя6 вопросов
1 Что напечатает print(17 // 5 + 17 % 5)?
2 Программа x = input() получила от пользователя 7. Что напечатает print(x * 3)?
3 Какие имена переменных допустимы в Python?Можно выбрать несколько ответов
4 Чему равно a после строк a = 4, b = a * 2, a = a + b?
5 Что напечатает print(-3 ** 2)?
6 В файле hello.py одна строка: 2 + 3. Что произойдёт после python hello.py?
  • Код запускают в браузере, в интерактивном режиме >>>, файлом python hello.py и в Jupyter. В файле на экран попадает только то, что передали в print.
  • Семь арифметических операторов: + - * / // % **. Деление / всегда даёт дробное число, // — целую часть, % — остаток. Порядок как в школе, а в сомнительных местах помогут скобки.
  • Переменная — подписанная коробка: = кладёт в неё значение правой части. Значение не пересчитывается само, когда меняются другие переменные.
  • Строки склеиваются + и повторяются *. "2" + "3" — это "23", а "2" + 3 — ошибка.
  • input() всегда возвращает строку; числа из неё получают через int(...) и float(...).

Дальше: урок 0.2.1 «Переменные, типы, условия, циклы». Программа научится принимать решения (if) и повторять действия (for, while), а вы познакомитесь со списками и словарями — главными контейнерами данных в ML-коде.