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

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

Во вопросам сотрудничества: @AlexErf
Download Telegram
Для имитации стиля Моргенштерна, который известен своими современными и динамичными треками, можно использовать простую схему рифмовки и повторения некоторых ключевых слов:

import random

def generate_line(subjects, actions, features):
return f"{random.choice(subjects)} {random.choice(actions)} {random.choice(features)}"

def generate_verse(style, lines=4):
subjects = ['Я', 'Ты', 'Она', 'Оно', 'Мы', 'Вы']
actions = ['люблю', 'вижу', 'чувствую', 'знаю', 'понимаю', 'слышу']
features = ['быстро', 'сильно', 'ярко', 'громко', 'мощно', 'вечно']

if style == 'modern':
actions += ['танцую', 'мечтаю', 'сияю', 'летаю']
features += ['в ночи', 'как звезда', 'среди толпы', 'на грани']

verse = "\n".join(generate_line(subjects, actions, features) for _ in range(lines))
return verse

# Генерация стиха в современном стиле
print(generate_verse('modern'))


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

Подпишись 👉🏻 @KodduuPython 🤖
1
В Python можно использовать библиотеки, такие как pretty_midi или MIDIUtil, для создания MIDI-файлов. Ниже представлен базовый пример кода, который генерирует простую музыкальную композицию в формате MIDI.

Установите MIDIUtil для работы с этим кодом:

pip install MIDIUtil


Пример кода для создания MIDI-файла:

from midiutil import MIDIFile

def create_simple_melody():
# Создаем MIDI файл с одним треком
midi = MIDIFile(1)
track = 0
time = 0
channel = 0
volume = 100

midi.addTrackName(track, time, "Track")
midi.addTempo(track, time, 120)

# Пример простой мелодии
notes = [60, 62, 64, 65, 67, 69, 71, 72] # C мажор
duration = 1

for note in notes:
midi.addNote(track, channel, note, time, duration, volume)
time += duration

with open("simple_melody.mid", "wb") as output_file:
midi.writeFile(output_file)

create_simple_melody()


Этот код создает простую мелодию в C мажоре. Для создания музыки в стиле конкретного артиста, например Моргенштерна, потребуется более сложный анализ его музыкальных композиций и применение соответствующих музыкальных паттернов и инструментов в MIDI-композиции.

Подпишись 👉🏻 @KodduuPython 🤖
🔥2
Для воспроизведения MIDI-файла непосредственно из Python, вы можете использовать библиотеку, такую как pygame, которая позволяет воспроизводить MIDI-файлы. Вот как вы можете это сделать:

1. Установите pygame:

    pip install pygame    

2. Добавьте следующий код для воспроизведения MIDI-файла:

    import pygame
import time

def play_midi(filename):
freq = 44100 # аудио CD качество
bitsize = -16 # беззнаковый короткий, little-endian
channels = 2 # 1 для моно, 2 для стерео
buffer = 1024 # количество сэмплов
pygame.mixer.init(freq, bitsize, channels, buffer)

# проверяем, что Mixer не занят другими задачами
if not pygame.mixer:
print("Не удалось инициализировать Mixer")
return

pygame.mixer.music.load(filename)
pygame.mixer.music.play()

while pygame.mixer.music.get_busy():
# Воспроизведение музыки может занять некоторое время,
# поэтому используем задержку
time.sleep(1)

# Воспроизведение файла
play_midi("simple_melody.mid")

Этот код сначала инициализирует pygame mixer, затем загружает и воспроизводит указанный MIDI-файл. После этого код ожидает завершения воспроизведения музыки перед тем, как завершить выполнение. Убедитесь, что файл simple_melody.mid находится в той же директории, что и ваш скрипт Python.

Подпишись 👉🏻 @KodduuPython 🤖
Создание роевого искусственного интеллекта (AI) требует сложных алгоритмов и обширных знаний в области компьютерных наук, но я могу предоставить вам простой пример кода, который демонстрирует основную концепцию роевого интеллекта. В этом примере мы будем использовать алгоритм оптимизации роем частиц (Particle Swarm Optimization, PSO), который является одним из наиболее популярных методов роевого интеллекта.

Алгоритм PSO используется для оптимизации функции, где "частицы" (агенты) перемещаются по пространству решений, следуя за лучшими решениями, найденными ими и их соседями.

Вот базовый пример на Python:

import random
import numpy as np

# Функция для оптимизации
def objective_function(x):
return x[0]**2 + x[1]**2

# Класс, представляющий одну частицу
class Particle:
def __init__(self, bounds):
self.position = np.array([random.uniform(bound[0], bound[1]) for bound in bounds])
self.velocity = np.array([0.0, 0.0])
self.best_position = np.copy(self.position)
self.best_value = float('inf')

def update(self, global_best):
w = 0.5 # инерция
c1, c2 = 1.0, 1.0 # коэффициенты социального и когнитивного влияния

for i in range(len(self.position)):
r1, r2 = random.random(), random.random()
social = c1 * r1 * (global_best.position[i] - self.position[i])
cognitive = c2 * r2 * (self.best_position[i] - self.position[i])
self.velocity[i] = w * self.velocity[i] + social + cognitive

self.position += self.velocity
value = objective_function(self.position)

if value < self.best_value:
self.best_position = np.copy(self.position)
self.best_value = value

# PSO алгоритм
def particle_swarm_optimization(bounds, num_particles, num_iterations):
global_best = Particle(bounds)
global_best.best_value = float('inf')
particles = [Particle(bounds) for _ in range(num_particles)]

for _ in range(num_iterations):
for particle in particles:
particle.update(global_best)

if particle.best_value < global_best.best_value:
global_best.position = np.copy(particle.best_position)
global_best.best_value = particle.best_value

return global_best.position, global_best.best_value

# Параметры
bounds = [(-10, 10), (-10, 10)] # Границы поиска
num_particles = 30
num_iterations = 100

# Запуск PSO
best_position, best_value = particle_swarm_optimization(bounds, num_particles, num_iterations)
print("Лучшее положение:", best_position)
print("Лучшее значение:", best_value)


Этот код представляет собой базовую реализацию PSO. Он оптимизирует простую функцию (сумму квадратов двух переменных) и выводит лучшее найденное решение. Обратите внимание, что для сложных задач и более продвинутых приложений роевого AI необходимо углубиться в детали алгоритма и адаптировать его под конкретные потребности.

Подпишись 👉🏻 @KodduuPython 🤖
Давайте создадим улучшенный пример роевого интеллекта с визуализацией процесса оптимизации. Мы будем использовать тот же алгоритм оптимизации роем частиц (PSO), но добавим визуализацию движения частиц во время поиска оптимального решения.

В этом примере я добавлю код для визуализации с помощью библиотеки Matplotlib. Частицы будут перемещаться по двумерному пространству, и мы сможем наблюдать, как они стремятся к оптимальному решению.

import random
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# Функция для оптимизации
def objective_function(x):
return x[0]**2 + x[1]**2

# Класс Particle остается тем же

# Функция для визуализации
def visualize(particles, global_best, bounds, num_iterations):
fig, ax = plt.subplots()
ax.set_xlim(bounds[0])
ax.set_ylim(bounds[1])
points = [ax.plot(particle.position[0], particle.position[1], 'ro')[0] for particle in particles]

def animate(i):
for j, particle in enumerate(particles):
particle.update(global_best)
points[j].set_data(particle.position[0], particle.position[1])
if particle.best_value < global_best.best_value:
global_best.position = np.copy(particle.best_position)
global_best.best_value = particle.best_value
return points

anim = FuncAnimation(fig, animate, frames=num_iterations, interval=200, blit=True)
plt.show()

# Остальная часть кода остается неизменной

# Параметры
bounds = [(-10, 10), (-10, 10)]
num_particles = 30
num_iterations = 50

# Создание частиц и глобального лучшего решения
global_best = Particle(bounds)
global_best.best_value = float('inf')
particles = [Particle(bounds) for _ in range(num_particles)]

# Запуск визуализации
visualize(particles, global_best, bounds, num_iterations)


Этот код создает анимацию, показывающую, как частицы перемещаются в пространстве решений. Каждая частица обновляется в соответствии с её лучшими локальными и глобальными значениями, и мы видим, как они сходятся к оптимальному решению задачи. Обратите внимание, что для запуска этого кода вам потребуется установить библиотеку Matplotlib.

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

В нашем примере мы будем оптимизировать функцию, которая принимает двоичную строку и возвращает количество единиц в этой строке. Целью будет максимизация числа единиц.

import random

# Функция для оценки приспособленности
def fitness(individual):
return sum(individual)

# Функция для создания начальной популяции
def create_population(pop_size, gene_length):
return [[random.randint(0, 1) for _ in range(gene_length)] for _ in range(pop_size)]

# Функция для кроссовера (скрещивания)
def crossover(parent1, parent2):
index = random.randint(1, len(parent1) - 2)
return parent1[:index] + parent2[index:], parent2[:index] + parent1[index:]

# Функция для мутации
def mutate(individual, mutation_rate):
for i in range(len(individual)):
if random.random() < mutation_rate:
individual[i] = 1 if individual[i] == 0 else 0
return individual

# Функция для проведения одного поколения генетического алгоритма
def run_generation(population, mutation_rate):
new_population = []
while len(new_population) < len(population):
parent1, parent2 = random.sample(population, 2)
offspring1, offspring2 = crossover(parent1, parent2)
offspring1 = mutate(offspring1, mutation_rate)
offspring2 = mutate(offspring2, mutation_rate)
new_population.extend([offspring1, offspring2])
return sorted(new_population, key=fitness, reverse=True)[:len(population)]

# Основная функция
def genetic_algorithm(pop_size, gene_length, num_generations, mutation_rate):
population = create_population(pop_size, gene_length)
for _ in range(num_generations):
population = run_generation(population, mutation_rate)
return population[0]

# Параметры
pop_size = 100
gene_length = 20
num_generations = 50
mutation_rate = 0.01

# Запуск алгоритма
best_individual = genetic_algorithm(pop_size, gene_length, num_generations, mutation_rate)
print("Лучший индивид:", best_individual)
print("Приспособленность:", fitness(best_individual))


Этот код создаёт популяцию двоичных строк (индивидов), затем эволюционирует эту популяцию через множество поколений, используя кроссовер и мутацию. Цель - найти индивида с максимальным количеством единиц. Обратите внимание, что этот пример является учебным и демонстрирует базовые принципы генетических алгоритмов. Для более сложных задач потребуются более продвинутые техники и тонкая настройка параметров.

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

import random
import matplotlib.pyplot as plt

# Функция для оценки приспособленности и другие функции остаются без изменений

# Модифицированная функция для проведения одного поколения генетического алгоритма
def run_generation(population, mutation_rate):
new_population = []
population_fitness = []
while len(new_population) < len(population):
parent1, parent2 = random.sample(population, 2)
offspring1, offspring2 = crossover(parent1, parent2)
offspring1 = mutate(offspring1, mutation_rate)
offspring2 = mutate(offspring2, mutation_rate)
new_population.extend([offspring1, offspring2])
sorted_population = sorted(new_population, key=fitness, reverse=True)
best_fitness = fitness(sorted_population[0])
population_fitness.append(best_fitness)
return sorted_population[:len(population)], population_fitness

# Модифицированная основная функция
def genetic_algorithm(pop_size, gene_length, num_generations, mutation_rate):
population = create_population(pop_size, gene_length)
best_fitness_over_time = []
for _ in range(num_generations):
population, population_fitness = run_generation(population, mutation_rate)
best_fitness_over_time.extend(population_fitness)
return population[0], best_fitness_over_time

# Параметры
pop_size = 100
gene_length = 20
num_generations = 50
mutation_rate = 0.01

# Запуск алгоритма и визуализация
best_individual, fitness_over_time = genetic_algorithm(pop_size, gene_length, num_generations, mutation_rate)
plt.plot(fitness_over_time)
plt.xlabel('Поколение')
plt.ylabel('Приспособленность лучшего индивида')
plt.title('Прогресс приспособленности в генетическом алгоритме')
plt.show()

print("Лучший индивид:", best_individual)
print("Приспособленность:", fitness(best_individual))


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

Подпишись 👉🏻 @KodduuPython 🤖
Если хотели начать учится на разработчика, то самое время купить наш курс по Python где 50 тем, 46 интерактивных задач и 11 тестов, а скидка в 2000 руб все еще в силе 👀 только для читателей канала по линку https://stepik.org/a/185238/pay?promo=dcfeb683c217284e до 07.12.2023 включительно!
Для визуализации кода обхода графа в глубину (DFS), мы можем использовать библиотеку networkx для создания графа и matplotlib для его отображения. Кроме того, мы можем изменить вашу функцию DFS, чтобы она возвращала последовательность посещенных узлов, что позволит нам визуализировать путь поиска.

import networkx as nx
import matplotlib.pyplot as plt

def dfs(graph, start, visited=None, path=None):
if visited is None:
visited = set()
if path is None:
path = []

visited.add(start)
path.append(start)

for next_node in graph[start] - visited:
dfs(graph, next_node, visited, path)

return path

def visualize_graph(graph, path):
G = nx.Graph()
G.add_nodes_from(graph.keys())
for key, values in graph.items():
for value in values:
G.add_edge(key, value)

pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_color='lightblue', edge_color='gray')

# Выделяем путь поиска
path_edges = list(zip(path, path[1:]))
nx.draw_networkx_edges(G, pos, edgelist=path_edges, edge_color='red', width=2)
nx.draw_networkx_nodes(G, pos, nodelist=path, node_color='green')

plt.show()

if __name__ == "__main__":
graph = {'A': set(['B', 'C']),
'B': set(['A', 'D', 'E']),
'C': set(['A', 'F']),
'D': set(['B']),
'E': set(['B', 'F']),
'F': set(['C', 'E'])}

path = dfs(graph, 'A')
visualize_graph(graph, path)


Этот код выполнит следующие шаги:
1. Определит функцию dfs, которая возвращает последовательность посещенных узлов.
2. Определит функцию visualize_graph для визуализации графа с помощью networkx и matplotlib.
3. Визуализирует граф и путь, найденный с помощью DFS.

Убедитесь, что у вас установлены библиотеки networkx и matplotlib. Вы можете установить их, используя команду pip install networkx matplotlib.

Подпишись 👉🏻 @KodduuPython 🤖
👍2
Давайте создадим пример кода на Python, который использует несколько интересных библиотек. Я выберу библиотеку matplotlib для визуализации данных, numpy для численных операций и pandas для работы с табличными данными. В этом примере мы сгенерируем случайные данные и создадим график, иллюстрирующий эти данные.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# Генерация случайных данных
np.random.seed(0)
data = np.random.randn(100)

# Создание DataFrame с использованием pandas
df = pd.DataFrame(data, columns=['Random Data'])

# Визуализация данных с использованием matplotlib
plt.figure(figsize=(10, 6))
plt.plot(df.index, df['Random Data'], marker='o', linestyle='-', color='b')
plt.title('Пример случайного графика')
plt.xlabel('Индекс')
plt.ylabel('Значения')
plt.grid(True)
plt.show()


Этот код выполняет следующие действия:
1. Импортирует необходимые библиотеки.
2. Генерирует 100 случайных чисел, следуя нормальному распределению.
3. Создаёт DataFrame из этих данных.
4. Строит график, отображающий эти данные, с использованием matplotlib.

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

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

import numpy as np
import seaborn as sns
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# Генерация случайных данных
np.random.seed(0)
data = np.random.rand(200, 2) # 200 точек в 2D

# Применение K-Means для кластеризации данных (разбиение на 4 кластера)
kmeans = KMeans(n_clusters=4)
kmeans.fit(data)
labels = kmeans.predict(data)

# Визуализация кластеров с использованием seaborn
plt.figure(figsize=(10, 6))
sns.scatterplot(data[:, 0], data[:, 1], hue=labels, palette='viridis')
plt.title('Визуализация Кластеризации K-Means')
plt.xlabel('Ось X')
plt.ylabel('Ось Y')
plt.show()


Этот код выполняет следующие действия:
1. Импортирует необходимые библиотеки.
2. Генерирует 200 случайных точек в двухмерном пространстве.
3. Использует алгоритм K-Means из scikit-learn для разделения этих точек на 4 кластера.
4. Строит график, визуализирующий кластера, с использованием seaborn для красивой цветовой палитры.

Запустив этот код, вы увидите двумерный график, на котором точки разных кластеров окрашены в разные цвета, что позволяет легко различить кластеры.

Подпишись 👉🏻 @KodduuPython 🤖
Давайте создадим пример кода на Python, который будет использовать библиотеки для работы с веб-скрапингом. В этом примере мы будем использовать requests для получения данных с веб-страницы и BeautifulSoup из пакета bs4 для анализа и извлечения информации из HTML. Мы напишем простой скрипт, который извлекает заголовки новостей с веб-страницы.

import requests
from bs4 import BeautifulSoup

# URL веб-страницы, с которой будем извлекать данные
url = 'https://news.ycombinator.com/'

# Получение HTML-кода страницы
response = requests.get(url)

# Парсинг HTML-кода с использованием BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')

# Поиск всех элементов с тегом 'a' и классом 'titlelink' (заголовки новостей на Hacker News)
news_titles = soup.find_all('a', class_='titlelink')

# Вывод заголовков новостей
for title in news_titles:
print(title.text)


Этот код делает следующее:
1. Импортирует библиотеки requests и BeautifulSoup.
2. Отправляет GET-запрос к сайту Hacker News.
3. Анализирует полученный HTML-код.
4. Ищет все ссылки, которые являются заголовками новостей (на Hacker News они имеют класс 'titlelink').
5. Выводит текст каждого заголовка новости.

Заметьте, что структура веб-страницы может измениться, поэтому этот код может потребовать обновления, если вы используете его в будущем. Также, при скрапинге важно соблюдать правила и политику использования веб-сайта, с которого вы извлекаете данные.

Подпишись 👉🏻 @KodduuPython 🤖
Осталось 6 дней до окончания скидки в 2000 руб на курс по Python 👀 Торопитесь https://stepik.org/a/185238/pay?promo=dcfeb683c217284e
Давайте рассмотрим пример кода на Python, использующий одну из новых и популярных библиотек — streamlit. Streamlit — это библиотека для быстрого создания веб-приложений для анализа данных и машинного обучения. В этом примере мы создадим простое веб-приложение для визуализации данных.

Установите Streamlit, если у вас его еще нет, используя pip:
pip install streamlit


А вот пример кода:

import streamlit as st
import pandas as pd
import numpy as np

# Заголовок приложения
st.title('Пример веб-приложения Streamlit')

# Генерация случайных данных
data = pd.DataFrame(
np.random.randn(50, 3),
columns=['a', 'b', 'c']
)

# Добавление графика в приложение
st.line_chart(data)


Для запуска приложения, сохраните этот код в файл, например app.py, и запустите его с помощью Streamlit:
bash
streamlit run app.py


Это приложение:
1. Импортирует необходимые библиотеки (streamlit, pandas и numpy).
2. Создает заголовок для веб-приложения.
3. Генерирует случайный набор данных.
4. Использует st.line_chart для добавления графика на веб-страницу, который визуализирует эти данные.

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

Подпишись 👉🏻 @KodduuPython 🤖
Другим трендовым примером является использование библиотеки fastapi для создания высокопроизводительного веб-API. FastAPI — это современный, быстрый (высокопроизводительный) веб-фреймворк для построения API с Python 3.7+, основанный на стандартных типах Python для декларативной валидации запросов и ответов.

Сначала установите fastapi и uvicorn, асинхронный сервер:
pip install fastapi uvicorn


Вот простой пример кода, создающий базовый API:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# Определение модели данных
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None

# Маршрут для чтения данных
@app.get("/")
def read_root():
return {"Hello": "World"}

# Маршрут для создания данных
@app.post("/items/")
def create_item(item: Item):
item_dict = item.dict()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({"price_with_tax": price_with_tax})
return item_dict


Чтобы запустить сервер, сохраните этот код в файл (например, main.py) и запустите его с помощью Uvicorn:
bash
uvicorn main:app --reload


В этом примере:
1. Создается экземпляр FastAPI.
2. Определяется модель данных Item с помощью Pydantic, которая используется для валидации данных.
3. Создается маршрут GET (read_root), который возвращает простое сообщение.
4. Создается маршрут POST (create_item), который принимает данные, валидирует их и возвращает их с дополнительными вычислениями, если применимо.

FastAPI подходит для создания RESTful API благодаря своей производительности, простоте использования и автоматической генерации документации (с использованием Swagger UI).

Подпишись 👉🏻 @KodduuPython 🤖
👍2
Осталось 3 дня, цена вопроса три чашки кофе ☕️☕️☕️ и вы получаете самый нескучный курс по Python https://stepik.org/a/185238/pay?promo=dcfeb683c217284e