Контроль ресурсов через contextlib 🚪
Модуль contextlib упрощает управление ресурсами с помощью контекстных менеджеров.
🔍 Применение:
Управление файлами.
Работа с сетевыми соединениями.
Сложные контексты.
🔑 Результат выполнения:
Модуль contextlib упрощает управление ресурсами с помощью контекстных менеджеров.
🔍 Применение:
Управление файлами.
Работа с сетевыми соединениями.
Сложные контексты.
from contextlib import contextmanager
@contextmanager
def custom_context():
print("Entering context")
yield
print("Exiting context")
with custom_context():
print("Inside context")
🔑 Результат выполнения:
Entering context
Inside context
Exiting context
🔥1
Шифрование с использованием cryptography 🔐
Библиотека cryptography позволяет шифровать и дешифровать данные.
🔍 Применение:
Защита данных.
Реализация безопасных сообщений.
Хранение конфиденциальной информации.
🔑 Результат выполнения:
Библиотека cryptography позволяет шифровать и дешифровать данные.
🔍 Применение:
Защита данных.
Реализация безопасных сообщений.
Хранение конфиденциальной информации.
from cryptography.fernet import Fernet
# Генерация ключа и шифрование данных
key = Fernet.generate_key()
cipher = Fernet(key)
message = b"Secret Message"
encrypted_message = cipher.encrypt(message)
print("Encrypted:", encrypted_message)
# Дешифрование
decrypted_message = cipher.decrypt(encrypted_message)
print("Decrypted:", decrypted_message.decode())
🔑 Результат выполнения:
Encrypted: b'...'
Decrypted: Secret Message
🔥2❤1👍1
🚀 Контекстные менеджеры
Суть темы:
Контекстные менеджеры позволяют управлять ресурсами, такими как файлы или сетевые соединения, с помощью ключевого слова with. Это гарантирует, что ресурсы будут правильно освобождены после использования.
Применение:
Работа с файлами.
Управление сетевыми соединениями.
Обеспечение корректного завершения транзакций.
Пример кода:
Суть темы:
Контекстные менеджеры позволяют управлять ресурсами, такими как файлы или сетевые соединения, с помощью ключевого слова with. Это гарантирует, что ресурсы будут правильно освобождены после использования.
Применение:
Работа с файлами.
Управление сетевыми соединениями.
Обеспечение корректного завершения транзакций.
Пример кода:
with open('file.txt', 'r') as file:
content = file.read()
print(content)
👍2❤1🔥1
Дескрипторы и свойства
Суть темы:
Дескрипторы и свойства позволяют контролировать доступ к атрибутам класса. Это полезно для создания более гибких и безопасных объектов.
Применение:
Валидация данных при установке значений атрибутов.
Ленивая загрузка данных.
Создание вычисляемых атрибутов.
Пример кода:
Суть темы:
Дескрипторы и свойства позволяют контролировать доступ к атрибутам класса. Это полезно для создания более гибких и безопасных объектов.
Применение:
Валидация данных при установке значений атрибутов.
Ленивая загрузка данных.
Создание вычисляемых атрибутов.
Пример кода:
class Temperature:
def __init__(self, celsius):
self.celsius = celsius
@property
def fahrenheit(self):
return self.celsius * 9/5 + 32
@fahrenheit.setter
def fahrenheit(self, value):
self.celsius = (value - 32) * 5/9
temp = Temperature(0)
print(temp.fahrenheit) # Вывод: 32.0
temp.fahrenheit = 100
print(temp.celsius) # Вывод: 37.777...
🔥2❤1👍1
Работа с базами данных (ORM и SQLAlchemy)
Суть темы:
ORM (Object-Relational Mapping) позволяет работать с базами данных, используя объекты Python, вместо написания SQL-запросов вручную. SQLAlchemy — одна из самых популярных библиотек для работы с базами данных в Python.
Применение:
Упрощение работы с базами данных.
Создание сложных запросов с помощью Python-кода.
Поддержка различных СУБД (PostgreSQL, MySQL, SQLite и др.).
Пример кода:
Суть темы:
ORM (Object-Relational Mapping) позволяет работать с базами данных, используя объекты Python, вместо написания SQL-запросов вручную. SQLAlchemy — одна из самых популярных библиотек для работы с базами данных в Python.
Применение:
Упрощение работы с базами данных.
Создание сложных запросов с помощью Python-кода.
Поддержка различных СУБД (PostgreSQL, MySQL, SQLite и др.).
Пример кода:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
new_user = User(name="Alice", age=25)
session.add(new_user)
session.commit()
👍2🔥2❤1
Создание и использование контекстных менеджеров с contextlib 🛠️🔧
Суть темы:
Контекстные менеджеры — это мощный инструмент в Python, который позволяет управлять ресурсами, такими как файлы, сетевые соединения или блокировки, с помощью ключевого слова with. 🗝️
Модуль contextlib предоставляет удобные инструменты для создания собственных контекстных менеджеров без необходимости писать полноценный класс с методами enter и exit. 🎩
Применение:
Управление ресурсами, такими как файлы или сетевые соединения. 📂🌐
Обеспечение корректного завершения транзакций. 💾
Упрощение работы с временными изменениями состояния. 🕒
Пример кода:
Суть темы:
Контекстные менеджеры — это мощный инструмент в Python, который позволяет управлять ресурсами, такими как файлы, сетевые соединения или блокировки, с помощью ключевого слова with. 🗝️
Модуль contextlib предоставляет удобные инструменты для создания собственных контекстных менеджеров без необходимости писать полноценный класс с методами enter и exit. 🎩
Применение:
Управление ресурсами, такими как файлы или сетевые соединения. 📂🌐
Обеспечение корректного завершения транзакций. 💾
Упрощение работы с временными изменениями состояния. 🕒
Пример кода:
from contextlib import contextmanager
@contextmanager
def open_file(name, mode):
f = open(name, mode)
try:
yield f
finally:
f.close()
# Использование контекстного менеджера
with open_file('test.txt', 'w') as f:
f.write('Привет, мир!')
👍2❤1🔥1
Хеширование паролей с hashlib 🔑
Модуль hashlib позволяет создавать хеши данных, таких как пароли.
Применение:
Защита паролей
Проверка целостности данных
Результат выполнения:
Модуль hashlib позволяет создавать хеши данных, таких как пароли.
Применение:
Защита паролей
Проверка целостности данных
import hashlib
password = "my_secret_password"
hashed_password = hashlib.sha256(password.encode()).hexdigest()
print("Хеш пароля:", hashed_password)
Результат выполнения:
Хеш пароля: 6e6bc4e49dd477ebc98ef4046c067b5f2b0e6e2d2c7e4d3c6c34395f2b1ac540
👍2
Работа с байткодом и модулем dis 🧩🔍
Суть темы:
Python компилирует исходный код в байткод, который затем выполняется виртуальной машиной Python. 🖥️ Модуль dis позволяет дизассемблировать байткод и увидеть, как Python интерпретирует ваш код на низком уровне. 🕵️♂️
Применение:
Оптимизация производительности кода. ⚡
Понимание внутреннего устройства Python. 🧠
Отладка и анализ работы кода. 🛠️
Пример кода:
Вывод:
Почему это круто?
Модуль dis позволяет заглянуть "под капот" Python и понять, как работает ваш код. 🚗
Это полезно для оптимизации и отладки сложных участков кода. 🛠️
Суть темы:
Python компилирует исходный код в байткод, который затем выполняется виртуальной машиной Python. 🖥️ Модуль dis позволяет дизассемблировать байткод и увидеть, как Python интерпретирует ваш код на низком уровне. 🕵️♂️
Применение:
Оптимизация производительности кода. ⚡
Понимание внутреннего устройства Python. 🧠
Отладка и анализ работы кода. 🛠️
Пример кода:
import dis
def example_function(x):
return x * x + 1
dis.dis(example_function)
Вывод:
2 0 LOAD_FAST 0 (x)
2 LOAD_FAST 0 (x)
4 BINARY_MULTIPLY
6 LOAD_CONST 1 (1)
8 BINARY_ADD
10 RETURN_VALUE
Почему это круто?
Модуль dis позволяет заглянуть "под капот" Python и понять, как работает ваш код. 🚗
Это полезно для оптимизации и отладки сложных участков кода. 🛠️
🔥1
Создание и использование дескрипторов 🛠️🔧
Суть темы:
Дескрипторы — это мощный инструмент в Python, который позволяет управлять доступом к атрибутам класса. 🎩 Они используются для создания свойств, которые могут выполнять дополнительные действия при доступе или изменении значения. 🛠️
Применение:
Валидация данных при установке значений атрибутов. ✅
Ленивая загрузка данных. 🕒
Пример кода:
Вывод:
Почему это круто?
Дескрипторы позволяют создавать более гибкие и безопасные объекты. 🛡️
Они делают код более читаемым и удобным для повторного использования. 📖
Суть темы:
Дескрипторы — это мощный инструмент в Python, который позволяет управлять доступом к атрибутам класса. 🎩 Они используются для создания свойств, которые могут выполнять дополнительные действия при доступе или изменении значения. 🛠️
Применение:
Валидация данных при установке значений атрибутов. ✅
Ленивая загрузка данных. 🕒
Пример кода:
class Descriptor:
def __get__(self, instance, owner):
print("Получение значения")
return instance._value
def __set__(self, instance, value):
print("Установка значения")
instance._value = value
class MyClass:
attribute = Descriptor()
obj = MyClass()
obj.attribute = 10 # Установка значения
print(obj.attribute) # Получение значения
Вывод:
Установка значения
Получение значения
10
Почему это круто?
Дескрипторы позволяют создавать более гибкие и безопасные объекты. 🛡️
Они делают код более читаемым и удобным для повторного использования. 📖
Создание и использование пользовательских исключений 🚨🛠️
Суть темы:
Пользовательские исключения позволяют создавать собственные типы ошибок, которые лучше отражают специфику вашего приложения. 🎯 Это делает код более читаемым и упрощает обработку ошибок. 🛠️
Применение:
Создание специфических ошибок для вашего приложения. 🎯
Улучшение читаемости и поддерживаемости кода. 📖
Упрощение отладки и обработки ошибок. 🐛
Пример кода:
Почему это круто?
Пользовательские исключения делают код более понятным и выразительным. 🎨
Суть темы:
Пользовательские исключения позволяют создавать собственные типы ошибок, которые лучше отражают специфику вашего приложения. 🎯 Это делает код более читаемым и упрощает обработку ошибок. 🛠️
Применение:
Создание специфических ошибок для вашего приложения. 🎯
Улучшение читаемости и поддерживаемости кода. 📖
Упрощение отладки и обработки ошибок. 🐛
Пример кода:
class NegativeNumberError(Exception):
"""Исключение, которое выбрасывается, если число отрицательное."""
def __init__(self, value):
self.value = value
super().__init__(f"Отрицательное число недопустимо: {value}")
def check_positive(number):
if number < 0:
raise NegativeNumberError(number)
return number
try:
check_positive(-10)
except NegativeNumberError as e:
print(e) # Вывод: Отрицательное число недопустимо: -10
Почему это круто?
Пользовательские исключения делают код более понятным и выразительным. 🎨
👍2
Работа с регулярными выражениями (модуль re) 🔍✨
Суть темы:
Регулярные выражения — это мощный инструмент для поиска и обработки текста. 🧩 С их помощью можно находить, извлекать и заменять подстроки в тексте по сложным шаблонам. 🛠️ В Python для работы с регулярными выражениями используется модуль re. 🐍
Применение:
Поиск и извлечение данных из текста. 📄
Валидация вводимых данных (например, email или телефонных номеров). 📧📞
Пример кода:
Почему это круто?
Регулярные выражения позволяют решать сложные задачи обработки текста одной строкой кода. 🎯
Они универсальны и поддерживаются во многих языках программирования. 🌍
Суть темы:
Регулярные выражения — это мощный инструмент для поиска и обработки текста. 🧩 С их помощью можно находить, извлекать и заменять подстроки в тексте по сложным шаблонам. 🛠️ В Python для работы с регулярными выражениями используется модуль re. 🐍
Применение:
Поиск и извлечение данных из текста. 📄
Валидация вводимых данных (например, email или телефонных номеров). 📧📞
Пример кода:
import re
# Поиск email-адресов в тексте
text = "Свяжитесь с нами по email: support@example.com или info@example.org."
emails = re.findall(r'[\w\.-]+@[\w\.-]+', text)
print(emails) # Вывод: ['support@example.com', 'info@example.org']
# Замена текста по шаблону
new_text = re.sub(r'\d{2}-\d{2}-\d{4}', 'ДД-ММ-ГГГГ', 'Дата: 12-05-2023')
print(new_text) # Вывод: Дата: ДД-ММ-ГГГГ
Почему это круто?
Регулярные выражения позволяют решать сложные задачи обработки текста одной строкой кода. 🎯
Они универсальны и поддерживаются во многих языках программирования. 🌍
🔥1
Работа с лямбда-функциями и функциями высшего порядка 🎯✨
Суть темы:
Лямбда-функции — это анонимные функции, которые можно использовать для создания простых операций в одну строку. 🧩 Функции высшего порядка — это функции, которые принимают другие функции в качестве аргументов или возвращают их. 🛠️
Применение:
Создание простых функций "на лету". 🚀
Использование в функциях высшего порядка, таких как map, filter и reduce. 🔄
Упрощение кода и повышение его читаемости. 📖
Пример кода:
Почему это круто?
Лямбда-функции позволяют писать компактный и выразительный код. 🎨
Суть темы:
Лямбда-функции — это анонимные функции, которые можно использовать для создания простых операций в одну строку. 🧩 Функции высшего порядка — это функции, которые принимают другие функции в качестве аргументов или возвращают их. 🛠️
Применение:
Создание простых функций "на лету". 🚀
Использование в функциях высшего порядка, таких как map, filter и reduce. 🔄
Упрощение кода и повышение его читаемости. 📖
Пример кода:
# Лямбда-функция для сложения двух чисел
add = lambda x, y: x + y
print(add(5, 3)) # Вывод: 8
# Использование лямбда-функции с map
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # Вывод: [1, 4, 9, 16]
# Использование лямбда-функции с filter
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Вывод: [2, 4]
Почему это круто?
Лямбда-функции позволяют писать компактный и выразительный код. 🎨
🔥1
Работа с модулем collections 🧩📚
Суть темы:
Модуль collections предоставляет специализированные типы данных, которые расширяют возможности стандартных коллекций Python. 🛠️
Применение:
Подсчет элементов с помощью Counter. 🔢
Создание именованных кортежей с помощью namedtuple. 📝
Управление порядком элементов с помощью deque. 🔄
Пример кода:
Почему это круто?
Модуль collections предоставляет мощные инструменты для работы с коллекциями. 💪
Суть темы:
Модуль collections предоставляет специализированные типы данных, которые расширяют возможности стандартных коллекций Python. 🛠️
Применение:
Подсчет элементов с помощью Counter. 🔢
Создание именованных кортежей с помощью namedtuple. 📝
Управление порядком элементов с помощью deque. 🔄
Пример кода:
from collections import Counter, namedtuple, deque
# Использование Counter для подсчета элементов
data = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count = Counter(data)
print(count) # Вывод: Counter({'apple': 3, 'banana': 2, 'orange': 1})
# Использование namedtuple для создания именованных кортежей
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y) # Вывод: 10 20
# Использование deque для управления порядком элементов
d = deque([1, 2, 3])
d.appendleft(0)
d.append(4)
print(d) # Вывод: deque([0, 1, 2, 3, 4])
Почему это круто?
Модуль collections предоставляет мощные инструменты для работы с коллекциями. 💪
🔥2
Работа с модулем itertools 🔄✨
Суть темы:
Модуль itertools предоставляет набор инструментов для работы с итераторами. 🛠️ Эти инструменты позволяют создавать сложные итераторы для обработки данных, комбинирования элементов и генерации последовательностей. 🎯
Применение:
Генерация комбинаций и перестановок. 🔢
Создание бесконечных итераторов. ♾️
Обработка данных с помощью цепочек итераторов. 🔗
Пример кода:
Почему это круто?
Модуль itertools предоставляет мощные инструменты для работы с итераторами. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
Суть темы:
Модуль itertools предоставляет набор инструментов для работы с итераторами. 🛠️ Эти инструменты позволяют создавать сложные итераторы для обработки данных, комбинирования элементов и генерации последовательностей. 🎯
Применение:
Генерация комбинаций и перестановок. 🔢
Создание бесконечных итераторов. ♾️
Обработка данных с помощью цепочек итераторов. 🔗
Пример кода:
import itertools
# Генерация всех возможных комбинаций
combinations = list(itertools.combinations('ABC', 2))
print(combinations) # Вывод: [('A', 'B'), ('A', 'C'), ('B', 'C')]
# Генерация бесконечного итератора
count = itertools.count(start=10, step=2)
for _ in range(5):
print(next(count)) # Вывод: 10, 12, 14, 16, 18
# Цепочка итераторов
chain = itertools.chain('ABC', 'DEF')
print(list(chain)) # Вывод: ['A', 'B', 'C', 'D', 'E', 'F']
Почему это круто?
Модуль itertools предоставляет мощные инструменты для работы с итераторами. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
🔥2
Работа с модулем functools 🛠️✨
Суть темы:
Модуль functools предоставляет набор инструментов для работы с функциями. 🎯 Эти инструменты позволяют создавать более гибкие и мощные функции, такие как частичные функции, мемоизация и декораторы. 🛠️
Применение:
Создание частичных функций с помощью partial. 🔧
Мемоизация результатов функций с помощью lru_cache. 🧠
Использование декораторов для изменения поведения функций. 🎩
Пример кода:
Почему это круто?
Модуль functools предоставляет мощные инструменты для работы с функциями. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
Суть темы:
Модуль functools предоставляет набор инструментов для работы с функциями. 🎯 Эти инструменты позволяют создавать более гибкие и мощные функции, такие как частичные функции, мемоизация и декораторы. 🛠️
Применение:
Создание частичных функций с помощью partial. 🔧
Мемоизация результатов функций с помощью lru_cache. 🧠
Использование декораторов для изменения поведения функций. 🎩
Пример кода:
from functools import partial, lru_cache
# Создание частичной функции
def multiply(x, y):
return x * y
double = partial(multiply, 2)
print(double(5)) # Вывод: 10
# Мемоизация результатов функции
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # Вывод: 55
Почему это круто?
Модуль functools предоставляет мощные инструменты для работы с функциями. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
🔥2
🕵️♂️ Однострочный swap переменных без временной переменной
Обычно, если нужно поменять значения двух переменных местами, программисты используют временную переменную. В Python можно сделать это красиво и коротко!
💡 Пример:
Результат:
🔥 Без лишнего кода и лишних переменных!
Обычно, если нужно поменять значения двух переменных местами, программисты используют временную переменную. В Python можно сделать это красиво и коротко!
💡 Пример:
a, b = 5, 10
a, b = b, a # Магия кортежей!
print(a, b)
Результат:
10 5
🔥 Без лишнего кода и лишних переменных!
🔥3
🎭 "Секретные" подчеркивания в Python
В Python подчеркивания (_) используются не просто так! Вот несколько интересных случаев:
✅ Одиночное _ в интерактивном режиме Python
Последний результат сохраняется в переменной _:
✅ _ как имя переменной для неиспользуемых значений
Если переменная не нужна, её часто обозначают _:
✅ Двойное подчеркивание (__) в именах переменных
Если переменная начинается с __, она получает "защиту" от случайного доступа (name mangling):
Результат (сокращенно):
В Python подчеркивания (_) используются не просто так! Вот несколько интересных случаев:
✅ Одиночное _ в интерактивном режиме Python
Последний результат сохраняется в переменной _:
>>> 10 + 5
15
>>> _ * 2 # Используем результат предыдущей операции
30
✅ _ как имя переменной для неиспользуемых значений
Если переменная не нужна, её часто обозначают _:
for _ in range(3):
print("Hello!") # Повторит 3 раза, но переменная нам не нужна
✅ Двойное подчеркивание (__) в именах переменных
Если переменная начинается с __, она получает "защиту" от случайного доступа (name mangling):
class Example:
def __init__(self):
self.__secret = "Не трогай меня!"
obj = Example()
print(dir(obj)) # Смотрим атрибуты, Python спрятал переменную!
Результат (сокращенно):
['_Example__secret', '__class__', ...]
🔥3
🐍 Генераторы и их "волшебная" экономия памяти
Генераторы в Python — это не просто стиль написания кода, это ещё и способ экономить память! Вместо того чтобы создавать и хранить весь список в памяти, генератор создает элементы "на лету", по одному за раз.
💡 Пример использования генератора:
Результат:
🔑 С помощью yield функция становится генератором, и каждый вызов next() будет возвращать следующий элемент. Такой подход уменьшает расход памяти, особенно если элементов много!
Генераторы в Python — это не просто стиль написания кода, это ещё и способ экономить память! Вместо того чтобы создавать и хранить весь список в памяти, генератор создает элементы "на лету", по одному за раз.
💡 Пример использования генератора:
def my_generator():
for i in range(5):
yield i
gen = my_generator()
print(next(gen)) # 0
print(next(gen)) # 1
Результат:
0
1
🔑 С помощью yield функция становится генератором, и каждый вызов next() будет возвращать следующий элемент. Такой подход уменьшает расход памяти, особенно если элементов много!
🔥2
🔄 zip() — идеальный способ для параллельного обхода нескольких списков
Функция zip() помогает вам одновременно работать с несколькими коллекциями. Она "пакует" их элементы по парам, что удобно, когда нужно итеративно проходить по двум или больше спискам.
💡 Пример использования:
Результат:
🎯 Преимущество: Не нужно использовать индексы для доступа к элементам! zip() "параллельно" соединяет элементы, делая код более читаемым и компактным.
Функция zip() помогает вам одновременно работать с несколькими коллекциями. Она "пакует" их элементы по парам, что удобно, когда нужно итеративно проходить по двум или больше спискам.
💡 Пример использования:
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
for name, score in zip(names, scores):
print(f"{name} scored {score}")
Результат:
Alice scored 85
Bob scored 90
Charlie scored 78
🎯 Преимущество: Не нужно использовать индексы для доступа к элементам! zip() "параллельно" соединяет элементы, делая код более читаемым и компактным.
🔥1
🚀 Крутая фишка enumerate() — избавляемся от лишних счетчиков!
Часто нужно перебирать список и знать индекс каждого элемента. Вместо того чтобы вручную заводить i = 0 и увеличивать его в цикле, используйте enumerate()!
💡 Пример использования:
Результат:
🔥 Почему это удобно?
Код становится чище и короче
Можно сразу задать нужный стартовый индекс (start=1)
Часто нужно перебирать список и знать индекс каждого элемента. Вместо того чтобы вручную заводить i = 0 и увеличивать его в цикле, используйте enumerate()!
💡 Пример использования:
fruits = ["🍎 Apple", "🍌 Banana", "🍒 Cherry"]
for index, fruit in enumerate(fruits, start=1):
print(f"{index}. {fruit}")
Результат:
1. 🍎 Apple
2. 🍌 Banana
3. 🍒 Cherry
🔥 Почему это удобно?
Код становится чище и короче
Можно сразу задать нужный стартовый индекс (start=1)
🔥2
🎲 Случайный выбор из списка с random.choice()
Если нужно выбрать случайный элемент из списка, не нужно писать сложные циклы. Просто используйте random.choice()!
💡 Пример использования:
Результат (например):
🎯 Дополнительно:
random.choices() позволяет выбрать несколько элементов сразу
random.sample() выбирает без повторений
Используйте random и пусть Python делает выбор за вас! 🎰
Если нужно выбрать случайный элемент из списка, не нужно писать сложные циклы. Просто используйте random.choice()!
💡 Пример использования:
import random
movies = ["🎬 Inception", "🎥 Interstellar", "📽 The Matrix", "🎞 The Dark Knight"]
random_movie = random.choice(movies)
print(f"Сегодня стоит посмотреть: {random_movie}")
Результат (например):
Сегодня стоит посмотреть: 🎞 The Dark Knight
🎯 Дополнительно:
random.choices() позволяет выбрать несколько элементов сразу
random.sample() выбирает без повторений
Используйте random и пусть Python делает выбор за вас! 🎰
🔥3