Основы языка Python: Полный курс для начинающих
📌 Содержание
- Установка и запуск Python
- Первая программа
- Переменные и типы данных
- Операторы
- Условные операторы
- Циклы
- Списки и другие структуры данных
- Функции
- Классы и ООП
- Работа с файлами
- Модули и пакеты
- Обработка исключений
- Практические задачи
🔧 1. Установка и запуск Python
Установка Python
- Скачайте Python с официального сайта
- При установке отметьте "Add Python to PATH"
- Проверьте установку:
python --version # Python 3.11.4
Среды разработки
- IDLE (встроенная в Python)
- PyCharm (от JetBrains) - профессиональная IDE
- VS Code с расширением Python
- Jupyter Notebook - для анализа данных
Запуск Python
# 1. В интерактивном режиме (REPL)
# В командной строке:
python
>>> print("Hello, World!")
Hello, World!
# 2. Как скрипт
# Создайте файл hello.py
print("Hello, World!")
# Запустите:
python hello.py
🚀 2. Первая программа
# Однострочный комментарий начинается с #
"""
Многострочный комментарий
(на самом деле это строка документации)
"""
# Вывод на экран
print("Hello, World!") # Hello, World!
# Вывод нескольких значений
print("Hello", "World", "!", sep="-") # Hello-World-!
# Форматированный вывод
name = "Alice"
age = 25
print(f"Меня зовут {name} и мне {age} лет") # f-строки (Python 3.6+)
print("Меня зовут {} и мне {} лет".format(name, age)) # .format()
# Ввод данных
name = input("Как вас зовут? ")
print(f"Привет, {name}!")
📊 3. Переменные и типы данных
Объявление переменных
# Python - язык с динамической типизацией # Тип определяется автоматически x = 10 # int (целое число) y = 3.14 # float (число с плавающей точкой) name = "Python" # str (строка) is_active = True # bool (логическое значение)
Основные типы данных
Числа (Numbers)
# Целые числа (int) a = 10 b = -5 c = 0 large_number = 1_000_000 # Для удобства чтения # Числа с плавающей точкой (float) pi = 3.14159 temperature = -10.5 scientific = 2.5e-3 # 0.0025 # Комплексные числа (complex) z = 3 + 4j # Преобразование типов float_num = float(10) # 10.0 int_num = int(3.14) # 3 (отбрасывает дробную часть)
Строки (Strings)
# Создание строк
single_quotes = 'Hello'
double_quotes = "World"
triple_quotes = """Многострочная
строка"""
# Операции со строками
text = "Python"
print(len(text)) # 6 - длина строки
print(text[0]) # 'P' - первый символ
print(text[-1]) # 'n' - последний символ
print(text[1:4]) # 'yth' - срез (slice)
print(text.upper()) # 'PYTHON'
print(text.lower()) # 'python'
print(text.startswith("P")) # True
# Форматирование строк
name = "Alice"
age = 25
message = f"{name} is {age} years old"
Логические значения (Boolean)
is_true = True is_false = False # Логические операторы result = (5 > 3) # True result = (5 == 3) # False result = not True # False result = True and False # False result = True or False # True
NoneType
# None - отсутствие значения
value = None
if value is None:
print("Значение не задано")
Проверка типа
x = 10 print(type(x)) # <class 'int'> print(isinstance(x, int)) # True y = "Hello" print(type(y)) # <class 'str'>
➕ 4. Операторы {#операторы}
Арифметические операторы
a = 10 b = 3 print(a + b) # 13 - сложение print(a - b) # 7 - вычитание print(a * b) # 30 - умножение print(a / b) # 3.333... - деление print(a // b) # 3 - целочисленное деление print(a % b) # 1 - остаток от деления print(a ** b) # 1000 - возведение в степень # Сокращенные операторы x = 5 x += 3 # x = x + 3 → 8 x -= 2 # x = x - 2 → 6 x *= 4 # x = x * 4 → 24 x /= 3 # x = x / 3 → 8.0
Операторы сравнения
a = 5 b = 10 print(a == b) # False - равно print(a != b) # True - не равно print(a > b) # False - больше print(a < b) # True - меньше print(a >= b) # False - больше или равно print(a <= b) # True - меньше или равно
Логические операторы
x = True y = False print(x and y) # False - И (оба True) print(x or y) # True - ИЛИ (хотя бы один True) print(not x) # False - НЕ (инверсия) # Примеры с условиями age = 25 has_license = True can_drive = age >= 18 and has_license # True
Операторы принадлежности
text = "Python"
print('P' in text) # True
print('thon' in text) # True
print('Java' not in text) # True
numbers = [1, 2, 3, 4, 5]
print(3 in numbers) # True
print(10 not in numbers) # True
Приоритет операторов
# 1. ** (возведение в степень) # 2. * / // % (умножение, деление) # 3. + - (сложение, вычитание) # 4. < > <= >= == != (сравнение) # 5. not (логическое НЕ) # 6. and (логическое И) # 7. or (логическое ИЛИ) result = 2 + 3 * 4 # 14, не 20 result = (2 + 3) * 4 # 20
❓ 5. Условные операторы
Оператор if
age = 18
if age >= 18:
print("Вы совершеннолетний")
print("Можете голосовать")
if-else
temperature = 25
if temperature > 30:
print("Жарко")
else:
print("Не жарко")
if-elif-else
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"Оценка: {grade}") # Оценка: B
Вложенные условия
age = 25
has_license = True
if age >= 18:
if has_license:
print("Можно водить машину")
else:
print("Нужны права")
else:
print("Слишком молод")
Тернарный оператор
age = 20
status = "совершеннолетний" if age >= 18 else "несовершеннолетний"
print(status) # совершеннолетний
# Эквивалентно:
if age >= 18:
status = "совершеннолетний"
else:
status = "несовершеннолетний"
Логические операторы в условиях
username = "admin"
password = "1234"
if username == "admin" and password == "1234":
print("Доступ разрешен")
else:
print("Доступ запрещен")
# Проверка диапазона
number = 15
if 10 <= number <= 20:
print("Число в диапазоне [10, 20]")
🔄 6. Циклы
Цикл while
# Пока условие истинно
count = 0
while count < 5:
print(f"Счетчик: {count}")
count += 1 # Увеличиваем счетчик, иначе бесконечный цикл
# Бесконечный цикл (осторожно!)
# while True:
# print("Бесконечный цикл")
Цикл for
# Итерация по последовательности
for i in range(5): # range(5) = [0, 1, 2, 3, 4]
print(i) # 0 1 2 3 4
# С параметрами range
for i in range(2, 10, 2): # от 2 до 10 с шагом 2
print(i) # 2 4 6 8
# Итерация по строке
text = "Python"
for char in text:
print(char) # P y t h o n (каждый символ на новой строке)
break, continue, else в циклах
# break - прервать цикл
for i in range(10):
if i == 5:
break
print(i) # 0 1 2 3 4
# continue - пропустить итерацию
for i in range(5):
if i == 2:
continue
print(i) # 0 1 3 4
# else в циклах - выполняется, если цикл не прерван break
for i in range(5):
print(i)
else:
print("Цикл завершен без break")
Вложенные циклы
# Таблица умножения
for i in range(1, 4):
for j in range(1, 4):
print(f"{i} × {j} = {i * j}")
print() # Пустая строка между таблицами
Примеры использования циклов
# Сумма чисел от 1 до 100
total = 0
for i in range(1, 101):
total += i
print(f"Сумма: {total}") # 5050
# Поиск в списке
numbers = [10, 20, 30, 40, 50]
search_value = 30
found = False
for num in numbers:
if num == search_value:
found = True
break
if found:
print("Значение найдено")
else:
print("Значение не найдено")
📚 7. Структуры данных
Списки (Lists)
# Создание списка
fruits = ["apple", "banana", "cherry"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]
empty_list = []
list_from_range = list(range(5)) # [0, 1, 2, 3, 4]
# Индексация
fruits = ["apple", "banana", "cherry"]
print(fruits[0]) # "apple" - первый элемент
print(fruits[-1]) # "cherry" - последний элемент
# Срезы (slicing)
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[2:5]) # [2, 3, 4] - с 2 по 4 индекс
print(numbers[:3]) # [0, 1, 2] - с начала до 3
print(numbers[5:]) # [5, 6, 7, 8, 9] - с 5 до конца
print(numbers[::2]) # [0, 2, 4, 6, 8] - каждый второй
print(numbers[::-1]) # [9, 8, 7, 6, ...] - обратный порядок
# Основные методы
fruits = ["apple", "banana"]
fruits.append("cherry") # Добавить в конец
fruits.insert(1, "orange") # Вставить по индексу
removed = fruits.pop() # Удалить последний
fruits.remove("banana") # Удалить по значению
fruits.sort() # Сортировка
fruits.reverse() # Обратный порядок
count = fruits.count("apple") # Количество элементов
index = fruits.index("apple") # Индекс элемента
fruits.clear() # Очистить список
# Длина списка
print(len(fruits)) # Количество элементов
# Итерация по списку
for fruit in fruits:
print(fruit)
for i, fruit in enumerate(fruits):
print(f"{i}: {fruit}")
# List comprehension (генератор списков)
squares = [x**2 for x in range(10)] # [0, 1, 4, 9, ..., 81]
even_numbers = [x for x in range(20) if x % 2 == 0]
Кортежи (Tuples)
# Неизменяемые списки
coordinates = (10, 20)
colors = ("red", "green", "blue")
single = (5,) # Кортеж из одного элемента (запятая обязательна)
# Доступ к элементам
print(coordinates[0]) # 10
print(colors[1:]) # ("green", "blue")
# Распаковка кортежа
x, y = coordinates
print(f"x={x}, y={y}") # x=10, y=20
# Преобразование
numbers_list = [1, 2, 3]
numbers_tuple = tuple(numbers_list) # (1, 2, 3)
Словари (Dictionaries)
# Создание словаря
person = {
"name": "Alice",
"age": 25,
"city": "Moscow"
}
empty_dict = {}
dict_from_list = dict([("a", 1), ("b", 2)])
# Доступ к значениям
print(person["name"]) # Alice
print(person.get("age")) # 25
print(person.get("country")) # None (без ошибки)
print(person.get("country", "Россия")) # Россия (значение по умолчанию)
# Изменение и добавление
person["age"] = 26 # Изменить значение
person["country"] = "Russia" # Добавить новый ключ
# Удаление
del person["city"] # Удалить ключ
age = person.pop("age") # Удалить и вернуть значение
# Методы словаря
keys = person.keys() # Все ключи
values = person.values() # Все значения
items = person.items() # Пары ключ-значение
person.clear() # Очистить словарь
# Итерация по словарю
for key in person:
print(key, person[key])
for key, value in person.items():
print(f"{key}: {value}")
# Dictionary comprehension
squares = {x: x**2 for x in range(5)} # {0:0, 1:1, 2:4, 3:9, 4:16}
Множества (Sets)
# Коллекция уникальных элементов
unique_numbers = {1, 2, 3, 3, 2, 1} # {1, 2, 3}
empty_set = set() # Не {} - это словарь!
# Операции с множествами
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print(A | B) # {1, 2, 3, 4, 5, 6} - объединение
print(A & B) # {3, 4} - пересечение
print(A - B) # {1, 2} - разность
print(A ^ B) # {1, 2, 5, 6} - симметрическая разность
# Методы множеств
numbers = {1, 2, 3}
numbers.add(4) # Добавить элемент
numbers.remove(2) # Удалить элемент (ошибка если нет)
numbers.discard(10) # Удалить (без ошибки если нет)
numbers.pop() # Удалить случайный элемент
numbers.clear() # Очистить множество
# Set comprehension
even_squares = {x**2 for x in range(10) if x**2 % 2 == 0}
🛠️ 8. Функции
Объявление функций
def greet():
"""Простая функция приветствия"""
print("Hello, World!")
greet() # Вызов функции
def greet_person(name):
"""Функция с параметром"""
print(f"Hello, {name}!")
greet_person("Alice") # Hello, Alice!
Возврат значения
def add(a, b):
"""Сложение двух чисел"""
return a + b
result = add(5, 3)
print(result) # 8
# Возврат нескольких значений
def get_min_max(numbers):
return min(numbers), max(numbers)
minimum, maximum = get_min_max([1, 5, 3, 9, 2])
print(f"Min: {minimum}, Max: {maximum}") # Min: 1, Max: 9
Параметры по умолчанию
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")
greet("Alice") # Hello, Alice!
greet("Bob", "Hi") # Hi, Bob!
# Важно: изменяемые значения по умолчанию
def add_item(item, items=[]): # ОПАСНО!
items.append(item)
return items
# Лучше так:
def add_item_safe(item, items=None):
if items is None:
items = []
items.append(item)
return items
Именованные аргументы
def create_person(name, age, city):
print(f"{name}, {age} лет, из {city}")
# Порядок аргументов можно менять
create_person(age=25, city="Moscow", name="Alice")
Произвольное количество аргументов
# *args - произвольное количество позиционных аргументов
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3)) # 6
print(sum_all(1, 2, 3, 4, 5)) # 15
# **kwargs - произвольное количество именованных аргументов
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=25, city="Moscow")
Лямбда-функции
# Анонимные функции
square = lambda x: x ** 2
print(square(5)) # 25
# Использование с map, filter, sorted
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers)) # [1, 4, 9, 16, 25]
even = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4]
# Сортировка по ключу
people = [("Alice", 25), ("Bob", 20), ("Charlie", 30)]
sorted_by_age = sorted(people, key=lambda x: x[1]) # [("Bob",20), ("Alice",25), ("Charlie",30)]
Области видимости
x = 10 # Глобальная переменная
def func():
y = 20 # Локальная переменная
global x # Работаем с глобальной переменной
x = 30
print(f"Внутри функции: x={x}, y={y}")
func()
print(f"Снаружи: x={x}") # x=30
# nonlocal для вложенных функций
def outer():
count = 0
def inner():
nonlocal count
count += 1
return count
return inner
counter = outer()
print(counter()) # 1
print(counter()) # 2
🏛️ 9. Классы и ООП
Создание класса
class Dog:
# Атрибут класса
species = "Canis familiaris"
# Конструктор (инициализатор)
def __init__(self, name, age):
# Атрибуты экземпляра
self.name = name
self.age = age
# Метод экземпляра
def bark(self):
print(f"{self.name} говорит: Гав!")
def description(self):
return f"{self.name} - {self.age} лет"
# Создание объектов (экземпляров)
dog1 = Dog("Бобик", 3)
dog2 = Dog("Шарик", 5)
print(dog1.name) # Бобик
print(dog2.age) # 5
dog1.bark() # Бобик говорит: Гав!
print(dog1.description()) # Бобик - 3 лет
print(dog1.species) # Canis familiaris
Наследование
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Метод должен быть переопределен")
class Cat(Animal):
def speak(self):
return f"{self.name} говорит: Мяу!"
class Dog(Animal):
def speak(self):
return f"{self.name} говорит: Гав!"
def fetch(self):
return f"{self.name} принес мяч!"
# Использование
animals = [Cat("Мурзик"), Dog("Бобик")]
for animal in animals:
print(animal.speak())
# Проверка типа
dog = Dog("Рекс")
print(isinstance(dog, Dog)) # True
print(isinstance(dog, Animal)) # True
print(issubclass(Dog, Animal)) # True
Инкапсуляция
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.__balance = balance # Приватный атрибут
def deposit(self, amount):
if amount > 0:
self.__balance += amount
print(f"Пополнение: +{amount}")
else:
print("Сумма должна быть положительной")
def withdraw(self, amount):
if 0 < amount <= self.__balance:
self.__balance -= amount
print(f"Снятие: -{amount}")
else:
print("Недостаточно средств")
def get_balance(self): # Геттер
return self.__balance
# Использование
account = BankAccount("Alice", 1000)
account.deposit(500) # Пополнение: +500
account.withdraw(200) # Снятие: -200
print(account.get_balance()) # 1300
# print(account.__balance) # Ошибка! Атрибут приватный
Полиморфизм
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
# Разные объекты, одинаковый интерфейс
shapes = [Rectangle(3, 4), Circle(5)]
for shape in shapes:
print(f"Площадь: {shape.area()}")
Магические методы (dunder methods)
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"Vector({self.x}, {self.y})"
def __repr__(self):
return f"Vector({self.x}, {self.y})"
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __eq__(self, other):
return self.x == other.x and self.y == other.y
def __len__(self):
return 2
v1 = Vector(2, 3)
v2 = Vector(4, 5)
print(v1) # Vector(2, 3)
print(v1 + v2) # Vector(6, 8)
print(v1 == v2) # False
print(len(v1)) # 2
Декораторы @property, @staticmethod, @classmethod
class Circle:
PI = 3.14159 # Атрибут класса
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value > 0:
self._radius = value
else:
raise ValueError("Радиус должен быть положительным")
@property
def area(self):
return self.PI * self._radius ** 2
@staticmethod
def info():
return "Это класс Circle для работы с окружностями"
@classmethod
def from_diameter(cls, diameter):
return cls(diameter / 2)
circle = Circle(5)
print(circle.area) # 78.53975
circle.radius = 10
print(circle.area) # 314.159
circle2 = Circle.from_diameter(20)
print(circle2.radius) # 10.0
print(Circle.info()) # Это класс Circle для работы с окружностями
📁 10. Работа с файлами
Чтение файлов
# Открытие файла (рекомендуется использовать with)
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read() # Чтение всего файла
print(content)
# Построчное чтение
with open("example.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip()) # strip() убирает переносы строк
# Чтение всех строк в список
with open("example.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
for line in lines:
print(line.strip())
Запись в файл
# Запись (перезапись файла)
with open("output.txt", "w", encoding="utf-8") as file:
file.write("Первая строка\n")
file.write("Вторая строка\n")
# Дозапись в конец файла
with open("output.txt", "a", encoding="utf-8") as file:
file.write("Третья строка (добавлена)\n")
# Запись списка строк
lines = ["Строка 1", "Строка 2", "Строка 3"]
with open("output.txt", "w", encoding="utf-8") as file:
file.writelines(line + "\n" for line in lines)
Режимы открытия файлов
# "r" - чтение (по умолчанию)
# "w" - запись (перезапись)
# "a" - дозапись
# "x" - создание (ошибка если файл существует)
# "b" - бинарный режим
# "t" - текстовый режим (по умолчанию)
# Примеры:
open("file.txt", "r") # чтение текста
open("file.txt", "rb") # чтение бинарного файла
open("file.txt", "w") # запись текста
open("file.txt", "wb") # запись бинарного файла
open("file.txt", "a") # дозапись
JSON файлы
import json
# Запись в JSON
data = {
"name": "Alice",
"age": 25,
"city": "Moscow",
"hobbies": ["reading", "swimming"]
}
with open("data.json", "w", encoding="utf-8") as file:
json.dump(data, file, ensure_ascii=False, indent=2)
# Чтение из JSON
with open("data.json", "r", encoding="utf-8") as file:
loaded_data = json.load(file)
print(loaded_data["name"]) # Alice
📦 11. Модули и пакеты
Создание и импорт модулей
# math_operations.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
if b != 0:
return a / b
else:
return "Ошибка: деление на ноль"
# main.py - использование модуля
import math_operations
result = math_operations.add(5, 3)
print(result) # 8
# Импорт с псевдонимом
import math_operations as mo
print(mo.multiply(4, 5)) # 20
# Импорт конкретных функций
from math_operations import add, subtract
print(add(10, 20)) # 30
# Импорт всего
from math_operations import *
print(divide(10, 2)) # 5.0
Встроенные модули Python
import math
print(math.sqrt(16)) # 4.0
print(math.pi) # 3.141592653589793
print(math.factorial(5)) # 120
import random
print(random.randint(1, 10)) # Случайное число от 1 до 10
print(random.choice(["a", "b", "c"])) # Случайный элемент
import datetime
now = datetime.datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S")) # 2024-01-15 14:30:00
import os
print(os.getcwd()) # Текущая рабочая директория
print(os.listdir()) # Содержимое текущей папки
Создание пакетов
my_package/
├── __init__.py
├── module1.py
├── module2.py
└── subpackage/
├── __init__.py
└── module3.py
# Импорт из пакета import my_package.module1 from my_package import module2 from my_package.subpackage import module3
⚠️ 12. Обработка исключений
Базовый синтаксис try-except
try:
# Код, который может вызвать исключение
x = 10 / 0
print(x)
except ZeroDivisionError:
print("Ошибка: деление на ноль!")
# Обработка нескольких исключений
try:
num = int(input("Введите число: "))
result = 10 / num
print(f"Результат: {result}")
except ValueError:
print("Ошибка: нужно ввести число!")
except ZeroDivisionError:
print("Ошибка: нельзя делить на ноль!")
except Exception as e: # Все остальные исключения
print(f"Произошла ошибка: {e}")
else и finally
try:
file = open("data.txt", "r")
content = file.read()
except FileNotFoundError:
print("Файл не найден")
else:
# Выполняется если исключений не было
print("Файл успешно прочитан")
print(f"Содержимое: {content}")
finally:
# Выполняется всегда
print("Завершение работы с файлом")
if 'file' in locals():
file.close()
Создание собственных исключений
class NegativeNumberError(Exception):
"""Исключение для отрицательных чисел"""
pass
def calculate_square_root(number):
if number < 0:
raise NegativeNumberError("Число не может быть отрицательным")
return number ** 0.5
try:
result = calculate_square_root(-4)
except NegativeNumberError as e:
print(f"Ошибка: {e}")
else:
print(f"Корень: {result}")
Встроенные исключения
# BaseException # ├── SystemExit # ├── KeyboardInterrupt # └── Exception # ├── ArithmeticError # │ ├── ZeroDivisionError # │ └── FloatingPointError # ├── LookupError # │ ├── IndexError # │ └── KeyError # ├── OSError # │ └── FileNotFoundError # ├── ValueError # ├── TypeError # ├── NameError # └── многие другие
🎯 13. Практические задачи
Задача 1: Калькулятор
def calculator():
print("Калькулятор")
print("Операции: +, -, *, /")
try:
num1 = float(input("Введите первое число: "))
operator = input("Введите оператор: ")
num2 = float(input("Введите второе число: "))
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 == 0:
print("Ошибка: деление на ноль!")
return
result = num1 / num2
else:
print("Неверный оператор!")
return
print(f"Результат: {result}")
except ValueError:
print("Ошибка: введите числа!")
calculator()
Задача 2: Контакты
class Contact:
def __init__(self, name, phone, email):
self.name = name
self.phone = phone
self.email = email
def __str__(self):
return f"{self.name}: {self.phone}, {self.email}"
class ContactBook:
def __init__(self):
self.contacts = []
def add_contact(self, name, phone, email):
contact = Contact(name, phone, email)
self.contacts.append(contact)
print("Контакт добавлен")
def find_contact(self, name):
for contact in self.contacts:
if contact.name.lower() == name.lower():
return contact
return None
def show_all(self):
if not self.contacts:
print("Контактов нет")
else:
for contact in self.contacts:
print(contact)
# Использование
book = ContactBook()
book.add_contact("Алиса", "+79991234567", "alice@mail.com")
book.add_contact("Боб", "+79997654321", "bob@mail.com")
book.show_all()
Задача 3: Анализ текста
def text_analyzer(text):
# Подсчет символов и слов
char_count = len(text)
words = text.split()
word_count = len(words)
# Частота символов
char_freq = {}
for char in text.lower():
if char.isalpha(): # Только буквы
char_freq[char] = char_freq.get(char, 0) + 1
# Самые частые слова
word_freq = {}
for word in words:
clean_word = word.strip(".,!?;:").lower()
if clean_word:
word_freq[clean_word] = word_freq.get(clean_word, 0) + 1
# Результаты
print(f"Всего символов: {char_count}")
print(f"Всего слов: {word_count}")
print("\nСамые частые буквы:")
for char, count in sorted(char_freq.items(), key=lambda x: x[1], reverse=True)[:5]:
print(f" {char}: {count}")
print("\nСамые частые слова:")
for word, count in sorted(word_freq.items(), key=lambda x: x[1], reverse=True)[:5]:
print(f" {word}: {count}")
# Пример использования
text = "Привет мир! Привет всем. Мир прекрасен."
text_analyzer(text)
📖 Что дальше?
- Библиотеки: NumPy, Pandas (анализ данных)
- Веб: Django, Flask (веб-разработка)
- GUI: Tkinter, PyQt (графические интерфейсы)
- Автоматизация: Selenium, BeautifulSoup
- Машинное обучение: Scikit-learn, TensorFlow
💡 Советы для изучения
- Практикуйтесь ежедневно - решайте задачи
- Читайте чужой код - GitHub, open source проекты
- Создавайте свои проекты - лучшее обучение
- Изучайте документацию - docs.python.org
- Участвуйте в комьюнити - форумы, митапы
Удачи в изучении Python! 🚀 Это начало интересного пути в программировании.
Дополнительный материал
Вопросы учеников к ИИ-помощнику и ответы по теме урока
Отлично! Это три ключевых принципа объектно-ориентированного программирования (ООП) в Python.
Основная мысль: Наследование, инкапсуляция и полиморфизм — это три столпа ООП, которые позволяют создавать гибкую, переиспользуемую и хорошо структурированную программу, моделируя реальные отношения между объектами.
Ключевые определения:
-
Наследование — это механизм, позволяющий создать новый класс (дочерний) на основе существующего (родительского). Дочерний класс наследует все атрибуты и методы родителя и может добавлять свои или изменять унаследованные.
- Пример: Класс
Animal(с методомeat()), от которого наследуют классыDogиCat.
- Пример: Класс
-
Инкапсуляция — это принцип сокрытия внутреннего состояния объекта и деталей реализации от внешнего мира. Доступ к данным контролируется через публичные методы (обычно это геттеры и сеттеры).
- Пример: У класса
BankAccountесть приватный атрибут__balance, изменить который можно только через публичные методыdeposit()иwithdraw().
- Пример: У класса
-
Полиморфизм — это возможность объектов с одинаковым интерфейсом (одинаковыми именами методов) иметь разную реализацию. Это позволяет работать с разными типами объектов единым образом.
- Пример: У классов
DogиCatесть общий методmake_sound(). У собаки он возвращает "Гав!", у кошки — "Мяу!". Функцияanimal_says(animal)может принять любой из этих объектов и вызватьmake_sound(), получив разный результат.
- Пример: У классов
Упражнение для закрепления:
Создай базовый класс Transport с методом move(). Затем создай два дочерних класса: Car и Bicycle. Переопредели метод move() в каждом из них так, чтобы он выводил разный текст (например, "Еду на машине" и "Кручу педали"). Создай список из объектов обоих типов и в цикле вызови для каждого метод move() — это и будет демонстрация полиморфизма.