ch
Feedback
Python для начинающих

Python для начинающих

前往频道在 Telegram

Python для начинающих

显示更多
1 241
订阅者
无数据24 小时
+27
+330
帖子存档
В мире программирования Python многопоточность и асинхронное программирование — это словно две параллельные вселенные, которые могут сделать ваш код не только эффективнее, но и значительно сложнее для восприятия. Тем не менее, освоение этих техник — шаг к вашему росту как программиста. Что ж, давайте разбираться! Многопоточность — это когда ваша программа может выполнять несколько задач одновременно. Например, представьте, что вы готовите ужин: вы можете одновременно резать овощи и варить пасту вместо того, чтобы сначала сделать одно, а потом другое. В Python для многопоточности часто используют модуль threading, который позволяет создавать и управлять потоками. Пример кода с использованием модуля threading:
import threading

def print_numbers():
    for i in range(5):
        print(f"Number: {i}")

def print_letters():
    for letter in 'abcde':
        print(f"Letter: {letter}")

thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)

thread1.start()
thread2.start()

thread1.join()
thread2.join()
В этом простом примере два потока выполняются параллельно, печатая числа и буквы. Асинхронное программирование работает несколько иначе. Оно часто используется, когда ваша программа выполняет задачи, которые могут занять много времени, такие как обращение к веб-серверу или чтение файлов. Вместо того чтобы заниматься этими задачами последовательно, Python может "отложить" операцию и продолжать выполнять другие задачи. Этот стиль программирования поддерживается модулем asyncio. Пример кода с использованием asyncio:
import asyncio

async def print_numbers():
    for i in range(5):
        print(f"Number: {i}")
        await asyncio.sleep(1)

async def print_letters():
    for letter in 'abcde':
        print(f"Letter: {letter}")
        await asyncio.sleep(1)

async def main():
    task1 = asyncio.create_task(print_numbers())
    task2 = asyncio.create_task(print_letters())
    
    await task1
    await task2

asyncio.run(main())
В этом примере задачи выполняются асинхронно: программа поочередно переключается между ними. Итак, многопоточность больше подходит для задач, которые могут выполняться параллельно на разных ядрах процессора, в то время как асинхронное программирование лучше подходит для операций ввода-вывода, при которых задействуется время ожидания. Надеюсь, этот краткий экскурс в параллельные миры многопоточности и асинхронности зажег ваш интерес к изучению этих мощных инструментов. Ведь с их помощью ваш Python-код станет еще более эффективным и мощным!

Основы многопоточности и асинхронного программирования
Основы многопоточности и асинхронного программирования

Привет, начинающие маги Python! Сегодня у нас захватывающее приключение в мир создания графических приложений. Если вы когда-либо мечтали сделать свое собственное приложение с кнопками и вводом данных, то вы попали по адресу. Знакомьтесь, это Tkinter – ваш верный спутник на пути к созданию GUI-программ. Что же такое Tkinter? Это библиотека, которая позволяет нам создавать окна, кнопки, поля ввода и массу других графических элементов на языке Python. Tkinter входит в стандартную библиотеку Python, что делает его доступным прямо "из коробки". Начнем с создания простого окна. Это как раз тот момент, когда мы открываем "волшебную книгу" и делаем первый шаг в мир GUI.
import tkinter as tk

root = tk.Tk()
root.title("Мое первое приложение")
root.geometry("300x200")

root.mainloop()
В этом небольшом кусочке кода мы импортировали библиотеку tkinter и создали главное окно. Метод mainloop() заставляет наше приложение работать и реагировать на события. Теперь добавим в наше окно немного интерактивности с помощью кнопки:
def on_button_click():
    print("Кнопка нажата!")

button = tk.Button(root, text="Нажми меня", command=on_button_click)
button.pack()
Сначала мы создали функцию, которая будет выполняться при нажатии кнопки. Затем, с помощью функции Button, добавили кнопку в наше окно. Метод pack() заботится о расстановке элементов. Вуаля, у нас уже есть интерактивное приложение! Tkinter также позволяет работать с полями ввода. Давайте добавим поле, в которое пользователь сможет вводить текст:
entry = tk.Entry(root)
entry.pack()

def show_entry_data():
    user_input = entry.get()
    print(f"Вы ввели: {user_input}")

show_button = tk.Button(root, text="Показать текст", command=show_entry_data)
show_button.pack()
Здесь мы создаем объект Entry, представляющий поле ввода, и добавляем кнопку, которая выводит введенный текст в консоль. Можно продолжать бесконечно, добавляя новые элементы и функциональность: списки, выпадающие меню, и даже сложные интерфейсы с помощью библиотеки Tkinter. Это мощный инструмент, который при должном старании поможет создать приложение мечты. Теперь у вас есть все необходимое для начала работы с Tkinter! Исследуйте, экспериментируйте и создавайте. Помните, в программировании, как и в магии, возможности ограничены лишь вашим воображением. Удачи в создании ваших первых графических приложений!

Создание GUI приложений с использованием Tkinter
Создание GUI приложений с использованием Tkinter

Сегодня мы погрузимся в удивительный мир интерактивной визуализации данных с помощью библиотеки Plotly. Если вы когда-нибудь хотели оживить свои графики и сделать их более впечатляющими, то Plotly — это именно то, что вам нужно! Plotly — это библиотека для создания интерактивной графики на Python, которая позволяет вам создавать визуализации, которые не только выглядят потрясающе, но и дают возможность пользователю взаимодействовать с данными. Это отличный инструмент для анализа данных и создания презентаций. Начнем с простого примера. Допустим, у вас есть данные о продажах разных продуктов, и вы хотите визуализировать их в виде столбчатой диаграммы:
import plotly.graph_objects as go

categories = ['Продукт A', 'Продукт B', 'Продукт C']
values = [150, 200, 250]

fig = go.Figure([go.Bar(x=categories, y=values)])
fig.show()
Этот код создаст простую и понятную столбчатую диаграмму, которую можно будет масштабировать, наводить на элементы и даже выгрузить в различных форматах. С Plotly вы увидите, как ваши данные оживают на экране! Но это только начало! Допустим, вы хотите создать линейный график, чтобы лучше понять динамику продаж за год:
import plotly.express as px
import pandas as pd

data = pd.DataFrame({
    'month': ['Январь', 'Февраль', 'Март', 'Апрель'],
    'sales': [2000, 3000, 4000, 3500]
})

fig = px.line(data, x='month', y='sales', title='Динамика продаж')
fig.show()
Этот код создаст стильный линейный график, готовый к тому, чтобы рассказать вашу историю данных. Каждый узел на линии станет интерактивной точкой, которую можно исследовать, получая дополнительную информацию. Plotly в полной мере раскрывает свой потенциал при работе с картами и 3D-графиками, что делает его незаменимым в мире больших данных и геовизуализаций. Теперь, вооружившись этими знаниями, вы можете создавать прекрасные интерактивные графики для любого случая. Начните использовать Plotly в своих проектах, и увидите, насколько обогащается ваш опыт работы с данными. В следующий раз мы поговорим о других полезных библиотеках для Python-программистов. Оставайтесь с нами!

Интерактивные графики и визуализация данных с Plotly
Интерактивные графики и визуализация данных с Plotly

Привет, друзья! Сегодня я хочу рассказать вам о магии, которая позволяет извлекать данные из веб-страниц, и имя этой магии — BeautifulSoup. Мы окунёмся в увлекательный мир парсинга и узнаем, как легко можно с помощью Python достать нужную информацию с любого сайта. Начнем с того, что такое BeautifulSoup. Это библиотека на Python, которая позволяет парсить HTML и XML документы, создавая объектное представление документа. Это означает, что она преобразует код в красивую, организованную структуру, с которой легко работать. Давайте рассмотрим, как же это происходит на практике. Первое, что нам нужно, это установить библиотеку. Если её у вас еще нет, быстро устанавливаем с помощью команды:
pip install beautifulsoup4
Также, для получения HTML-кода страниц, нам понадобится библиотека requests. Установить её можно аналогичным образом:
pip install requests
Теперь, когда всё готово, давайте напишем небольшой код, который извлечет заголовки статей с какой-нибудь интересной страницы. Например, возьмем "https://example.com".
import requests
from bs4 import BeautifulSoup

# Отправляем GET-запрос к странице
response = requests.get("https://example.com")

# Проверяем, что страница загрузилась успешно
if response.status_code == 200:
    page_content = response.text
    soup = BeautifulSoup(page_content, 'html.parser')

    # Ищем все заголовки на странице
    titles = soup.find_all('h2')  # предположим, наши заголовки — это теги <h2>

    # Печатаем все найденные заголовки
    for title in titles:
        print(title.get_text())

else:
    print("Не удалось загрузить страницу")    
Что здесь происходит? Мы отправляем запрос на веб-страницу и проверяем, что она была загружена успешно. Затем передаем содержимое страницы в BeautifulSoup. После чего начинаем извлекать информацию. В нашем случае, это все теги <h2>, которые содержат заголовки статей. Конечно, это всего лишь верхушка айсберга. BeautifulSoup обладает множеством функций для поиска и навигации по HTML-документу. Например, можно использовать метод find, чтобы найти первый элемент с заданным тегом, или метод find_all для поиска всех элементов с таким тегом. Можно также использовать CSS-селекторы для более сложных запросов. Хотите выделить текстовое содержимое всех параграфов с классом intro? Нет ничего проще:
intro_paragraphs = soup.select('p.intro')

for paragraph in intro_paragraphs:
    print(paragraph.get_text())
Вот так просто можно извлечь нужные данные! BeautifulSoup — это мощный инструмент для веб-скрейпинга, и с его помощью можно автоматизировать множество рутинных задач. Надеюсь, этот краткий экскурс открыл перед вами новые возможности! Удачного парсинга, друзья!

Как парсить веб-страницы и извлекать данные с BeautifulSoup
Как парсить веб-страницы и извлекать данные с BeautifulSoup

Итак, представьте, что вы путешественник в мире Python, и на вашем пути вам предстоит встретить невидимых врагов — исключения. Это те незаметные препятствия, которые поджидают в вашем коде и могут сорвать всё путешествие. Но не волнуйтесь, я расскажу вам, как превратить этих противников в союзников! Исключения в Python — это особые события, которые возникают во время исполнения программы и сигнализируют о нештатной ситуации. Например, вы пытаетесь разделить число на ноль, но вместо катастрофы программа генерирует исключение, указывающее на ошибку. Но как же справиться с этими пакостниками? Тут приходит на помощь конструкция try-except. Она — ваш верный компас, который поможет обойти ловушки. Давайте посмотрим на небольшой пример:
try:
    result = 10 / 0
except ZeroDivisionError:
    print("Oops! Division by zero is not allowed.")
Что здесь происходит? Мы вставляем потенциально опасный код в блок try. Если возникает исключение, Python ищет блок except, соответствующий типу исключения. В нашем случае это ZeroDivisionError, и программа выводит дружественное сообщение, вместо того чтобы упасть с громким стуком. Но это ещё не всё! Исключений бывает множество, и иногда вам нужно отловить их всех разом. Используйте простое except, чтобы поймать любую неожиданность:
try:
    int_value = int("not_a_number")
except:
    print("An error occurred!")
Однако будьте осторожны! Такой подход может скрыть важные детали об ошибке. Лучше обрабатывать исключения более конкретно и добавлять несколько блоков except при необходимости. Ещё одна мощная техника — блоки finally и else. Они помогут завершить вашу одиссею на высокой ноте. Блок finally исполняется после всех остальных, независимо от исхода. Это идеальное место, чтобы освободить ресурсы или закрыть файлы.
try:
    file = open("data.txt")
    content = file.read()
except FileNotFoundError:
    print("File not found!")
else:
    print("File successfully read.")
finally:
    file.close()
Этот пример демонстрирует использование всех четырёх блоков. else выполняется, если ошибок не произошло, и finally закрывает файл, гарантируя отсутствие утечек ресурсов. Теперь, когда вы знаете, что исключения — это не враги, а предупреждающие сигналы, вы вооружены знанием и готовы к любым неожиданностям на вашем пути. Впереди вас ждет ещё много удивительных открытий в мире Python!

Что такое исключения и как обрабатывать ошибки в коде
Что такое исключения и как обрабатывать ошибки в коде

Привет, друзья! Сегодня мы погрузимся в волшебный мир объектно-ориентированного программирования (ООП) на Python. ООП — это не просто подход к написанию кода, это целая философия, которая позволяет упорядочивать ваш код и делает его более читаемым и модульным. Если вы когда-либо задумывались о том, как создать собственный мир внутри вашего кода, то добро пожаловать в ООП! ### Путешествие начинается: Классы и Объекты Представьте, что вы — божественный создатель. И у вас есть волшебная возможность создавать собственные объекты на основе абстрактных чертежей. Эти чертежи называются классами. Класс описывает, какие свойства и методы будут у объектов, созданных на его основе.
class Wizard:
    def __init__(self, name, power):
        self.name = name
        self.power = power

    def cast_spell(self):
        print(f"{self.name} casts a spell with power of {self.power}!")
__init__ — это конструктор, с помощью которого мы инициализируем наши объекты. Такие объекты — это конкретные реализации класса, в некотором смысле «живые» сущности вашего кода. ### Магия, заключенная в Инкапсуляции Инкапсуляция — это концепция, которая позволяет скрыть внутреннюю реализацию классов. Мы можем защитить данные внутри класса и позволить взаимодействие только через методы. Это как если бы вы дарили миру гладко отполированный магический камень, не раскрывая, как он сделан. ### Полиморфизм: Многообразие форм Теперь представьте, что у вас есть школа магии с различными типами волшебников: одни взымают огонь, другие — воду. Полиморфизм позволяет использовать методы с одинаковыми именами для разных объектов, и каждый объект будет вести себя по-своему. Это как универсальный заклинательный жезл, который работает для всех.
class FireWizard(Wizard):
    def cast_spell(self):
        print(f"{self.name} summons blazing flames!")

class WaterWizard(Wizard):
    def cast_spell(self):
        print(f"{self.name} calls forth a tidal wave!")
### Наследование: Передай свои навыки! Наследование — это механизм, позволяющий создать новый класс на основе уже существующего. Это как передача знаний от учителя к ученику. Вы можете расширять базовый класс, добавляя новые функции и переопределяя существующие. Мы лишь поверхностно коснулись магии, заключенной в ООП, но надеюсь, эти примеры увлекли вас и вызвали желание изучать дальше. Объектно-ориентированное программирование — это мощный инструмент, и освоив его, вы сможете создавать поистине удивительные структуры в вашем коде. До встречи в следующем посте, где мы продолжим наши исследования в мире Python!

Основы объектно-ориентированного программирования на Python
Основы объектно-ориентированного программирования на Python

### Как использовать списочные выражения для упрощения кода Привет, друзья! Сегодня мы погрузимся в загадочный и увлекательный мир Python, а именно—в списочные выражения. Эти маленькие джедаи помогают нам писать код, который не только выглядит лучше, но и работает эффективнее! #### Что такое списочные выражения? Списочные выражения—это специальный синтаксис в Python, который позволяет создавать списки на лету, словно по волшебной палочке. Вместо использования многострочных циклов, вы можете создать новый список в одну строку. Да-да, всего одной строчкой! Например, представьте, что вам нужно создать список квадратов чисел от 0 до 9. В традиционном подходе вам бы пришлось использовать цикл for:
squares = []
for num in range(10):
    squares.append(num ** 2)
Списочные выражения упрощают эту задачу:
squares = [num ** 2 for num in range(10)]
Чище, правда? #### Фильтрация Но на этом магия не заканчивается! Списочные выражения позволяют встроить условные конструкции. Хотите, чтобы в список попадали только четные числа? Пожалуйста:
even_squares = [num ** 2 for num in range(10) if num % 2 == 0]
Таким образом, мы не только создаем список, но и фильтруем его в процессе. #### Работать с данными — легко! Рассмотрим пример с данными. Допустим, у нас есть список имён, и мы хотим создать новый список, содержащий только имена, которые начинаются с буквы "А":
names = ['Alice', 'Bob', 'Annie', 'Michael', 'Ann']
a_names = [name for name in names if name.startswith('A')]
Вот и всё! Код не только изящен и читабелен, но и прозрачен в своём намерении. #### Вложенные списки Звучит невероятно, но списочные выражения поддерживают вложенность. Хотите создать двумерную матрицу 3x3? Легко:
matrix = [[row * col for col in range(3)] for row in range(3)]
Элегантность и краткость в действии! #### Заключение Списочные выражения—это как небольшой Python-хак, который делает ваш код аккуратным и оптимизированным. Они сохраняют логику программы компактной и легко читаемой. Не бойтесь экспериментировать и искать новые способы применения этой мощной конструкции. Итак, друзья, если вы ещё не использовали списочные выражения в вашем коде, самое время начать! Ведь, как говорил великий учитель Йода: "Делай или не делай, нет тут пробовать". Вперед за красивым и эффективным кодом!

Как использовать списочные выражения для упрощения кода
Как использовать списочные выражения для упрощения кода

Привет, друзья-программисты! Сегодня мы погрузимся в увлекательный мир визуализации данных с помощью одного из самых популярных инструментов в мире Python — библиотеки matplotlib. Представьте, что ваша программа — это футуристическая лаборатория, в которой можно оживить цифры и таблицы, превратив их в красочные графики, иллюстрирующие скрытые закономерности и тенденции. Это не просто возможность, а настоящая суперсила для любого программиста! Matplotlib — библиотека, которая предоставляет невероятные возможности для создания графиков. С ней вы сможете воплотить в жизнь самые смелые идеи визуализации. Она настолько мощная и гибкая, что на первый взгляд может показаться немного сложной. Но не волнуйтесь, ведь для начала работы вам понадобятся всего несколько простых команд. Давайте начнем с малого и создадим классический линейный график. Для этого нам понадобится matplotlib и numpy. Numpy поможет нам сгенерировать набор данных, а matplotlib — визуализировать их.
import matplotlib.pyplot as plt
import numpy as np

# Генерация данных
x = np.linspace(0, 10, 100)
y = np.sin(x)

# Создание графика
plt.plot(x, y)

# Добавление заголовка и меток
plt.title('Простой линейный график')
plt.xlabel('Значения X')
plt.ylabel('Значения Y')

# Отображение графика
plt.show()
Наконец-то, вместо скучных цифр на экране, вы видите прекрасную линию, танцующую вдоль оси X! А теперь добавим немного цвета и стиля. Хотите чего-то более яркого? Давайте создадим диаграмму разброса — отличный способ показать корреляцию в ваших данных.
import matplotlib.pyplot as plt
import numpy as np

# Генерация данных
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50)

# Создание диаграммы разброса
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')

# Добавление заголовка и меток
plt.title('Цветастая диаграмма разброса')
plt.xlabel('Значения X')
plt.ylabel('Значения Y')

# Отображение графика
plt.show()
О, посмотрите, как цвет красиво передает настроение и объем точек. Матplotlib делает это возможным с легкостью! Настраивайте размер, форму и палитру, чтобы ваши данные заиграли новыми красками. В завершение, matplotlib — это не просто инструмент, это чудесная палитра для создания ваших шедевров. Что можно добавить, чтобы сделать ваши графики еще круче? Конечно, легенды, штриховки и различные типы линий. Но это уже, как говорится, совсем другая история. Осталось лишь начать экспериментировать, ведь с matplotlib возможности практически безграничны! Надеюсь, ваш путь в визуализации будет столь же ярким, сколь и представленные графики. Удачи в освоении этой мощной библиотеки и до скорых встреч в мире Python!

Работа с графикой: Визуализация данных с помощью matplotlib
Работа с графикой: Визуализация данных с помощью matplotlib

# Как писать простые скрипты для автоматизации задач на Python Привет, друзья! Сегодня я поделюсь с вами тем, как Python может стать вашим надежным помощником в автоматизации рутинных задач. Если вы еще не пробовали использовать программирование для упрощения своей жизни, самое время начать. Python — это не только язык для профессионалов, но и отличный инструмент для новичков, позволяющий быстро создавать простые и эффективные скрипты. ### Почему Python? Python популярен благодаря своей простоте и широкой экосистеме. А значит, для ваших задач уже может существовать готовое решение в виде библиотеки, что значительно сэкономит время и усилия. ### Начнем с простого примера Представьте, что у вас есть каталог с десятками файлов, и вам нужно переименовать их по определенной схеме. Ручное переименование займет вечность, зато Python справится с этим за считанные секунды.
import os

def rename_files(directory_path, prefix):
    for index, filename in enumerate(os.listdir(directory_path)):
        new_name = f"{prefix}_{index}{os.path.splitext(filename)[1]}"
        os.rename(os.path.join(directory_path, filename), os.path.join(directory_path, new_name))

rename_files('/path/to/your/files', 'new_name')
В этой программе мы используем модуль os для манипуляции файлами и каталогами. Скрипт проходит по всем файлам в указанной директории и переименовывает их, добавляя префикс и номер. ### Скачивание данных из Интернета Еще одна распространенная задача — автоматическое скачивание данных. Python отлично справляется и с этим, благодаря библиотеке requests.
import requests

def download_file(url, save_path):
    response = requests.get(url)
    with open(save_path, 'wb') as file:
        file.write(response.content)

download_file('https://example.com/data.csv', 'data.csv')
Этот простой скрипт загружает файл по указанному URL и сохраняет его на вашем компьютере. Библиотека requests делает процесс взаимодействия с веб-ресурсами невероятно удобным. ### Отправка автоматических писем Представьте, что вам нужно ежедневно отправлять отчеты по электронной почте. Вместо того чтобы делать это вручную, вы можете написать скрипт с использованием модуля smtplib:
import smtplib
from email.mime.text import MIMEText

def send_email(subject, body, to_email):
    from_email = "your_email@gmail.com"
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = from_email
    msg['To'] = to_email

    with smtplib.SMTP('smtp.gmail.com', 587) as server:
        server.starttls()
        server.login(from_email, 'your_password')
        server.send_message(msg)

send_email("Daily Report", "Here is the report for today.", "recipient@example.com")
Обратите внимание на то, что вам нужно будет создать и использовать надежные механизмы для хранения и использования паролей. ### Заключение Python предлагает множество инструментов для автоматизации, от простых скриптов до сложных систем. Главное — понять, какую задачу вы хотите решить. Затем можно начать с небольших и простых программ, постепенно совершенствуя их. Удачи в автоматизации ваших задач, и пусть рутинная работа станет для вас прошлым!

Как писать простые скрипты для автоматизации задач
Как писать простые скрипты для автоматизации задач

Привет, друзья! Сегодня предлагаю погрузиться в увлекательный мир времени и дат с Python. Временные парадоксы оставим для научной фантастики, а сами разберем как манипулировать с временными данными в нашем коде, используя возможности знаменитого модуля datetime. ### Начнем с настоящего Первое, с чего стоит начать — это узнать текущее время. Почему бы и нет? В Python это проще простого. Давайте взглянем на пример:
from datetime import datetime

current_time = datetime.now()
print("Сейчас:", current_time)
Этот магический datetime.now() извлечёт информацию о текущем моменте до мельчайших деталей — от года до секунды. ### Назад в прошлое или шаг в будущее OK, настоящее познано. Что, если нужно узнать, что будет (или было) в другой время? Для этого в модуле есть класс timedelta. Давайте, например, убедимся, что Python способен отправить нас на неделю вперед:
from datetime import datetime, timedelta

one_week_later = datetime.now() + timedelta(weeks=1)
print("Неделя спустя:", one_week_later)
С помощью объекта timedelta мы можем свободно перемещаться по временной шкале, играючи добавляя или вычитая часы, дни, недели и даже секунды. ### Ох, эта дата! Работа с датой на старом добром календаре? Легкотня. Но как насчет форматирования? Посмотрите на это:
some_date = datetime(2023, 5, 17)
formatted_date = some_date.strftime("%A, %d %B %Y")
print("Красиво оформленная дата:", formatted_date)
С помощью strftime мы формируем строку, отражая день недели, число, месяц и год в подходящем формате. Гибкость таких операций открывает двери к борьбе с временными данными на лету. ### Не потеряться во времени Наконец, перейдем ко времени. Если на моменте печати чек-фьич в интернет-магазине время очень важно, то сокращенная версия времени будет полезна:
current_time = datetime.now().time()
print("Текущее время:", current_time)
Здесь мы вызвали time(), чтобы просто получить время без даты. Это удобно, если дата уже не столь критична. ### Заключение Определенно, модуль datetime в Python — одна из тех библиотек, которые вам не нужно будет игнорировать, даже если вы кодите что-то простое. Он не только позволяет управлять и представлять данные с точным временным штампом, но и переносит нас в будущее или прошлое, когда это необходимо. Так что, если вдруг под руки попалась задача, где нужно поиграть со временем, вспомните о нашем хорошем друге datetime. Удачного кодинга и не забывайте вовремя отдыхать, ведь в жизни все наладится, пока Python контролирует ваши часы!

Основы работы с датой и временем в Python
Основы работы с датой и временем в Python