Лекция №1. Основные элементы языка программирования. Типы переменных, выражения.

Хорошевич Павел Александрович

Введение в Python

Язык программирования Python

Python - это высокоуровневый язык программирования, известный своей простотой и читаемостью кода.

Создан Гвидо ван Россумом и впервые выпущен в 1991 году.

Особенности:

  • Интерпретируемый язык.
  • Поддержка различных парадигм программирования: процедурное, объектно-ориентированное, функциональное.
  • Богатая стандартная библиотека и множество сторонних модулей.

Преимущества:

  • Простота синтаксиса.
  • Высокая производительность для скриптовых задач.
  • Большое сообщество программистов и поддержка1.

Области применения

  • Научные исследования: анализ данных и визуализация данных (NumPy, Pandas, SciPy, Matplotlib, Seaborn).
  • Машинное обучение и ИИ: разработка моделей с помощью TensorFlow, PyTorch, Scikit-learn.
  • Веб-разработка: создание веб-приложений с Django, Flask.
  • Автоматизация: написание скриптов для автоматизации задач.
  • Разработка программного обеспечения: создание настольных и мобильных приложений.
  • Обработка больших данных: использование в проектах по анализу больших данных.

Установка. Среда программирования

Скачивание с официального сайта python.org.

Среды программирования:

  • IDLE: Встроенная среда разработки, поставляемая с Python.
  • Jupyter Lab: Интерактивная среда для выполнения кода, особенно полезна для научных вычислений.
  • PyCharm: Мощная профессиональная среда разработки от JetBrains.
  • Visual Studio Code: Легкая и гибкая среда с поддержкой множества расширений для Python.

Элементы языка программирования

Литерал - фиксированное значение, записанное в коде программы.

Примеры:

2               # целое число
3.1415          # вещественное число
"Знание - сила" # строка
None            # "пустое" значение

Для выполнения действий над данными используются операторы.

Операторы и операнды

Оператор выполняет действия над операндами.

Выражение

Выражение

Операторы Python по приоритету выполнения:

  1. Скобки (): 3 * (4 - 1) = 9
  2. Вызов функции.
  3. Возведение в степень **: 2 ** 3 = 8
  4. Умножение *, деление /, целочисленное деление //, остаток от деления %.
  5. Сложение +, вычитание -.

Остаток от деления и целочисленное деление

% - остаток от деления.

10 % 2 # = 0
10 % 3 # = 1

// - целочисленное деление.

10 / 2  # = 5.0 - вещественное число
10 // 2 # = 5   - целое число
10 // 4 # = 2
10 / 4  # = 2.5

Выражения

Выражение - это комбинация литералов, имён переменных и операторов.

Встретив выражение, Python начнёт его вычисление.

Значение - это результат вычисления выражения, объект в памяти компьютера.

Схема 1

Схема 1

Типы данных

Значения можно классифицировать по их типу. Для каждого типа есть набор литералов.

Простые типы данных:

  • Целые числа - int: -2, -1, 0, 1
  • Вещественные числа - float: 0.5, 1.0, 1.25, 1.602e-19
  • Строки - str: 'aaa', "Привет!", """11 котов"""

Схема 2

Схема 2

Переменные

Переменная - это имя, которое ссылается на значение.

Имена в Python регистрозависимые. Пример: имена student и Student для Python разные.

  1. Может состоять из одного слова (без пробелов).
  2. Может состоять только из букв, цифр и символа подчёркивания _.
  3. Не может начинаться с цифры.

Пример:

message = "Как дела?"   # переменная строка
n = 17                  # переменная с целым числом
pi = 3.14159            # переменная с вещественным числом

Инструкция присваивания = связывает имя переменной с её значением.

x = 3
y = x
x = 9.8
y = "N"

Значения, на которые нет ни одной ссылки, удаляются сборщиком мусора (garbage collector).

Переменная ссылается на значение

Переменная ссылается на значение

Две переменные ссылаются на одно значение

Две переменные ссылаются на одно значение

Переменная x ссылается на новое значение

Переменная x ссылается на новое значение

Одно из значений осталось без ссылок

Одно из значений осталось без ссылок

В Python не нужно указывать тип объекта при его создании.

Динамическая типизация – типы данных определяются автоматически при создании объекта.

Сильная типизация – над объектом можно выполнять только те операции, которые применимы к его типу.

Формы присваивания

  • Стандартная: st = "Python"
  • Позиционное присваивание: a, b = "Один", "Два"
  • Групповое присваивание: x = y = z = 10
  • Комбинированное присваивание: age += 1

Схема 3

Схема 3

Инструкции

Инструкция - это минимальный набор действий, которые может выполнить интерпретатор.

Программа состоит из набора инструкций. Инструкции состоят из идентификаторов и выражений.

После выполнения инструкции есть эффект её выполнения, но нет конкретного значения-результата выполнения инструкции.

К инструкциям относится присваивание, ввод и вывод значений, алгоритмические конструкции (if, while, for), импорт модулей (import).

Зарезервированные слова

Некоторые инструкции записываются с помощью зарезервированных слов (keywords). Зарезервированные слова языка программирования Python нельзя использовать в качестве идентификаторов (имён).

False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield

Математические выражения. Модуль math

Импорт модуля в скрипт:

import math

Обращение к функциям происходит через оператор-точку .:

math.pi         # Приблизительное значение числа Пи
math.sqrt(x)    # Корень квадратный из x
math.sin(a)     # Синус угла a в радианах

Вывод данных. Функция print()

Формы записи функции print:

print(<выражение1>, <выражение2>, … <выражениеN>)
print() 

Вывод выражения закончится пробелом:

print(<выражение>, end=" ")

Пример:

print(3 + 5 - 7)
print(3, 6, 6 * 2)
print()
print("Ответ равен ", 4 * 5)
print("Ответ равен", end=" ")
print(4 * 5)

Форматированный вывод

Для форматирования вывода используются f-строки:

f"Тест сообщения {<выражение>}"

В начале f-строки ставиться буква f.

Значение, которые необходимо подставить в строку, записываются в фигурных скобках.

name = "Python"
year = 1991
answer = f"{name}, вам примерно {2026 - year} лет."
print(answer)

Ввод значений. Функция input()

Для ввода данных используется функция input():

<переменная> = input(<строковое значение>)
x = input("Приглашение к вводу...")

Функция input() всегда возвращает данные строкового типа.

С помощью следующих функций можно преобразовать значения одного типа в другой:

  • в целое число: int()
  • в вещественное число: float()
  • в строку: str()

Схема 4

Схема 4

Алгоритм решения задач

  1. Анализ проблемы: выясните, в чем именно заключается проблема, которую необходимо решить.
  2. Определение спецификации: на данном этапе нужно определить что должна делать программа, а не то как она это будет делать. Определите входные и выходные данные и как они связаны между собой.
  3. Описание алгоритма: определитесь со структурой программы. На этом шаге необходимо решить как будет работать программа.
  1. Реализация алгоритма: с помощью языка программирования создайте компьютерную программу на основе алгоритма решения.
  2. Тестирование/отладка: проверьте работу программы и исправьте ошибки (дебагинг). Протестируйте программу на разных входных данных.
  3. Поддержка программы: после разработки следует этап поддержки программы, согласно отзывам пользователей.

Задача

Рассчитайте общее сопротивление двух резисторов R1 и R2, подключённых параллельно.

  1. Какие данные вводит пользователь? Какие данные должны получиться на выходе?
    • Ввод: R1, R2. Вывод: R.
  2. Как входные данные связаны с выходными?
    • \(R=\frac{R_1 \cdot R_2}{R_1+R_2}\)
  3. Опишите алгоритм работы программы.

Алгоритм решения

Блок-схема

Блок-схема

# ввод значения первого сопротивления

# ввод значения второго сопротивлен


# вычисляем общее сопротивление по формуле


# вывод результата на экран

# ввод значения первого сопротивления
R1 = input("R1:")
# ввод значения второго сопротивлен
r2 = input("R2:")

# вычисляем общее сопротивление по формуле
R = R1 * R2 / R1 + R2

# вывод результата на экран
print(f"R = {R} Ом)

Проведём отладку и тестирование программы.

Отладка

# ввод значения первого сопротивления
R1 = input("R1:")
# ввод значения второго сопротивлен
r2 = input("R2:")

# вычисляем общее сопротивление по формуле
R = R1 * R2 / R1 + R2

# вывод результата на экран
print(f"R = {R} Ом)

Отладка

# ввод значения первого сопротивления
R1 = float(input("R1:"))
# ввод значения второго сопротивлен
r2 = float(input("R2:"))

# вычисляем общее сопротивление по формуле
R = R1 * R2 / R1 + R2

# вывод результата на экран
print(f"R = {R} Ом)

Отладка

# ввод значения первого сопротивления
R1 = float(input("R1:"))
# ввод значения второго сопротивлен
R2 = float(input("R2:"))

# вычисляем общее сопротивление по формуле
R = R1 * R2 / R1 + R2

# вывод результата на экран
print(f"R = {R} Ом)

Отладка

# ввод значения первого сопротивления
R1 = float(input("R1:"))
# ввод значения второго сопротивлен
R2 = float(input("R2:"))

# вычисляем общее сопротивление по формуле
R = R1 * R2 / (R1 + R2)

# вывод результата на экран
print(f"R = {R} Ом)

Отладка

# ввод значения первого сопротивления
R1 = float(input("R1:"))
# ввод значения второго сопротивлен
R2 = float(input("R2:"))

# вычисляем общее сопротивление по формуле
R = R1 * R2 / (R1 + R2)

# вывод результата на экран
print(f"R = {R} Ом")