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

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

Telegram

Ваш конспект

YouTubePython — полный курс для начинающих. Этот навык изменит твою жизнь.

🐍 Python для начинающих: полный курс

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

  • Python — высокоуровневый, интерпретируемый язык с динамической типизацией, идеально подходящий для новичков.
  • Курс охватывает основные конструкции языка, работу с HTTP-запросами и создание Telegram-бота.
  • Практика и самостоятельное решение задач — главный источник роста.
  • Python применяется в backend-разработке, анализе данных, машинном обучении и автоматизации.

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

Онлайн-интерпретатор

Для быстрого старта можно использовать онлайн-интерпретатор Python, чтобы сразу приступить к коду без установки ПО.

Первые шаги в коде

  • Функция print(): выводит значения в терминал.
    print("Hello", "world") # Hello world
    print("Hello", "world", sep=", ") # Hello, world
    print("Hello", end=" ")
    print("world") # Hello world
    
  • Функция input(): приостанавливает выполнение для ввода данных пользователем.
    name = input("Введите имя: ")
    print(name)
    

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

Объявление переменных

Переменная — именованная область памяти для хранения значения.

name = "Alex"
age = 25
x, y = 10, 5 # Множественное присваивание

✅ Важно: давать переменным осмысленные имена. Используйте snake_case (например, user_name).

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

  • Числа: int (целые) и float (с плавающей точкой).
  • Строки: str.
  • Логический тип: bool (True/False).
  • Определение типа: функция type().
    num = 10
    print(type(num)) # <class 'int'>
    

Арифметические операции

  • Сложение (+), вычитание (-), умножение (*), деление (/).
  • Целочисленное деление (//), остаток от деления (%), возведение в степень (**).
  • Порядок действий можно менять с помощью скобок.

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

my_int = 10
my_float = float(my_int) # 10.0
my_str = str(my_int) # "10"
number_from_str = int("10") # 10

🔍 Условные операторы

Конструкция if-elif-else

Управляет потоком выполнения на основе условий.

x = 10
if x > 0:
    print("X положительный")
elif x < 0:
    print("X отрицательный")
else:
    print("X равен нулю")

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

  • and (И), or (ИЛИ), not (НЕ).
  • Операторы сравнения: ==, !=, >, <, >=, <=.

Пример: определение високосного года

year = 2000
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
    print("Високосный")
else:
    print("Не високосный")

📝 Работа со строками

Основные операции

  • Конкатенация (сложение): "Hello" + " " + "World".
  • Длина строки: len(my_string).
  • Проверка вхождения: "hello" in my_string.
  • Методы строк:
    • .upper() / .lower() — преобразование регистра.
    • .strip() — удаление пробелов по краям.
    • .replace(old, new) — замена подстроки.
    • .count(substring) — подсчёт вхождений.
    • .isdigit() — проверка, состоит ли строка из цифр.

F-строки (форматирование)

Удобный способ вставки значений переменных в строку.

name = "Alex"
age = 25
message = f"Меня зовут {name} и мне {age} лет."

📊 Структуры данных

Списки (list)

Упорядоченная изменяемая коллекция.

fruits = ["apple", "banana", "cherry"]
fruits.append("watermelon") # Добавление
last_fruit = fruits.pop() # Удаление и возврат последнего элемента
fruits.sort() # Сортировка

Индексы и срезы (slicing)

  • Индексация начинается с 0.
  • Срез: list[start:stop:step] (полуоткрытый интервал).
  • Отрицательные индексы: отсчёт с конца (-1 — последний элемент).

Кортежи (tuple)

Упорядоченная неизменяемая коллекция.

user_roles = ("admin", "editor", "viewer")
role1, role2, role3 = user_roles # Распаковка

Словари (dict)

Коллекция пар «ключ-значение». Ключи уникальны.

person = {"name": "John", "age": 30, "city": "New York"}
person["job"] = "engineer" # Добавление
name = person.get("name") # Получение значения (без ошибки при отсутствии ключа)

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

for key, value in person.items():
    print(key, value)

🔢 Множества (Set)

Множество — коллекция уникальных неупорядоченных элементов.

Создание и операции:

my_set = {1, 2, 3, 4, 5}
# Или: my_set = set([1, 2, 3, 4, 5])

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

# Объединение
union_set = set1.union(set2) # {1, 2, 3, 4, 5, 6}

# Пересечение
intersection_set = set1.intersection(set2) # {3, 4}

# Разность
difference_set = set1.difference(set2) # {1, 2}

Удаление дубликатов из списка:

numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = list(set(numbers)) # [1, 2, 3, 4, 5]

🔁 Циклы

Цикл for

Используется для итерации по коллекциям.

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

Цикл while

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

counter = 0
while counter <= 5:
    print(counter)
    counter += 1
  • break — досрочный выход из цикла.
  • continue — переход к следующей итерации.

📦 Функции

Создание функций

Функция — блок кода для многократного использования.

def find_average(numbers: list) -> float:
    total = sum(numbers)
    return total / len(numbers)

Аргументы функций

  • Позиционные и именованные аргументы.
  • Аргументы со значениями по умолчанию.
  • Произвольное количество аргументов: *args (кортеж), **kwargs (словарь).

Область видимости (scope)

  • Локальные переменные существуют только внутри функции.
  • Глобальные переменные (константы) объявляются на уровне модуля. Изменять их внутри функции — плохая практика.

🛠️ Продвинутые темы

📝 List Comprehensions (Генераторы списков)

Краткая замена циклов для создания списков и словарей.

Пример создания списка:

# Обычный цикл
labeled_numbers = []
for num in numbers:
    if num % 2 == 0:
        labeled_numbers.append('even')
    else:
        labeled_numbers.append('odd')

# Через list comprehension
labeled_numbers = ['even' if num % 2 == 0 else 'odd' for num in numbers]

Пример создания словаря:

squares = {x: x**2 for x in range(10)}
# {0: 0, 1: 1, 2: 4, ...}

Пример транспонирования матрицы:

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transpose = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

🔄 Сортировка и фильтрация

Сортировка (sorted):

  • Не изменяет исходный список, возвращает новый.
  • Ключ key — функция, определяющая порядок сортировки.
  • reverse=True — сортировка по убыванию.
fruits = ['cherry', 'apple', 'banana']
sorted_fruits = sorted(fruits, key=len) # ['apple', 'cherry', 'banana']

Фильтрация (filter):

  • Принимает функцию-условие (возвращает True/False) и итерируемый объект.
  • Возвращает объект filter, который нужно преобразовать в список.
def is_even(n):
    return n % 2 == 0

numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(is_even, numbers)) # [2, 4]

Лямбда-функции:
Анонимные функции для краткой записи.

# Сортировка по длине слова (лямбда вместо отдельной функции)
sorted_fruits = sorted(fruits, key=lambda x: len(x))

# Фильтрация чётных чисел
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))

⚠️ Обработка ошибок (try/except)

Позволяет перехватывать исключения и предотвращать падение программы.

def calculate_average(numbers):
    try:
        return sum(numbers) / len(numbers)
    except ZeroDivisionError:
        print("The list is empty")
        return None

# Пример с сетевым запросом
import requests
try:
    response = requests.get('https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT')
    data = response.json()
except requests.exceptions.ConnectionError as error:
    print("There is no internet connection")
    print(f"Error: {error}")

🏗️ Классы и ООП

Основные понятия:

  • Класс — чертёж, шаблон.
  • Экземпляр (instance) — конкретный объект, созданный по чертежу класса.
  • __init__ — метод-конструктор, вызывается при создании экземпляра.
  • self — ссылка на текущий экземпляр класса внутри его методов.

Пример простого класса:

class Monster:
    def __init__(self, level):
        self.level = level
        self.health_points = 100 * level
        self.attack_power = 10 * level

    def attack(self):
        print(f"Monster attacks with {self.attack_power} power")

orc = Monster(level=2)
orc.attack() # Monster attacks with 20 power

Наследование:
Позволяет создавать новый класс на основе существующего, переиспользуя код.

class Character:
    def __init__(self, level):
        self.level = level
        self.health_points = self.base_health * level
        self.attack_power = self.base_attack * level

class Orc(Character):
    base_health = 100
    base_attack = 10
    name = "Orc"

class Elf(Character):
    base_health = 50
    base_attack = 15
    name = "Elf"

Инкапсуляция и свойства (@property):
Инкапсуляция — скрытие внутренней логики класса. Свойства позволяют вычислять атрибуты на лету.

class Character:
    @property
    def defense(self):
        return self.base_defense * self.level

class Orc(Character):
    base_defense = 10

    @property
    def defense(self):
        # Перк: защита x3 при HP < 50
        base_defense = super().defense
        if self.health_points < 50:
            return base_defense * 3
        return base_defense

🎀 Декораторы

Функции, которые принимают другую функцию и изменяют/расширяют её поведение.

Создание простого декоратора:

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Something before function")
        result = func(*args, **kwargs)
        print("Something after function")
        return result
    return wrapper

@my_decorator
def say_hello(name):
    print(f"Hello, {name}")

say_hello("Alice")

Декоратор с повторными попытками (retry):

import time
from requests.exceptions import RequestException

def retry(func):
    def wrapper(*args, **kwargs):
        for seconds in [5, 30]:
            try:
                return func(*args, **kwargs)
            except RequestException:
                print(f"Failed to get data. Retrying in {seconds} seconds...")
                time.sleep(seconds)
        raise RequestException("All retries failed")
    return wrapper

@retry
def get_weather_data():
    # Запрос к API погоды
    ...

Работа с JSON

JSON — популярный формат обмена данными.

import json
book = {"title": "1984", "author": "George Orwell"}
json_string = json.dumps(book) # Преобразование в строку
book_dict = json.loads(json_string) # Обратное преобразование

📅 Работа с датами (datetime)

from datetime import datetime, timedelta

# Текущее время
now_utc = datetime.now(timezone.utc)
now_local = datetime.now()

# Форматирование
formatted = now_local.strftime("%A, %d %B %Y") # "Sunday, 12 November 2023"

# Разница во времени
yesterday = now_local - timedelta(days=1)

# Парсинг из строки
date_str = "2023-11-12T12:15:00"
parsed_date = datetime.fromisoformat(date_str)

📁 Работа с файлами

JSON:

import json

# Запись
data = {"date": "2023-11-12"}
with open("data.json", "w") as f:
    json.dump(data, f, indent=4)

# Чтение
with open("data.json", "r") as f:
    loaded_data = json.load(f)

CSV:

import csv

# Запись
with open("persons.csv", "w", newline='') as f:
    writer = csv.writer(f)
    writer.writerow(["Name", "Age"])
    writer.writerow(["Alice", 30])
    writer.writerow(["Bob", 25])

HTTP-запросы (библиотека requests)

Взаимодействие с внешними API.

import requests
response = requests.get("https://api.binance.com/api/v3/ticker/price", params={"symbol": "BTCUSDT"})
price_data = response.json()
btc_price = float(price_data["price"])

🤖 Создание Telegram-бота

Пример простого бота с кнопками, который получает цены криптовалют.

import telebot
from telebot.types import ReplyKeyboardMarkup, KeyboardButton

bot = telebot.TeleBot("YOUR_TOKEN")

crypto_name_to_ticker = {
    "Bitcoin": "BTCUSDT",
    "Ethereum": "ETHUSDT",
    "Dogecoin": "DOGEUSDT"
}

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
    markup = ReplyKeyboardMarkup(row_width=3)
    for crypto_name in crypto_name_to_ticker:
        markup.add(KeyboardButton(crypto_name))
    bot.send_message(message.chat.id, "Choose a crypto:", reply_markup=markup)

@bot.message_handler(func=lambda message: message.text in crypto_name_to_ticker)
def send_crypto_price(message):
    ticker = crypto_name_to_ticker[message.text]
    price = get_price_by_ticker(ticker) # Функция запроса к API
    bot.send_message(message.chat.id, f"
🐍 Python для начинающих: полный курс с нуля — конспект на EchoNote