Kodduu Python
1.07K subscribers
312 photos
28 videos
188 links
Научись программировать на Python на интересных примерах

Самый быстрый курс https://stepik.org/a/187914
Самый нескучный курс https://stepik.org/a/185238

Во вопросам сотрудничества: @AlexErf
Download Telegram
Давайте рассмотрим пример с использованием библиотеки howdoi, которая представляет собой инструмент командной строки, позволяющий получать мгновенные ответы на вопросы по программированию прямо из консоли. Это может быть особенно полезно, когда вам нужен быстрый ответ на вопрос по коду, не отвлекаясь на поиск в интернете.

### Установка howdoi

Перед использованием убедитесь, что у вас установлена библиотека howdoi:

pip install howdoi

### Использование howdoi в Python скрипте

Хотя howdoi изначально предназначен для использования в командной строке, мы можем интегрировать его в Python скрипт, используя функцию howdoi.howdoi.

from howdoi import howdoi

# Формируем запрос
query = "reverse a list in python"

# Формируем параметры запроса, добавляя необходимые ключи
params = {
'query': 'reverse a list in python',
'all': False,
'num_answers': 1,
'pos': 1,
'search_engine': 'google', # Явно указываем поисковую систему
'explain': False # Предполагаемое значение для 'explain'
}

# Получаем ответ
answer = howdoi.howdoi(params)

print(f"Вопрос: Как перевернуть список в Python?")
print("Ответ:")
print(answer)

Этот скрипт отправляет запрос "Как перевернуть список в Python?" и выводит полученный ответ. howdoi автоматически ищет ответы на вопросы по программированию, используя различные источники в интернете, и предоставляет краткий и точный ответ.

### Примечание

Использование howdoi в качестве библиотеки может быть не таким же прямолинейным, как использование его через командную строку, и может потребовать дополнительной настройки или обновления, в зависимости от версии библиотеки и её текущего API. Также стоит учитывать, что качество и точность ответов зависят от источников, к которым обращается howdoi, и могут варьироваться.

Этот пример демонстрирует, как можно интегрировать внешние инструменты и API в свои Python скрипты для расширения их функциональности, делая процесс разработки более эффективным и менее затратным по времени.

Подпишись 👉🏻 @KodduuPython 🤖
Новый самый быстрый курс по JavaScript 🤖 Перед Вами самый быстрый курс по JavaScript, тут есть все что нужно чтобы начать программировать на JS. Для тех кому некогда, но очень надо выучить JS или подтянуть базу перед собеседованием. Мы отвечаем на все ваши комментарии и вопросы в курсе 👨‍💻👩‍💻
Код для обнаружения космический лучей:

# Бесконечный цикл, который "обнаруживает" космические лучи
while True:
if False:
print("Космический луч обнаружен!")
else:
print("Обнаружение космических лучей...")

# Добавим задержку, чтобы не заспамить консоль
import time
time.sleep(1)


Этот код будет бесконечно печатать "Обнаружение космических лучей...", пока не обнаружит космический луч! С днем космонавтики всех 🧑‍🚀

Подпишись 👉🏻 @KodduuPython 🤖
Давайте рассмотрим два интересных кейса из астрономии и космонавтики, которые можно реализовать на Python:

1. Расчет орбитальных параметров спутника — вычисление параметров орбиты, таких как большая полуось, период обращения и эксцентриситет орбиты.
2. Определение видимости космических объектов — определение, когда и где на Земле можно наблюдать определенные космические объекты, такие как планеты или спутники.

### 1. Расчет орбитальных параметров спутника

Этот код будет использовать закон третьего Кеплера для расчета периода обращения спутника на основе его большой полуоси.

def orbital_period(semi_major_axis, central_mass):
"""
Calculate the orbital period of a satellite using Kepler's third law.

Args:
semi_major_axis (float): Semi-major axis of the orbit in meters.
central_mass (float): Mass of the central body around which the satellite orbits in kilograms.

Returns:
float: Orbital period in seconds.
"""
G = 6.67430e-11 # Gravitational constant in m^3 kg^-1 s^-2
period = 2 * 3.14159 * (semi_major_axis ** 3 / (G * central_mass)) ** 0.5
return period

# Example usage:
# Earth's mass ~ 5.972e24 kg, GEO orbit semi-major axis ~ 42,164 km
# orbital_period(42164000, 5.972e24)


### 2. Определение видимости космических объектов

Этот код будет использовать библиотеку ephem для определения, когда и где на Земле можно увидеть Марс.

import ephem

def mars_visibility(observer_latitude, observer_longitude):
"""
Determine the next time Mars is visible from a given location on Earth.

Args:
observer_latitude (float): Latitude of the observer in degrees.
observer_longitude (float): Longitude of the observer in degrees.

Returns:
str: Date and time when Mars is visible next.
"""
observer = ephem.Observer()
observer.lat = str(observer_latitude)
observer.long = str(observer_longitude)
mars = ephem.Mars()
next_rising = observer.next_rising(mars)
return next_rising.datetime().strftime('%Y-%m-%d %H:%M:%S')

# Example usage:
# mars_visibility(48.8566, 2.3522) # Paris coordinates


Подпишись 👉🏻 @KodduuPython 🤖
Дескрипторы в Python — это объекты, которые реализуют методы протокола дескрипторов (__get__, __set__, и __delete__). Они позволяют вам контролировать доступ к атрибутам. Дескрипторы используются для реализации свойств, методов, статических методов, классовых методов и многого другого.

Ниже приведен простой пример, демонстрирующий использование дескрипторов для управления доступом к атрибуту класса:

class TypedProperty:
def __init__(self, name, type, default=None):
self.name = "_" + name
self.type = type
self.default = default if default else type()

def __get__(self, instance, cls):
return getattr(instance, self.name, self.default)

def __set__(self, instance, value):
if not isinstance(value, self.type):
raise TypeError(f"Значение должно быть типа {self.type}")
setattr(instance, self.name, value)

def __delete__(self, instance):
raise AttributeError("Невозможно удалить атрибут")

class Person:
name = TypedProperty("name", str)
age = TypedProperty("age", int)

def __init__(self, name, age):
self.name = name
self.age = age

# Создание экземпляра класса Person
p = Person("Алексей", 34)

# Получение доступа к атрибутам
print(p.name) # Алексей
print(p.age) # 34

# Попытка присвоить некорректный тип данных атрибуту
try:
p.age = "тридцать четыре"
except TypeError as e:
print(e) # Значение должно быть типа <class 'int'>

# Попытка удалить атрибут
try:
del p.age
except AttributeError as e:
print(e) # Невозможно удалить атрибут


В этом примере TypedProperty является дескриптором, который контролирует, что значения, присваиваемые атрибутам name и age экземпляра класса Person, соответствуют указанным типам. Попытка присвоить значение неправильного типа приведет к возникновению исключения TypeError. Также, в данном примере, удаление атрибута с помощью del запрещено и приведет к возникновению AttributeError.

Подпишись 👉🏻 @KodduuPython 🤖
👍2
Метаклассы в Python — это глубокая и мощная особенность, позволяющая изменять поведение классов на этапе их создания. В основе своей метаклассы используются для создания "классов классов", т.е. они определяют, как классы должны быть созданы.

В Python, type является встроенным метаклассом, от которого производятся все новые классы. Вы можете использовать type для динамического создания классов, но также можете определить свой собственный метакласс, который наследуется от type, для кастомизации процесса создания класса.

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

# Определение метакласса
class UpperAttrMetaclass(type):
# Метод __new__ вызывается в момент создания класса
def __new__(cls, name, bases, dct):
# Преобразование всех атрибутов класса в верхний регистр
uppercase_attr = {}
for name, value in dct.items():
if not name.startswith('__'):
uppercase_attr[name.upper()] = value
else:
uppercase_attr[name] = value
# Создание класса с помощью type.__new__
return type.__new__(cls, name, bases, uppercase_attr)

# Использование метакласса для создания класса
class MyClass(metaclass=UpperAttrMetaclass):
bar = 'bip'

# Создание экземпляра класса
instance = MyClass()

# Попытка доступа к атрибуту в его исходном регистре не сработает
# print(instance.bar) # Это вызовет AttributeError

# Доступ к атрибуту после его преобразования в верхний регистр
print(instance.BAR) # Выведет: bip

# Этот пример демонстрирует, как метакласс изменяет атрибуты класса,
# преобразуя их имена в верхний регистр. Это может быть полезно в различных
# ситуациях, например, для обеспечения соответствия определенным конвенциям
# именования без необходимости вручную изменять каждое имя атрибута.


В этом примере UpperAttrMetaclass изменяет все атрибуты класса, созданного с его использованием, преобразуя их имена в верхний регистр. Это достигается за счет переопределения метода __new__ метакласса, который вызывается в момент создания класса. Важно отметить, что метаклассы — это продвинутая и мощная особенность Python, использование которой может сделать код сложнее для понимания. Поэтому применять их следует осторожно и с умом.

Подпишись 👉🏻 @KodduuPython 🤖
👍2
Понял, давайте попробуем что-то уникальное и полезное в другой области. Рассмотрим библиотеку Pendulum для работы с датами и временем в Python. Pendulum предоставляет удобные инструменты для парсинга, манипуляции и форматирования дат и времени. Она обладает рядом преимуществ перед стандартными библиотеками datetime и pytz, такими как улучшенная поддержка временных зон и более интуитивный API.

### Установка Pendulum

Перед использованием Pendulum убедитесь, что вы установили его через pip:

pip install pendulum


### Пример использования Pendulum

Давайте посмотрим на простой пример, демонстрирующий некоторые возможности Pendulum:

import pendulum

# Создание объекта datetime сейчас
now = pendulum.now()
print(f"Сейчас: {now.to_datetime_string()}")

# Парсинг строки в дату/время
dt = pendulum.parse('2024-04-02T15:30:00')
print(f"Парсинг строки в дату/время: {dt.to_datetime_string()}")

# Работа с временными зонами
paris = pendulum.now('Europe/Paris')
print(f"Время в Париже: {paris.to_datetime_string()}")

# Манипуляции с датой/временем
in_two_weeks = now.add(weeks=2)
print(f"Через две недели будет: {in_two_weeks.to_date_string()}")

# Разница между двумя датами
diff = pendulum.now().diff(pendulum.now().subtract(hours=2))
print(f"Разница между датами: {diff.in_hours()} часов")

# Локализация
localized = now.in_locale('ru')
print(f"Месяц по-русски: {localized.format('MMMM')}")

# Форматирование
formatted = now.format('YYYY-MM-DD HH:mm:ss')
print(f"Отформатированная дата: {formatted}")


Этот пример демонстрирует базовые возможности Pendulum, такие как создание объектов даты/времени, парсинг, работа с временными зонами, манипуляции с датами и временем, разница между датами, локализация и форматирование. Pendulum делает работу с датами и временем в Python значительно проще и интуитивно понятнее.

Подпишись 👉🏻 @KodduuPython 🤖
👍4
Одной из новых и интересных библиотек в Python, которая появилась на горизонте и привлекла внимание сообщества, является Textual. Textual — это библиотека для создания современных терминальных интерфейсов с использованием асинхронного программирования, что делает её особенно подходящей для создания сложных текстовых пользовательских интерфейсов (TUI).

Textual использует возможности современных терминалов для создания богатых текстовых интерфейсов с элементами управления, анимацией и даже поддержкой веб-технологий в терминале. Она строится на асинхронных возможностях Python и позволяет создавать реактивные TUI с минимальными затратами времени и усилий.

Пример простого текстового интерфейса с использованием Textual:

# Убедитесь, что у вас установлена библиотека Textual
# pip install textual

from textual.app import App
from textual.widgets import Header, Footer, Placeholder

class SimpleApp(App):
async def on_mount(self) -> None:
"""Метод вызывается при монтировании приложения."""
# Добавляем виджеты: заголовок, подвал и заполнитель в тело приложения
await self.view.dock(Header(), edge="top")
await self.view.dock(Footer(), edge="bottom")
await self.view.dock(Placeholder(), edge="left", size=40)
await self.view.dock(Placeholder(), edge="right")

# Запуск приложения
if __name__ == "__main__":
app = SimpleApp()
app.run()


Этот код создает простое приложение с использованием Textual, которое включает в себя заголовок, подвал и два заполнителя, расположенных слева и справа в терминале. Textual обрабатывает всю асинхронность и обновление интерфейса за вас, позволяя сосредоточиться на логике приложения.

Textual является мощным инструментом для создания сложных TUI и может быть особенно полезен для разработки инструментов разработки, системного администрирования и любых приложений, где графический интерфейс пользователя не требуется или не желателен.

Обратите внимание, что для работы с Textual и асинхронным программированием вам потребуется понимание асинхронных функций и сопрограмм в Python.

Подпишись 👉🏻 @KodduuPython 🤖
🔥🔥🔥 Апрельская распродажа курсов 🤖🤖🤖

👉 Python в нескучных примерах (50) 🔥

Это курс cook book или книга рецептов, где можно как пройти всю базу по Python, так и попробовать совершенно разные библиотеки от рисования до нейросетей.

👉 Python: самый быстрый курс 🔥

Этот курс очень хорошо структурирован, поэтому он самый короткий среди существующих курсов. В курсе есть вся база для того, чтобы стать разработчиком. После завершения вы сможете создать свой проект на Python. Цель курса - максимально быстро и точно погрузить Вас в прекрасный мир разработки. Выбирайте Python - самый популярный язык на сегодняшний день!

👉 JavaScript: самый быстрый курс 🔥

Перед Вами самый быстрый курс по JavaScript, тут есть все что нужно чтобы начать программировать на JS. Для тех кому некогда, но очень надо выучить JS или подтянуть базу перед собеседованием. Мы отвечаем на все ваши комментарии и вопросы в курсе.
Давайте рассмотрим использование библиотеки faker, которая предназначена для генерации большого количества фиктивных данных для различных целей, таких как тестирование, наполнение баз данных для разработки и т.д. Faker может создавать данные на множестве языков и для различных культур, включая, но не ограничиваясь, имена людей, адреса, телефонные номера, и даже тексты на "рыбном" языке.

### Установка faker

Если у вас еще не установлена библиотека faker, вы можете сделать это с помощью pip:

pip install faker


### Пример использования faker

В этом примере мы сгенерируем набор фиктивных данных для имитации информации о пользователях.

from faker import Faker

# Создаем объект Faker. Можно указать язык/локаль для генерации данных, например, 'ru_RU' для русскоязычных данных.
fake = Faker()

# Генерируем и выводим фиктивные данные
print("Фиктивные данные пользователя:")

for _ in range(5): # Генерируем данные для 5 пользователей
name = fake.name() # Имя
address = fake.address() # Адрес
email = fake.email() # Электронная почта
job = fake.job() # Профессия
date_of_birth = fake.date_of_birth() # Дата рождения

# Выводим сгенерированные данные
print(f"Имя: {name}, Дата рождения: {date_of_birth}, Профессия: {job}, Email: {email}, Адрес: {address}\n")

# Генерация текста на "рыбном" языке
lorem_text = fake.text()
print("Пример текста на 'рыбном' языке:")
print(lorem_text)


Этот скрипт демонстрирует базовое использование faker для генерации разнообразных типов данных. Вы можете настроить генерацию данных под конкретные нужды, выбирая из широкого спектра методов, которые faker предоставляет. Например, можно генерировать данные, специфичные для определенной страны или культуры, используя соответствующую локализацию при создании экземпляра Faker.

Faker является мощным инструментом для разработчиков и QA инженеров, позволяя создавать реалистичные данные для тестирования и разработки без необходимости раскрывать личную информацию реальных пользователей.

Подпишись 👉🏻 @KodduuPython 🤖
Давай создадим простой текстовый анализатор на Python, который будет анализировать текст и выдавать статистику по использованию слов и предложений. Этот скрипт будет читать текстовый файл, считать количество слов, уникальных слов, количество предложений и наиболее часто встречающиеся слова. Вот пример кода:

import re
from collections import Counter

def analyze_text(text):
# Убираем знаки препинания и приводим к нижнему регистру
words = re.findall(r'\b\w+\b', text.lower())
# Подсчёт слов
total_words = len(words)
unique_words = len(set(words))
# Подсчёт предложений
sentences = re.split(r'[.!?]+', text)
total_sentences = len(sentences) - 1 # Вычитаем пустое последнее предложение после разделения

# Часто встречающиеся слова
word_counts = Counter(words)
most_common_words = word_counts.most_common(10)

return {
"total_words": total_words,
"unique_words": unique_words,
"total_sentences": total_sentences,
"most_common_words": most_common_words
}

# Чтение текста из файла
def read_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
return file.read()

def main():
file_path = input("Введите путь к файлу для анализа: ")
text = read_file(file_path)
result = analyze_text(text)

print(f"Общее количество слов: {result['total_words']}")
print(f"Количество уникальных слов: {result['unique_words']}")
print(f"Количество предложений: {result['total_sentences']}")
print("Наиболее часто встречающиеся слова:")
for word, count in result['most_common_words']:
print(f"{word}: {count}")

if __name__ == "__main__":
main()


Этот код будет работать следующим образом:
1. Сначала он просит пользователя ввести путь к файлу, который необходимо анализировать.
2. Считывает текст из файла и передаёт его в функцию analyze_text.
3. Функция анализирует текст, удаляя знаки препинания, подсчитывая слова и предложения, и находя наиболее часто встречающиеся слова.
4. Выводит полученные результаты.

Убедитесь, что у вас есть доступ к файлу с текстом для анализа, чтобы этот код работал корректно.

Подпишись 👉🏻 @KodduuPython 🤖
Распродажа курсов в самом разгаре, даже Elon Mask 🤯 уже купил наш курс 👉 JavaScript: самый быстрый курс 🔥 и учит JavaScript 🤖
Создадим программу, которая генерирует музыкальные пьесы на основе заданной музыкальной гаммы с использованием библиотеки mido, которая предназначена для работы с MIDI файлами. Программа будет спрашивать у пользователя желаемый размер композиции и используемую гамму, после чего создаст случайную музыкальную последовательность.

Для начала установите библиотеку mido:

pip install mido


А вот и сам код:

import random
from mido import MidiFile, MidiTrack, Message, MetaMessage

def create_scale(root_note, scale_type):
# Музыкальные интервалы для разных типов гамм
scale_patterns = {
'major': [2, 2, 1, 2, 2, 2, 1],
'minor': [2, 1, 2, 2, 1, 2, 2],
}
pattern = scale_patterns[scale_type]
scale = [root_note]
current_note = root_note
for step in pattern:
current_note += step
if current_note > 127: # MIDI notes range from 0 to 127
break
scale.append(current_note)
return scale

def generate_music(scale, num_notes, file_name):
mid = MidiFile()
track = MidiTrack()
mid.tracks.append(track)

track.append(MetaMessage('set_tempo', tempo=500000)) # Установить темп
track.append(Message('program_change', program=12)) # Выбор инструмента

for _ in range(num_notes):
note = random.choice(scale)
track.append(Message('note_on', note=note, velocity=64, time=120))
track.append(Message('note_off', note=note, velocity=64, time=120))

mid.save(file_name)
print(f"Музыкальное произведение сохранено в {file_name}")

def main():
root_note = int(input("Введите начальную ноту (MIDI номер): "))
scale_type = input("Введите тип гаммы (major или minor): ")
num_notes = int(input("Количество нот в композиции: "))
file_name = input("Введите имя файла для сохранения композиции: ")

scale = create_scale(root_note, scale_type)
generate_music(scale, num_notes, file_name)

if __name__ == "__main__":
main()


Эта программа выполняет следующие задачи:
1. Запрашивает у пользователя начальную ноту, тип гаммы, количество нот и имя файла.
2. Создаёт музыкальную гамму на основе заданных параметров.
3. Генерирует последовательность нот на основе этой гаммы.
4. Сохраняет полученную музыкальную композицию в MIDI-файл.

Это интересный способ познакомиться с генерацией музыки на Python!

Подпишись 👉🏻 @KodduuPython 🤖
Создадим программу на Python, которая моделирует эволюцию популяции с помощью генетического алгоритма. Генетические алгоритмы — это методы поиска и оптимизации, вдохновлённые процессом естественного отбора. Мы создадим простую симуляцию, в которой "особи" популяции будут стремиться к максимальному значению какой-то численной "приспособленности".

import random

# Параметры
population_size = 10
genome_length = 10
mutation_rate = 0.01
num_generations = 50

# Генерируем начальную популяцию
def generate_initial_population(size, genome_length):
return [[random.randint(0, 1) for _ in range(genome_length)] for _ in range(size)]

# Оценка приспособленности
def fitness(genome):
return sum(genome) # Приспособленность особи пропорциональна количеству единиц в геноме

# Размножение
def reproduce(parent1, parent2):
crossover_point = random.randint(0, len(parent1) - 1)
child = parent1[:crossover_point] + parent2[crossover_point:]
return child

# Мутация
def mutate(genome, mutation_rate):
return [gene if random.random() > mutation_rate else 1 - gene for gene in genome]

# Отбор особей для размножения
def select_pair(population):
return random.sample(population, 2)

def run_simulation():
population = generate_initial_population(population_size, genome_length)

for generation in range(num_generations):
# Оцениваем приспособленность каждой особи
population = sorted(population, key=fitness, reverse=True)

# Выводим лучшую особь
print(f"Поколение {generation}, Лучшая приспособленность: {fitness(population[0])}")

# Создаем новую популяцию
new_population = []
while len(new_population) < population_size:
parent1, parent2 = select_pair(population)
child = reproduce(parent1, parent2)
child = mutate(child, mutation_rate)
new_population.append(child)

population = new_population

if __name__ == "__main__":
run_simulation()


В этой программе:
1. Начальная популяция генерируется случайным образом.
2. Каждое поколение оценивается по приспособленности, определяемой количеством единиц в геноме.
3. Родители выбираются случайно, их дети создаются путем скрещивания, а затем подвергаются мутации.
4. Программа выводит лучшую приспособленность в каждом поколении, что демонстрирует, как улучшается "приспособленность" популяции со временем.

Это пример генетического алгоритма, который можно использовать в различных областях, от науки и инженерии до искусственного интеллекта и игр.

Подпишись 👉🏻 @KodduuPython 🤖
В Python можно демонстрировать разные парадигмы программирования, такие как процедурное программирование, объектно-ориентированное программирование (ООП) и функциональное программирование. Я покажу примеры каждой из этих парадигм:

1. Процедурное программирование — использует последовательность процедурных вызовов для выполнения задач.
2. Объектно-ориентированное программирование (ООП) — организует программу вокруг объектов и данных, а не функций и логики.
3. Функциональное программирование — строит структуру программы с использованием функций, использует концепции неизменяемости и первоклассных функций.

### Пример кода

#### Процедурное программирование
Процедурный пример может быть реализован как простая функция для вычисления факториала числа:
python
def factorial(n):
result = 1
for i in range(2, n + 1):
result *= i
return result

# factorial(5)


#### Объектно-ориентированное программирование (ООП)
Пример ООП может использовать класс для представления геометрической фигуры, например, круга, с методами для вычисления площади и периметра:
python
class Circle:
def __init__(self, radius):
self.radius = radius

def area(self):
return 3.14159 * self.radius ** 2

def perimeter(self):
return 2 * 3.14159 * self.radius

# circle = Circle(5)
# print(circle.area())
# print(circle.perimeter())


#### Функциональное программирование
Функциональный пример может включать использование функций высшего порядка и лямбда-функций для работы с данными:
python
from functools import reduce

def multiply(x, y):
return x * y

numbers = [1, 2, 3, 4, 5]
product = reduce(multiply, numbers)

# product


Подпишись 👉🏻 @KodduuPython 🤖