Этот конспект не сохранится

Закроешь вкладку — потеряешь. Зарегистрируйся — и он будет в библиотеке навсегда.

Telegram

Ваш конспект

YouTubeКак выучить PYTHON С НУЛЯ. Основы, практические задания, полный курс

🐍 Основы Python: от установки до декораторов

🎯 Ключевые тезисы

  • Курс сфокусирован на практическом применении Python для трудоустройства
  • Изучается только необходимый минимум, без "воды"
  • Практика и повторение — ключ к усвоению материала
  • Важен правильный подход к обучению: повторять код, экспериментировать, задавать вопросы
  • Типизация параметров и возвращаемых значений функций для ясности кода
  • Обработка исключений с помощью try/except/finally
  • Импорт модулей и работа с внешними библиотеками
  • Основы ООП: классы, инкапсуляция, наследование, полиморфизм
  • Контекстные менеджеры для безопасной работы с ресурсами
  • Декораторы для модификации поведения функций

🚀 Начало работы

Установка и настройка

  1. Установить Python с официального сайта (для Windows могут потребоваться дополнительные шаги).
  2. Проверить установку: выполнить в терминале python -v (или python3 -v на Mac/Linux).
  3. Выбрать редактор кода: для старта рекомендуется PyCharm (всё "из коробки").

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

  • Вывод в консоль: функция print().
    print("Hello World")
    print("Привет", "Мир")  # Несколько аргументов через запятую
    
  • Ввод от пользователя: функция input().
    name = input("Введи своё имя: ")
    print("Привет,", name)
    

📦 Переменные и типы данных

🔤 Переменные

  • Переменная — это "ярлык" для значения, которое хранится в памяти.
  • Правила именования:
    • Латинские буквы, цифры, нижнее подчёркивание.
    • Не может начинаться с цифры.
    • Регистр имеет значение (name и Name — разные переменные).

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

  1. Строки (str) — текст в кавычках.
    language = "Python"
    
  2. Целые числа (int) — числа без кавычек.
    age = 25
    
  3. Дробные числа (float) — числа с плавающей точкой.
    price = 19.99
    
  4. Логический тип (bool)True или False.
  5. Пустое значение (None) — отсутствие значения.

🔄 Преобразование типов

  • Используются функции str(), int(), float(), bool().
    number = 10
    text = str(number)  # "10"
    

🧮 Операции с числами

  • Базовые: +, -, *, /.
  • Сокращённые: +=, -=, *=, /=.
  • Специальные:
    • Возведение в степень: ** (например, 2 ** 3 = 8).
    • Целочисленное деление: // (например, 10 // 3 = 3).
    • Остаток от деления: % (например, 10 % 3 = 1).

📏 Операции со строками

  • Длина строки: len(text).
  • Сложение (конкатенация): "Hello" + " " + "World".
  • Умножение (повторение): "Hi" * 3"HiHiHi".

🎮 Условный оператор (if/elif/else)

📐 Операторы сравнения

  • > (больше), < (меньше), == (равно), != (не равно), >=, <=.

🔗 Логические операторы

  • and (и), or (или), not (не).

🏗️ Структура условия

if условие:
    # код, если условие True
elif другое_условие:
    # код, если другое_условие True
else:
    # код, если все условия False

Пример (проверка чётности):

number = int(input("Введите число: "))
if number % 2 == 0:
    print("Чётное")
else:
    print("Нечётное")

🔁 Циклы

🔂 Цикл for

Используется для перебора последовательностей (строк, списков, диапазонов).

# Повторить 5 раз
for i in range(5):
    print("Привет")

# Перебрать список
languages = ["Python", "JavaScript", "C#"]
for lang in languages:
    print(lang)

Функция range():

  • range(5)0, 1, 2, 3, 4
  • range(1, 6)1, 2, 3, 4, 5
  • range(1, 10, 2)1, 3, 5, 7, 9 (с шагом 2)

🔄 Цикл while

Выполняется, пока условие истинно (True).

count = 0
while count < 5:
    print("Привет")
    count += 1  # Увеличиваем счётчик

⏹️ Управление циклами

  • break — немедленно прерывает цикл.
  • continue — пропускает текущую итерацию, переходит к следующей.

📝 Работа со строками (продвинутый уровень)

🔍 Проверка вхождения

text = "Python is great"
print("great" in text)  # True

📍 Индексы и срезы

  • Индексация начинается с 0.
  • Обращение по индексу: text[0] (первый символ).
  • Отрицательные индексы: text[-1] (последний символ).
  • Срезы: text[начало:конец:шаг] (конец не включается).
    text = "Python"
    print(text[0:2])  # "Py"
    print(text[::2])   # "Pto" (каждый второй символ)
    

🛠️ Методы строк

  • text.upper() — все буквы заглавные.
  • text.lower() — все буквы строчные.
  • text.capitalize() — первая буква заглавная.
  • text.startswith("Py") — начинается ли строка с "Py" (возвращает bool).
  • text.endswith("on") — заканчивается ли строка на "on".
  • text.strip() — удаляет пробелы в начале и конце.
  • text.replace("old", "new") — заменяет подстроку.
  • text.count("a") — подсчитывает количество вхождений.

🧵 Форматирование строк (f-строки)

name = "Кирилл"
age = 18
info = f"Имя: {name}, Возраст: {age}"
print(info)  # Имя: Кирилл, Возраст: 18

📋 Списки (list)

🆕 Создание списка

my_list = ["Python", 15, 3.14, "JavaScript"]
empty_list = []
another_list = list(range(5))  # [0, 1, 2, 3, 4]

📊 Базовые операции

  • Длина: len(my_list).
  • Проверка вхождения: "Python" in my_list.
  • Сумма/мин/макс (для чисел): sum(numbers), min(numbers), max(numbers).

➕ Добавление элементов

  • append(x) — добавить в конец.
  • insert(index, x) — вставить по индексу.

➖ Удаление элементов

  • pop(index) — удалить по индексу (возвращает удалённый элемент).
  • remove(value) — удалить по значению.
  • del my_list[index] — удалить по индексу.

🔄 Сортировка

  • sort() — сортирует список (по возрастанию).
  • sort(reverse=True) — сортирует по убыванию.
  • reverse() — разворачивает список.

🔂 Итерация по списку

# Простой перебор
for item in my_list:
    print(item)

# С индексом (используем enumerate)
for index, item in enumerate(my_list):
    print(f"Индекс {index}: {item}")

🔀 Преобразование строка ↔ список

  • split() — разбивает строку на список по пробелам.
  • split(".") — разбивает строку по указанному разделителю.
  • join() — объединяет список в строку с указанным разделителем.
    words = ["Я", "изучаю", "Python"]
    text = " ".join(words)  # "Я изучаю Python"
    

⚡ Генераторы списков

Краткий способ создания списков.

# Создать список квадратов чисел от 0 до 5
squares = [x ** 2 for x in range(6)]  # [0, 1, 4, 9, 16, 25]

# Только чётные квадраты
even_squares = [x ** 2 for x in range(6) if x % 2 == 0]  # [0, 4, 16]

📚 Словари (dict)

🆕 Создание словаря

Словарь хранит данные в формате ключ: значение.

user = {
    "name": "Кирилл",
    "age": 18,
    "is_mentor": True
}

🔑 Доступ к значениям

  • user["name"] — получить значение по ключу (ошибка, если ключа нет).
  • user.get("name") — получить значение (вернёт None, если ключа нет).
  • user.get("name", "Гость") — получить значение или значение по умолчанию.

✏️ Изменение словаря

  • Добавить/изменить: user["city"] = "Москва".
  • Удалить: user.pop("age") или del user["age"].

🔂 Итерация по словарю

# Только ключи
for key in user.keys():
    print(key)

# Только значения
for value in user.values():
    print(value)

# Пары ключ-значение
for key, value in user.items():
    print(f"{key}: {value}")

🎯 Типизация функций

Типизация — указание ожидаемых типов данных для параметров и возвращаемого значения функции.

Зачем это нужно?

  • Делает код более понятным и отчётливым
  • Помогает избежать ошибок из-за передачи данных неверного типа
  • Не влияет на исполнение кода, служит для подсказок разработчику

Синтаксис:

def calculate_price(price: int, quantity: int, has_discount: bool) -> int:
    total = price * quantity
    if has_discount:
        total -= 10
    return total

Аналогично можно типизировать переменные: name: str = "Кирилл".


⚠️ Обработка исключений (try/except)

Конструкция для перехвата и обработки ошибок во время выполнения программы.

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

try:
    # Код, который может вызвать ошибку
    result = 10 / int(input("Введите число: "))
except ZeroDivisionError:
    # Обработка конкретной ошибки (деление на ноль)
    print("Бро, не вводи ноль")
except ValueError:
    # Обработка другой ошибки (неверное преобразование типа)
    print("Бро, введи число, а не строку")
except Exception as error:
    # Перехват ЛЮБОЙ ошибки (не лучшая практика)
    print(f"Произошла какая-то ошибка: {error}")
else:
    # Выполняется, если в try НЕ произошло ошибки
    print("Ошибка не произошла")
finally:
    # Выполняется ВСЕГДА (например, для закрытия файлов)
    print("Этот текст выведется всегда")

Выброс своих исключений:

age = -10
if age < 0:
    raise ValueError("Введите корректный возраст")

📦 Импорты и библиотеки

Импорт своих модулей:

  1. Полный импорт: import config → обращение через config.mentor_name
  2. Частичный импорт: from config import print_mentor_info → прямое использование функции
  3. Импорт всего: from config import * (не рекомендуется из-за конфликтов имён)

Работа с библиотеками:

  • Встроенные: import math, import datetime, import random
  • Внешние: устанавливаются через pip install

Виртуальное окружение (venv):

  • Изолирует зависимости проекта
  • Создание: python -m venv venv_name
  • Активация (Windows): venv_name\Scripts\activate
  • Установка библиотек в окружение: pip install library_name

🏗️ Основы ООП (Объектно-Ориентированное Программирование)

Класс — шаблон для создания объектов. Экземпляр — конкретный объект, созданный по шаблону класса.

Базовый пример класса:

class User:
    # Конструктор (вызывается при создании экземпляра)
    def __init__(self, name: str, age: int):
        self.name = name  # self — ссылка на конкретный экземпляр
        self.age = age
        self.is_human = True
    
    # Метод класса
    def say_hello(self, to_name: str = ""):
        print(f"Привет, {to_name}. Я {self.name}, мне {self.age}")
        self.age += 1  # Можем менять состояние объекта

# Создание экземпляров
user1 = User("Кирилл", 18)
user2 = User("Игорь", 25)
user1.say_hello("Вася")

🔒 Принципы ООП

Инкапсуляция

Сокрытие внутренней реализации объекта.

  • Одно подчёркивание: _balance — соглашение, что атрибут "защищённый"
  • Два подчёркивания: __balance — Python переименовывает атрибут (name mangling), но доступ всё равно возможен
class BankAccount:
    def __init__(self, balance: int):
        self.__balance = balance  # "Защищённый" атрибут
    
    def deposit(self, amount: int):
        self.__balance += amount
    
    def get_balance(self) -> int:
        return self.__balance

Наследование

Создание дочерних классов на основе родительского.

class Employee:  # Родительский класс
    def __init__(self, name: str, salary: int):
        self.name = name
        self.salary = salary
    
    def work(self):
        print(f"{self.name} работает")

class Developer(Employee):  # Дочерний класс
    def __init__(self, name: str, salary: int, language: str):
        super().__init__(name, salary)  # Вызов конструктора родителя
        self.language = language
    
    def work(self):  # Переопределение метода
        print(f"{self.name} пишет код на {self.language}")

Полиморфизм

Возможность использовать объекты разных классов через единый интерфейс.

team = [Developer("Кирилл", 1000, "Python"), Designer("Игорь", 800)]
for employee in team:
    employee.work()  # У каждого свой work(), но интерфейс одинаковый

📁 Контекстные менеджеры (with)

Обеспечивают выполнение кода до и после блока, чаще всего для работы с ресурсами (файлами).

Работа с файлами БЕЗ контекстного менеджера:

file = open("data.txt", "r")
content = file.read()
print(content)
file.close()  # Важно не забыть закрыть!

Работа с файлами С контекстным менеджером:

with open("data.txt", "r") as file:
    content = file.read()
    print(content)
# Файл автоматически закроется
🐍 Основы Python: от установки до декораторов — конспект на EchoNote