Лабораторная №1. Синтаксис, семантика, алфавит и типы данных Python

Основы программирования на Python · Лабораторная работа №1

Синтаксис, семантика, алфавит, лексемы, правила и типы данных

Любой код — это строгий алгоритм. Чтобы программа работала, она должна быть написана по правилам языка (синтаксис) и быть осмысленной (семантика).

1 Что такое синтаксис и семантика

Синтаксис языка — совокупность правил, определяющих допустимые языковые конструкции. Это ответ на вопрос «из каких знаков и в каком порядке вообще можно составить команду».

Семантика языка — совокупность правил, определяющих смысл синтаксически корректных конструкций. Это ответ на вопрос «что эта команда означает и что она сделает при выполнении».

Аналогия с естественным языком «Иду я домой» — синтаксис и смысл в порядке. «Домой я иду» — тоже понятно. А вот «Иду я домой домой» написано теми же словами, но смысл уже нарушен. Так и в коде: правильные символы ещё не гарантируют правильный результат.

Из лекции: у нас есть выражение для обработки, и переходы между этапами обработки обусловлены синтаксисом. Но чтобы связка сработала, выражение должно удовлетворять ещё и требованиям семантики — быть логичным и понятным в рамках языковой логики (например, на вопрос можно ответить «ДА» или «НЕТ»).

Демонстрационный код
# Синтаксически корректно И семантически верно: число + число = число
x = 5
y = 3 print(x + y)          # 8 # Синтаксис тот же, но семантика разная из-за ТИПОВ данных:
a = "5"
b = "3" print(a + b)          # 53  — строки СКЛЕИВАЮТСЯ, а не складываются # Синтаксически корректно, но семантическая ошибка (сложить число и строку нельзя) print(x + a)  # Это вызовет ошибку TypeError

2 Алфавит языка: допустимые и недопустимые символы

Программа — это текст, а текст состоит из символов. Классический алфавит Python (по материалам лекции) включает четыре группы знаков:

ГруппаСимволы
Буквы латинского алфавитаA…Z, a…z
Цифры0 1 2 3 4 5 6 7 8 9
Знаки операций+ - = > < / % ~ ! и другие
Неотображаемые символыпробел, табуляция, переход на новую строку
Почему пробелы и табуляция — тоже часть алфавита? Python построен на блочной структуре: интерпретатор по отступам, которые мы сами создаём, разбивает процесс на подпроцессы. Поэтому «пустые» символы несут смысл и не могут быть расставлены как попало.

Что можно, а что нельзя

  • можно латинские буквы, цифры и знак подчёркивания в именах;
  • можно любые символы (включая кириллицу) внутри строк и в комментариях;
  • нельзя начинать имя с цифры: 1x = 5;
  • нельзя использовать в имени знаки операций и пробелы: my-var, my var;
  • нельзя занимать под имя ключевые слова (class, if, for…). В редакторах кода они обычно автоматически подсвечиваются другим цветом.
Демонстрационный код
# ДОПУСТИМЫЕ имена
x1 = 10
_sum = 3.14
result_2 = True
user_name = "Анна" # кириллица ВНУТРИ строки — можно print(x1, _sum, result_2, user_name)

# НЕДОПУСТИМЫЕ конструкции (приведут к ошибке синтаксиса): # 1x = 5        # имя не может начинаться с цифры # my-var = 1   # дефис — это минус, а не часть имени # class = 5    # class — зарезервированное слово # $ = 1        # знак $ не входит в алфавит имён
Важное замечание Python 3 технически допускает буквы Unicode (в т.ч. кириллицу) в именах переменных. Но по стандарту этого курса алфавит имён — латиница. Пишите имена латиницей: так код читаем в любой среде и не ломается при переносе.

3 Лексемы языка

Лексема — это единица текста программы, которая воспринимается компилятором (интерпретатором) как единое целое. Проще говоря, это минимальный «кирпичик» кода. Лексемы бывают пяти видов:

Вид лексемыНазначениеПример
Идентификаторыимена переменныхx, user_name
Идентификаторыимена функцийprint, len, type
Идентификаторыимена типовint, float
Ключевые словазарезервированные слова языкаif, else, while, for
Знаки операцийдействия над значениями+ - = == != >= <= / // %
Константынеизменяемые значенияTrue, False, 42, 3.14, "текст"
Разделителиразделяют части программыпробел, табуляция, ( ) [ ] { } : ; , " "
Частая ошибка новичка Забыли закрывающую кавычку или скобку — интерпретатор «собирает» лексему до конца файла и выдаёт ошибку. Одна кавычка открывающая, другая закрывающая — тоже ошибка.
Демонстрационный код
# В одной строке ниже собраны лексемы РАЗНЫХ видов: #   x   -> идентификатор (имя переменной) #   =   -> знак операции (присваивание) #   10  -> константа
x = 10 # Ключевые слова нельзя использовать как имена: import keyword
print("Всего ключевых слов:", len(keyword.kwlist))
print(keyword.kwlist)

# Разделители: пробелы, запятые, скобки, двоеточие print("x положительное", x) # Пример вывода с разделителем-запятой

4 Типы данных в Python

Тип данных определяет, какие значения может хранить переменная и какие операции с ней допустимы. Узнать тип можно функцией type().

ТипКлассПримерИзменяемый?
Целое числоint42, -10, 0
Вещественное числоfloat3.14, 0.1, -2.5
Комплексное числоcomplex2+3j
ЛогическийboolTrue, False
Строкаstr"Hello, world!"нет
Списокlist[1, 2, 3]да
Кортежtuple(1, 2, 3)нет
Множествоset{1, 2, 3}да
Словарьdict{"name": "John"}да
Пустое значениеNoneTypeNone
Ключевое отличие коллекций Кортеж (tuple) — неизменяемый, элементы поменять нельзя. Список (list) — изменяемый: можно добавлять, удалять и менять элементы. Кортежи часто используют там, где данные должны оставаться постоянными (например, как ключи словаря).

Пока что мы сосредоточимся на целых числах, вещественных числах и строках. Во второй части курса будем работать со списками и словарями. Также периодически будем применять логические значения (True/False).

Демонстрационный код
samples = [
    42,                    # int 3.14,                  # float 2 + 3j,                # complex True,                  # bool "Hello, world!",       # str
    [1, 2, 3],            # list
    (1, 2, 3),            # tuple
    {1, 2, 3},            # set
    {"name": "John"},      # dict None,                  # NoneType
]
print(samples[0])
print(samples[1])
print(samples[4])
print(samples[5])
print(samples[6])
print(samples[7])
print(samples[8])
print(samples[9])

# Примеры проверки типов данных: print(type(42))          # <class 'int'> print(type("Hello"))     # <class 'str'> print(type([1, 2]))     # <class 'list'> 

5 Переменные и их определение

Переменная — это именованная область памяти, используемая для хранения данных, которые могут изменяться в процессе выполнения программы.

В Python переменные создаются автоматически в момент первого присваивания значения с помощью оператора =. Явное объявление типа не требуется.

Примеры создания переменных
x = 10 # целое число (int)
name = "Python" # строка (str)
pi = 3.14 # вещественное число (float)
is_active = True # логический тип (bool)

6 Функции и их определение

Функция — это именованный блок кода, предназначенный для выполнения определенной задачи. Функции позволяют избегать дублирования кода и делают программу структурированной.

Виды функций

  • Встроенные функции — уже созданы в самом языке (например, print(), len()).
  • Пользовательские функции — создаются программистом с помощью ключевого слова def.

Как работают функции: аргументы

Для работы функции часто требуются входные данные. Эти данные называются аргументами. Они передаются в функцию внутри круглых скобок.

Пример вызова функции с аргументом
print("Привет!") # "Привет!" — это аргумент функции print

Базовые встроенные функции

ФункцияОписаниеПример
print()Вывод данных на экранprint(10)
input()Получение данных от пользователяname = input("Введите имя: ")
int()Преобразование значения в целое числоint("5") # станет 5
str()Преобразование значения в строкуstr(100) # станет "100"
Демонстрационный код
x = input("Введите имя: ")
print(x)

x = "5" print(x, "это", type(x))
x = int(x)
print(x, "это", type(x))

7 Правила синтаксиса Python

Синтаксис — это «орфография» языка. Вот базовые правила, которые проверяет интерпретатор:

  • Одна инструкция — одна строка. Несколько команд можно разделить ;.
  • Блоки выделяются отступами. Несколько строк с одинаковым отступом образуют блок.
  • Вход в блок — двоеточие : после if, for, while, def.
  • Скобки и кавычки парные: каждую ( [ { и " ' нужно закрыть.
  • Имена разделяются пробелами — два идентификатора подряд недопустимы.
  • Python чувствителен к регистру: x и X — разные имена.
  • Сравнение — это ==, присваивание — =. Не путайте.
Принцип «1 вход — 1 выход» Любую программу можно собрать из трёх конструкций: следование, ветвление и цикл. Каждая конструкция имеет одну точку входа и одну точку выхода.
Демонстрационный код: правильно и неправильно
# ПРАВИЛЬНО: Все команды выполняются последовательно, у них одинаковый отступ от начала строки
x = 1
y = 2
z = 'три' print(x)
print(y)
print(z)

# НЕПРАВИЛЬНО: такие строки вызовут ошибку синтаксиса
    x = 5 # лишний отступ в начале файла
x = (1 + 2 # незакрытая скобка
if x = 5: pass            # присваивание (=) вместо сравнения (==)

8 Виды деления в Python

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

  • Обычное деление (/) — возвращает частное с дробной частью. Результат всегда имеет тип float.
  • Целочисленное деление (//) — возвращает только целую часть результата, «отбрасывая» дробную.
  • Остаток от деления (%) — возвращает только остаток, который остался после целочисленного деления.
Демонстрационный код
print(10 / 3)    # 3.3333333333333335 — обычное деление print(10 // 3)   # 3 — целочисленное деление print(10 % 3)    # 1 — остаток от деления

9 Операции сравнения

Операции сравнения используются для сопоставления двух значений. Результатом любой такой операции всегда является логический тип (bool) — либо True (истина), либо False (ложь).

ОператорЗначениеПример
==Равно5 == 5 # True
!=Не равно5 != 3 # True
>Больше5 > 3 # True
<Меньше3 < 5 # True
>=Больше или равно5 >= 5 # True
<=Меньше или равно3 <= 2 # False
Демонстрационный код
print('5 == 5', 5 == 5)  # True print('5 != 3', 5 != 3)  # True print('5 > 3', 5 > 3)   # True print('5 < 3', 5 < 3)   # False print('5 >= 5', 5 >= 5)  # True print('6 >= 5', 6 >= 5)  # True print('3 <= 2', 3 <= 2)  # False
Не путайте! Одиночный знак = — это присваивание значения переменной. Двойной знак == — это сравнение двух значений.

10 Два вида ошибок

Ошибки в программе делятся на два больших класса — и ведут они себя по-разному.

1. Синтаксические ошибки (SyntaxError)

Нарушены правила написания: пропущено двоеточие, не закрыта скобка или кавычка, неправильный отступ, = вместо ==. Программа не запустится вообще: интерпретатор отказывается её выполнять и указывает строку с ошибкой. Такие ошибки нельзя «поймать» через try/except.

2. Ошибки выполнения (их вызывает неправильное написание/использование функций)

Синтаксис верен, программа запускается, но ломается во время работы — потому что функция вызвана неверно или данные не того типа. Примеры: NameError (функция/имя не определено), TypeError (неверный тип аргумента), ValueError (неверное значение), ZeroDivisionError (деление на ноль), IndexError (выход за границы). Эти ошибки можно перехватить try/except.

Демонстрация: синтаксические ошибки
# Примеры строк, которые вызовут SyntaxError (не запустятся вообще): # print('hi)         # ошибка: незакрытая кавычка # x = (1 + 2         # ошибка: незакрытая скобка # if True    print(1)    # ошибка: пропущено двоеточие # if x = 5: pass      # ошибка: = вместо сравнения (==)
Демонстрация: ошибки выполнения (неправильное использование функций)
# Примеры ошибок выполнения (программа запустится, но упадет): # len(5)               # TypeError: len() не работает с числом # int('привет')      # ValueError: строку нельзя превратить в число # 10 / 0            # ZeroDivisionError: деление на ноль # prynt()    # NameError: такой функции нет # x = y     # ошибка: переменной присвоено значение другой переменной
Вывод Синтаксис проверяется до запуска — ошибка видна сразу. Ошибку выполнения видно только во время работы, поэтому программу нужно тестировать на разных данных (см. этапы разработки программ из лекции).

11 Итог

  • Синтаксис — как правильно написать, семантика — что это значит.
  • Алфавит — латинские буквы, цифры, знаки операций и неотображаемые символы.
  • Лексемы — идентификаторы, ключевые слова, операции, константы, разделители.
  • Синтаксис Python — отступы, двоеточия, парные скобки, регистр, == для сравнения.
  • Типы данныхint, float, complex, bool, str, list, tuple, set, dict, NoneType.
  • Деление — обычное (/), целочисленное (//) и остаток (%).
  • Сравнение — операции ==, !=, >, <, >=, <=, результат которых всегда bool.
  • Ошибки — синтаксические (до запуска) и ошибки выполнения (из-за неверного использования функций).