Полный курс программирования с нуля. Изучайте Python шаг за шагом с практическими примерами.
Python — это язык программирования, который:
Windows:
Add Python to PATH
Install Now
# Проверка установки
python --version
# Должно показать версию Python, например: Python 3.11.4
Задание 1: Установите Python и запустите интерактивный режим.
Задание 2: Напишите программу, которая выводит ваше имя и возраст.
Если Python не запускается, проверьте, что вы добавили его в PATH
при установке.
Переменная — это "коробка", в которой хранятся данные:
name = "Анна" # Текст
age = 25 # Число
is_student = True # Логическое значение
Тип | Пример | Описание |
---|---|---|
int |
5 , -10 |
Целые числа |
float |
3.14 |
Дробные числа |
str |
"Привет" |
Текст (строка) |
Задание 1: Создайте переменные name
(ваше имя) и age
(ваш возраст), выведите их.
Задание 2: Преобразуйте строку "123"
в число и умножьте её на 2.
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 без остатка.
Для получения данных от пользователя:
name = input("Введите ваше имя: ")
print("Привет, " + name + "!")
Современный способ (f-строки):
age = 25
print(f"Мне {age} лет")
Задание: Создайте программу, которая запрашивает год рождения и вычисляет возраст.
if условие1:
# выполняется, если условие1 истинно
elif условие2:
# выполняется, если условие2 истинно
else:
# выполняется, если все условия ложны
Важно: Порядок условий имеет значение! Интерпретатор проверяет условия сверху вниз.
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})")
Как это работает: Программа вычисляет индекс массы тела и определяет категорию.
=
(присваивание) и ==
(сравнение)Циклы позволяют автоматизировать повторяющиеся действия в программе. Вместо того чтобы писать один и тот же код многократно, мы создаем конструкцию, которая выполняет нужные операции для каждого элемента последовательности или пока выполняется условие.
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 в какой-то момент станет False, иначе получите бесконечный цикл:
# Бесконечный цикл (не делайте так!)
while True:
print("Это никогда не закончится!")
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}")
# Генерация последовательности чисел
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)
# 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
for i in range(3):
print(i)
else:
print("Цикл завершен без break")
Что это: Упорядоченные изменяемые коллекции элементов одного или разных типов.
Зачем нужны: Для хранения и обработки наборов данных, где важен порядок элементов.
# Создание списка
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)
sort()
, sorted()
Что это: Неупорядоченные коллекции пар "ключ-значение" с быстрым доступом по ключу.
Зачем нужны: Для хранения структурированных данных, где каждому значению соответствует уникальный ключ.
# Создание словаря
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}")
# Список словарей для хранения информации о книгах
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)
Применение: Комбинация списков и словарей позволяет создавать сложные структуры данных.
IndexError
)TypeError
)KeyError
- используйте get()
)Функции — это блоки кода, которые выполняют определенную задачу и могут быть повторно использованы.
# Простейшая функция
def greet():
"""Выводит приветствие"""
print("Привет, мир!")
# Вызов функции
greet() # Выведет: Привет, мир!
Почему это важно: Функции помогают избежать дублирования кода и делают программу более организованной.
Функции могут принимать данные через параметры и возвращать результаты.
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 (именованные аргументы)
Функция может возвращать несколько значений (в виде кортежа) или вообще ничего (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]}")
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})")
Разбор: Мы разделили логику на две функции для лучшей читаемости и повторного использования кода.
Функция может вызывать саму себя, что полезно для решения определенных задач.
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
Рекурсия может привести к переполнению стека. Всегда определяйте базовый случай!
В 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
Что это: Чтение и запись данных в файлы на диске.
Зачем нужно: Для сохранения данных между запусками программы и работы с внешними данными.
# Запись в файл
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}")
Что это: Механизм обработки ошибок без аварийного завершения программы.
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("Эта часть выполнится всегда")
# Файл mymodule.py
def greet(name):
return f"Привет, {name}!"
PI = 3.14159265
# Файл main.py
import mymodule
from mymodule import greet
print(mymodule.PI)
print(greet("Анна"))
from datetime import datetime, timedelta
now = datetime.now()
print(now.strftime("%d.%m.%Y %H:%M")) # Форматирование
future = now + timedelta(days=7) # Операции с датами
delta = future - now # Разница между датами
Что это: Методология программирования, основанная на объектах, содержащих данные и методы.
4 принципа ООП:
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)}")
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()}")
Генераторы: Функции, которые возвращают итератор с ленивыми вычислениями.
# Генератор последовательности Фибоначчи
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
Что это: Функции, изменяющие поведение других функций.
# Простой декоратор
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)
# Создание собственных исключений
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("Работа с базой данных")
Но советуем на этом не останавливаться, а начать изучать разные библиотеки:
NumPy - для работы с массивами и матрицами чисел
unittest/pytest - для создания тестов кода
PyQt6 - для создания UI, также QTDesigner
SQLite3 - для работы с базой данных SQLite
PyGame - попробуйте себя в создании простой двухмерной игры
Requests + beautifulsoup4 - для парсинга HTML страниц
Flask - для создания веб-приложений
Telebot/python-telegram-bot/pyTelegramBotApi - для создания своих Telegram-ботов
Удачи в изучении Python!