🐍 Уроки Python для начинающих

Полный курс программирования с нуля. Изучайте Python шаг за шагом с практическими примерами.

🔹 Урок 1: Знакомство с Python

1. Что такое Python?

Python — это язык программирования, который:

2. Установка Python

Windows:

  1. Скачайте Python с официального сайта
  2. В установщике отметьте галочку Add Python to PATH
  3. Нажмите Install Now
# Проверка установки
python --version
# Должно показать версию Python, например: Python 3.11.4
Практика

Задание 1: Установите Python и запустите интерактивный режим.

Задание 2: Напишите программу, которая выводит ваше имя и возраст.

Советы

Если Python не запускается, проверьте, что вы добавили его в PATH при установке.

🔹 Урок 2: Переменные и типы данных

1. Что такое переменная?

Переменная — это "коробка", в которой хранятся данные:

name = "Анна"  # Текст
age = 25       # Число
is_student = True  # Логическое значение

2. Основные типы данных

Тип Пример Описание
int 5, -10 Целые числа
float 3.14 Дробные числа
str "Привет" Текст (строка)
Практика

Задание 1: Создайте переменные name (ваше имя) и age (ваш возраст), выведите их.

Задание 2: Преобразуйте строку "123" в число и умножьте её на 2.

🔹 Урок 3: Операторы в Python

1. Арифметические операторы

print(10 + 3)   # 13 (сложение)
print(10 - 3)   # 7 (вычитание)
print(10 * 3)   # 30 (умножение)
print(10 / 3)   # 3.333... (деление)
print(10 // 3)  # 3 (целочисленное деление)
print(10 % 3)   # 1 (остаток от деления)
print(10 ** 3)  # 1000 (возведение в степень)
Практика

Задание: Напишите программу, которая проверяет, делится ли число на 3 без остатка.

🔹 Урок 4: Ввод и вывод данных

1. Функция input()

Для получения данных от пользователя:

name = input("Введите ваше имя: ")
print("Привет, " + name + "!")

2. Форматирование строк

Современный способ (f-строки):

age = 25
print(f"Мне {age} лет")
Практика

Задание: Создайте программу, которая запрашивает год рождения и вычисляет возраст.

🔹 Урок 5: Условные конструкции

1. Полный синтаксис if-elif-else

if условие1:
    # выполняется, если условие1 истинно
elif условие2:
    # выполняется, если условие2 истинно
else:
    # выполняется, если все условия ложны

Важно: Порядок условий имеет значение! Интерпретатор проверяет условия сверху вниз.

Интерактивный пример: Калькулятор BMI

weight = float(input("Ваш вес (кг): "))
height = float(input("Ваш рост (м): "))
bmi = weight / (height ** 2)

if bmi < 18.5:
    category = "Недостаточный вес"
elif 18.5 <= bmi < 25:
    category = "Норма"
elif 25 <= bmi < 30:
    category = "Избыточный вес"
else:
    category = "Ожирение"

print(f"Ваш BMI: {bmi:.1f} ({category})")

Как это работает: Программа вычисляет индекс массы тела и определяет категорию.

Частые ошибки

  • Забывают двоеточие после условий
  • Путают = (присваивание) и == (сравнение)
  • Неправильные отступы в блоках кода
Практические задания
  1. Напишите программу, которая определяет, является ли число чётным или нечётным.
  2. Создайте калькулятор с обработкой деления на ноль.
  3. Реализуйте систему логина с проверкой пароля.

🔹 Урок 6: Циклы

Зачем нужны циклы?

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

1. Цикл while с обработкой ввода

Базовый синтаксис

while условие:
            # выполняемый блок кода
            # пока условие истинно

Практический пример: проверка пароля

attempts = 3
correct_password = "python123"

while attempts > 0:
    password = input("Введите пароль: ")
    if password == correct_password:
        print("Доступ разрешен!")
        break
    attempts -= 1
    print(f"Неверный пароль! Осталось попыток: {attempts}")
else:
    print("Доступ запрещен!")

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

  • Используется, когда неизвестно количество итераций
  • Может стать бесконечным, если условие всегда True
  • Часто применяется для обработки пользовательского ввода

⚠️ Важно!

Всегда убедитесь, что условие цикла while в какой-то момент станет False, иначе получите бесконечный цикл:

# Бесконечный цикл (не делайте так!)
while True:
    print("Это никогда не закончится!")

2. Цикл for

Базовый синтаксис

for элемент in последовательность:
    # выполняемый блок кода
    # для каждого элемента

Работа с разными типами данных

# Перебор строки
for letter in "Python":
    print(letter)

# Перебор списка
fruits = ["яблоко", "банан", "апельсин"]
for fruit in fruits:
    print(f"Я люблю {fruit}")

# Перебор словаря
person = {"имя": "Анна", "возраст": 25, "город": "Москва"}
for key, value in person.items():
    print(f"{key}: {value}")

Функция range()

# Генерация последовательности чисел
for i in range(5):        # 0, 1, 2, 3, 4
    print(i)

for i in range(2, 6):     # 2, 3, 4, 5
    print(i)

for i in range(1, 10, 2): # 1, 3, 5, 7, 9
    print(i)

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

  • Используется, когда известно количество итераций или нужно перебрать элементы
  • Автоматически завершается после обработки всех элементов
  • Поддерживает break, continue и else

3. Управление циклами

Операторы break и continue

# break - досрочное завершение цикла
for num in range(10):
    if num == 5:
        break
    print(num)  # 0, 1, 2, 3, 4

# continue - переход к следующей итерации
for num in range(5):
    if num == 2:
        continue
    print(num)  # 0, 1, 3, 4

Блок else в циклах

for i in range(3):
    print(i)
else:
    print("Цикл завершен без break")

Практические задания

  1. Напишите программу, которая выводит все четные числа от 1 до 100
  2. Создайте калькулятор, который работает до тех пор, пока пользователь не введет "выход"
  3. Напишите программу для подсчета количества каждой буквы в введенной строке
  4. Реализуйте игру "Угадай число", где компьютер загадывает число от 1 до 100

🔹 Урок 7: Коллекции данных: списки и словари

1. Списки (list)

Что это: Упорядоченные изменяемые коллекции элементов одного или разных типов.

Зачем нужны: Для хранения и обработки наборов данных, где важен порядок элементов.

# Создание списка
fruits = ["яблоко", "банан", "апельсин"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "текст", True, 3.14]  # Можно смешивать типы

# Основные операции
fruits.append("киви")       # Добавление в конец
fruits.insert(1, "груша")  # Вставка по индексу
removed = fruits.pop(2)    # Удаление по индексу (возвращает элемент)
fruits.remove("банан")     # Удаление по значению
length = len(fruits)       # Длина списка

# Срезы (slice)
first_two = fruits[:2]     # Первые два элемента
reversed_list = fruits[::-1]  # Разворот списка

# Итерация по списку
for fruit in fruits:
    print(fruit)

Важные особенности:

  • Индексация начинается с 0
  • Поддерживают отрицательные индексы (-1 — последний элемент)
  • Изменяемы (можно модифицировать после создания)
  • Поддерживают методы сортировки: sort(), sorted()

2. Словари (dict)

Что это: Неупорядоченные коллекции пар "ключ-значение" с быстрым доступом по ключу.

Зачем нужны: Для хранения структурированных данных, где каждому значению соответствует уникальный ключ.

# Создание словаря
person = {
    "name": "Анна",
    "age": 25,
    "city": "Москва",
    "hobbies": ["чтение", "путешествия"]
}

# Основные операции
person["email"] = "anna@example.com"  # Добавление новой пары
age = person["age"]                   # Получение значения
del person["city"]                    # Удаление элемента
has_hobbies = "hobbies" in person     # Проверка наличия клюва

# Методы словаря
keys = person.keys()     # Все ключи
values = person.values() # Все значения
items = person.items()   # Пары ключ-значение

# Итерация по словарю
for key, value in person.items():
    print(f"{key}: {value}")

Важные особенности:

  • Ключи должны быть неизменяемыми типами (строки, числа, кортежи)
  • Значения могут быть любого типа
  • Начиная с Python 3.7 сохраняют порядок добавления элементов
  • Быстрый доступ к элементам (O(1) в среднем случае)

Практический пример: Учет книг

# Список словарей для хранения информации о книгах
library = [
    {
        "title": "Гарри Поттер",
        "author": "Дж. Роулинг",
        "year": 1997,
        "available": True
    },
    {
        "title": "Война и мир",
        "author": "Л. Толстой",
        "year": 1869,
        "available": False
    }
]

# Добавление новой книги
new_book = {
    "title": "1984",
    "author": "Дж. Оруэлл",
    "year": 1949,
    "available": True
}
library.append(new_book)

# Поиск доступных книг
available_books = [book["title"] for book in library if book["available"]]
print("Доступные книги:", available_books)

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

Практические задания
  1. Создайте список чисел от 1 до 10, затем:
    • Удалите все четные числа
    • Добавьте в конец квадраты оставшихся чисел
    • Отсортируйте список в обратном порядке
  2. Создайте словарь для хранения информации о студенте (имя, возраст, оценки по предметам), затем:
    • Добавьте новый предмет с оценкой
    • Вычислите средний балл
    • Проверьте, есть ли предмет "математика"
  3. Напишите функцию, которая объединяет два словаря (если ключи совпадают, оставляйте значение из второго словаря)

Частые ошибки

  • Обращение к несуществующему индексу списка (IndexError)
  • Попытка использовать изменяемый объект как ключ словаря (TypeError)
  • Обращение к несуществующему ключу словаря (KeyError - используйте get())
  • Изменение списка во время итерации по нему

🔹 Урок 8: Функции в Python

1. Основы функций

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

# Простейшая функция
def greet():
    """Выводит приветствие"""
    print("Привет, мир!")

# Вызов функции
greet()  # Выведет: Привет, мир!

Почему это важно: Функции помогают избежать дублирования кода и делают программу более организованной.

2. Параметры и аргументы

Функции могут принимать данные через параметры и возвращать результаты.

def calculate_area(width, height=1):
    """
    Вычисляет площадь прямоугольника
    :param width: ширина (обязательный параметр)
    :param height: высота (по умолчанию 1)
    :return: площадь
    """
    return width * height

# Примеры вызова
print(calculate_area(5))      # 5 (используется height по умолчанию)
print(calculate_area(3, 4))   # 12
print(calculate_area(height=2, width=6))  # 12 (именованные аргументы)

Типы параметров:

  • Позиционные: порядок имеет значение
  • Именованные: передаются по имени параметра
  • По умолчанию: становятся необязательными

3. Возврат значений

Функция может возвращать несколько значений (в виде кортежа) или вообще ничего (None).

def analyze_numbers(numbers):
    """Анализирует список чисел"""
    if not numbers:
        return None  # Явное возвращение ничего

    return min(numbers), max(numbers), sum(numbers)/len(numbers)

result = analyze_numbers([4, 2, 8, 6])
print(f"Min: {result[0]}, Max: {result[1]}, Avg: {result[2]}")

Практический пример: Калькулятор BMI

def calculate_bmi(weight, height):
    """Рассчитывает индекс массы тела"""
    if height <= 0:
        raise ValueError("Рост должен быть положительным числом")
    return weight / (height ** 2)

def get_bmi_category(bmi):
    """Определяет категорию по BMI"""
    if bmi < 18.5:
        return "Недостаточный вес"
    elif bmi < 25:
        return "Норма"
    elif bmi < 30:
        return "Избыточный вес"
    else:
        return "Ожирение"

# Использование функций
user_weight = float(input("Введите ваш вес (кг): "))
user_height = float(input("Введите ваш рост (м): "))

bmi = calculate_bmi(user_weight, user_height)
category = get_bmi_category(bmi)

print(f"Ваш BMI: {bmi:.1f} ({category})")

Разбор: Мы разделили логику на две функции для лучшей читаемости и повторного использования кода.

4. Рекурсивные функции

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

def fibonacci(n):
    """Возвращает n-ное число Фибоначчи"""
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

# Выводим первые 10 чисел Фибоначчи
for i in range(10):
    print(fibonacci(i), end=" ")  # 0 1 1 2 3 5 8 13 21 34

Осторожно с рекурсией!

Рекурсия может привести к переполнению стека. Всегда определяйте базовый случай!

5. Функции как объекты

В Python функции — это объекты первого класса, их можно передавать как аргументы.

def apply_operation(x, y, operation):
    """Применяет операцию к двум числам"""
    return operation(x, y)

def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

print(apply_operation(5, 3, add))      # 8
print(apply_operation(5, 3, multiply)) # 15
Практические задания
  1. Создайте функцию для проверки, является ли число простым
  2. Напишите функцию, которая возвращает перевернутую строку
  3. Реализуйте калькулятор, используя отдельные функции для каждой операции
  4. Создайте рекурсивную функцию для вычисления степени числа
  5. Напишите функцию, которая принимает список и функцию-фильтр, возвращая отфильтрованные элементы

Лучшие практики работы с функциями:

  • Давайте функциям описательные имена
  • Одна функция — одна ответственность
  • Используйте docstrings для документации
  • Ограничьте количество параметров (3-4 максимум)
  • Избегайте изменяемых значений по умолчанию (например, списков)

🔹 Урок 9: Работа с файлами

1. Основные операции с файлами

Что это: Чтение и запись данных в файлы на диске.

Зачем нужно: Для сохранения данных между запусками программы и работы с внешними данными.

# Запись в файл
with open('example.txt', 'w', encoding='utf-8') as f:
    f.write("Привет, мир!\n")
    f.write("Вторая строка\n")

# Чтение из файла
with open('example.txt', 'r', encoding='utf-8') as f:
    content = f.read()  # Чтение всего файла
    lines = f.readlines()  # Чтение по строкам (для больших файлов)

# Добавление в файл
with open('example.txt', 'a', encoding='utf-8') as f:
    f.write("Новая строка в конец файла\n")

Практический пример: Дневник настроения

import datetime

def add_mood_entry(mood, note):
    today = datetime.date.today()
    with open('mood_diary.csv', 'a', encoding='utf-8') as f:
        f.write(f"{today},{mood},{note}\n")

def show_mood_entries():
    with open('mood_diary.csv', 'r', encoding='utf-8') as f:
        for line in f:
            date, mood, note = line.strip().split(',')
            print(f"{date}: {mood} - {note}")

🔹 Урок 10: Обработка исключений

1. Блоки try-except

Что это: Механизм обработки ошибок без аварийного завершения программы.

try:
    number = int(input("Введите число: "))
    result = 100 / number
except ValueError:
    print("Ошибка: нужно ввести число!")
except ZeroDivisionError:
    print("Ошибка: деление на ноль!")
except Exception as e:
    print(f"Неизвестная ошибка: {e}")
else:
    print(f"Результат: {result}")
finally:
    print("Эта часть выполнится всегда")

🔹 Урок 11: Модули и пакеты

1. Создание и использование модулей

# Файл mymodule.py
def greet(name):
    return f"Привет, {name}!"

PI = 3.14159265

# Файл main.py
import mymodule
from mymodule import greet

print(mymodule.PI)
print(greet("Анна"))

🔹 Урок 12: Работа с датами и временем

from datetime import datetime, timedelta

now = datetime.now()
print(now.strftime("%d.%m.%Y %H:%M"))  # Форматирование

future = now + timedelta(days=7)  # Операции с датами
delta = future - now  # Разница между датами

🔹 Урок 13: Объектно-Ориентированное Программирование

1. Основные концепции ООП

Что это: Методология программирования, основанная на объектах, содержащих данные и методы.

4 принципа ООП:

  • Инкапсуляция: Сокрытие внутренней реализации
  • Наследование: Создание новых классов на основе существующих
  • Полиморфизм: Возможность использования разных классов одинаковым образом
  • Абстракция: Работа с объектами на концептуальном уровне

2. Классы и объекты

class Car:
    # Конструктор класса
    def __init__(self, brand, model, year):
        # Атрибуты объекта
        self.brand = brand
        self.model = model
        self.year = year
        self.__mileage = 0  # Приватный атрибут

    # Метод экземпляра
    def drive(self, distance):
        self.__mileage += distance
        print(f"Проехали {distance} км. Пробег: {self.__mileage} км")

    # Статический метод
    @staticmethod
    def is_vintage(year):
        return year < 1990

# Создание объектов
my_car = Car("Toyota", "Camry", 2020)
friend_car = Car("Ford", "Mustang", 1967)

# Использование методов
my_car.drive(150)
print(f"Это классика? {Car.is_vintage(friend_car.year)}")

3. Наследование и полиморфизм

class ElectricCar(Car):  # Наследование
    def __init__(self, brand, model, year, battery_size):
        super().__init__(brand, model, year)  # Вызов родительского конструктора
        self.battery_size = battery_size
        self.__charge = 100

    # Переопределение метода
    def drive(self, distance):
        if self.__charge < distance * 0.2:
            print("Недостаточно заряда!")
            return
        self.__charge -= distance * 0.2
        super().drive(distance)

    # Новый метод
    def charge(self, percent):
        self.__charge = min(100, self.__charge + percent)
        print(f"Заряд: {self.__charge}%")

# Полиморфизм в действии
cars = [Car("BMW", "X5", 2018), ElectricCar("Tesla", "Model S", 2022, 100)]
for car in cars:
    car.drive(50)  # Одинаковый вызов, разное поведение

Практический пример: Банковская система

class BankAccount:
    def __init__(self, account_number, owner, balance=0):
        self.account_number = account_number
        self.owner = owner
        self.__balance = balance  # Инкапсуляция

    def deposit(self, amount):
        if amount <= 0:
            raise ValueError("Сумма должна быть положительной")
        self.__balance += amount
        return self.__balance

    def withdraw(self, amount):
        if amount <= 0:
            raise ValueError("Сумма должна быть положительной")
        if amount > self.__balance:
            raise ValueError("Недостаточно средств")
        self.__balance -= amount
        return self.__balance

    def get_balance(self):
        return self.__balance

class SavingsAccount(BankAccount):
    def __init__(self, account_number, owner, balance=0, interest_rate=0.01):
        super().__init__(account_number, owner, balance)
        self.interest_rate = interest_rate

    def add_interest(self):
        interest = self.get_balance() * self.interest_rate
        self.deposit(interest)
        return interest

# Использование
my_account = SavingsAccount("123456", "Иван Иванов", 1000)
my_account.deposit(500)
my_account.add_interest()
print(f"Текущий баланс: {my_account.get_balance()}")

🔹 Урок 14: Продвинутые возможности Python

1. Генераторы и итераторы

Генераторы: Функции, которые возвращают итератор с ленивыми вычислениями.

# Генератор последовательности Фибоначчи
def fibonacci(limit):
    a, b = 0, 1
    while a < limit:
        yield a
        a, b = b, a + b

# Использование
for num in fibonacci(1000):
    print(num, end=" ")

# Генераторные выражения
squares = (x*x for x in range(10))
print(sum(squares))  # 285

2. Декораторы

Что это: Функции, изменяющие поведение других функций.

# Простой декоратор
def log_time(func):
    def wrapper(*args, **kwargs):
        import time
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"Функция {func.__name__} выполнилась за {end-start:.4f} сек")
        return result
    return wrapper

@log_time
def calculate_sum(n):
    return sum(range(n))

calculate_sum(1000000)

3. Работа с исключениями (продвинутый уровень)

# Создание собственных исключений
class InvalidEmailError(Exception):
    """Исключение для невалидных email"""
    def __init__(self, email):
        self.email = email
        super().__init__(f"Неверный формат email: {email}")

def validate_email(email):
    if "@" not in email:
        raise InvalidEmailError(email)
    return True

# Контекстные менеджеры
class DatabaseConnection:
    def __enter__(self):
        print("Подключение к БД")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("Закрытие подключения")
        if exc_type:
            print(f"Ошибка: {exc_val}")
        return True

with DatabaseConnection() as db:
    print("Работа с базой данных")

🔹 Вот Вы и закончили мини-курс по Python

Но советуем на этом не останавливаться, а начать изучать разные библиотеки:

NumPy - для работы с массивами и матрицами чисел

unittest/pytest - для создания тестов кода

PyQt6 - для создания UI, также QTDesigner

SQLite3 - для работы с базой данных SQLite

PyGame - попробуйте себя в создании простой двухмерной игры

Requests + beautifulsoup4 - для парсинга HTML страниц

Flask - для создания веб-приложений

Telebot/python-telegram-bot/pyTelegramBotApi - для создания своих Telegram-ботов

Удачи в изучении Python!

Наверх