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

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

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

Вот простой пример, как это можно сделать с помощью библиотеки numpy и sounddevice:

1. Установите необходимые модули:
pip install numpy sounddevice

2. Используйте следующий код:

python
import numpy as np
import sounddevice as sd

SAMPLE_RATE = 44100

def generate_tone(freq, duration, sample_rate=SAMPLE_RATE, amplitude=0.5):
t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False)
return amplitude * np.sin(2 * np.pi * freq * t)

def play_tone(freq, duration):
tone = generate_tone(freq, duration)
sd.play(tone, samplerate=SAMPLE_RATE)
sd.wait()

# Определите частоты базовых нот
NOTE_C = 261.63 # Частота ноты До в Герц
NOTE_D = 293.66 # Частота ноты Ре в Герц

play_tone(NOTE_C, 1) # Играть ноту До на 1 секунду
play_tone(NOTE_D, 1) # Играть ноту Ре на 1 секунду

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

Подпишись 👉🏻 @KodduuPython 🤖
Рассмотрим песню "Счастливые дни" (Happy Birthday) в качестве примера.

Для этого нам понадобится больше нот, чем просто До и Ре. Давайте определим их:

python
import numpy as np
import sounddevice as sd

SAMPLE_RATE = 44100

def generate_tone(freq, duration, sample_rate=SAMPLE_RATE, amplitude=0.5):
t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False)
return amplitude * np.sin(2 * np.pi * freq * t)

def play_tone(freq, duration):
tone = generate_tone(freq, duration)
sd.play(tone, samplerate=SAMPLE_RATE)
sd.wait()

# Определите частоты базовых нот
NOTE_C = 261.63
NOTE_D = 293.66
NOTE_E = 329.63
NOTE_F = 349.23
NOTE_G = 392.00
NOTE_A = 440.00
NOTE_B = 493.88
NOTE_C_HIGH = 523.25

# Мелодия "Счастливые дни"
melody_sequence = [NOTE_C, NOTE_C, NOTE_D, NOTE_C, NOTE_F, NOTE_E,
NOTE_C, NOTE_C, NOTE_D, NOTE_C, NOTE_G, NOTE_F,
NOTE_C, NOTE_C, NOTE_C_HIGH, NOTE_A, NOTE_F, NOTE_E, NOTE_D,
NOTE_B, NOTE_B, NOTE_A, NOTE_F, NOTE_G, NOTE_F]

durations_sequence = [0.5, 0.5, 1, 1, 1, 2,
0.5, 0.5, 1, 1, 1, 2,
0.5, 0.5, 1, 1, 1, 1, 2,
0.5, 0.5, 1, 1, 1, 2]

for freq, duration in zip(melody_sequence, durations_sequence):
play_tone(freq, duration)

Этот код будет играть упрощенную версию песни "Счастливые дни". Вы можете адаптировать этот код, чтобы воспроизвести другие мелодии, добавив соответствующие частоты и продолжительность нот.

Подпишись 👉🏻 @KodduuPython 🤖
3
Если у вас есть MIDI-версия песни, вы можете использовать библиотеку mido для чтения и воспроизведения MIDI-файла в Python.

Для воспроизведения мелодий из MIDI-файла в реальное время на вашем компьютере, вам также потребуется библиотека pygame.

Давайте пройдемся по шагам:

1. Установите необходимые библиотеки:

pip install mido pygame

2. Воспользуйтесь следующим кодом:

python
import mido
from mido import MidiFile
import pygame.midi
import time

# Инициализация pygame.midi
pygame.midi.init()
player = pygame.midi.Output(0) # Номер может отличаться в зависимости от вашего MIDI устройства
player.set_instrument(0) # Выберите инструмент (0 - это стандартный акустический гранд-пианино)

# Загрузка MIDI-файла
midi = MidiFile('path_to_your_midi_file.mid')

# Воспроизведение MIDI-файла
for msg in midi.play():
if msg.type == 'note_on':
player.note_on(msg.note, msg.velocity)
elif msg.type == 'note_off':
player.note_off(msg.note, msg.velocity)
time.sleep(msg.time)

# Закрытие pygame.midi
player.close()
pygame.midi.quit()

Замените 'path_to_your_midi_file.mid' на путь к вашему MIDI-файлу.

Примечание: Этот код воспроизводит только ноты из MIDI-файла и не учитывает контрольные сообщения или другие атрибуты, которые могут быть в вашем файле. Вы можете дополнительно модифицировать код, чтобы учитывать другие аспекты MIDI-файла.

Подпишись 👉🏻 @KodduuPython 🤖
1
Вот простой пример кода на Python, который реализует алгоритм поиска пути в лабиринте с использованием алгоритма обхода в глубину (Depth First Search).

python
# Простой пример решения лабиринта с использованием DFS (Depth-First Search)

# Простой лабиринт, где 0 — это стена, 1 — проходимая ячейка, 2 — начальная точка, 3 — финиш
maze = [
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 2, 1, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 0, 0, 0, 0],
[0, 1, 0, 1, 1, 1, 1, 0],
[0, 1, 0, 0, 0, 0, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 3, 0],
[0, 0, 0, 0, 0, 0, 0, 0]
]

def dfs(maze, x, y):
# Если выход за границы лабиринта, вернуть False
if x < 0 or x >= len(maze) or y < 0 or y >= len(maze[0]):
return False

# Если финиш найден, вернуть True
if maze[x][y] == 3:
return True

# Если ячейка стена или уже посещена, вернуть False
if maze[x][y] == 0 or maze[x][y] == 4:
return False

# Пометить ячейку как посещенную
maze[x][y] = 4

# Применить DFS к соседним ячейкам
if dfs(maze, x+1, y) or dfs(maze, x-1, y) or dfs(maze, x, y+1) or dfs(maze, x, y-1):
return True

return False

# Начальная точка
start_x, start_y = 1, 1
# Поиск пути в лабиринте
found = dfs(maze, start_x, start_y)

# Вывод результата
if found:
print("Путь найден!")
else:
print("Путь не найден.")

# Вывод лабиринта с посещенными ячейками
for row in maze:
print(" ".join(str(cell) for cell in row))


Этот код решает простой лабиринт, исходя из заданных условий. После выполнения кода лабиринт будет также выведен на экран с пометками посещенных ячеек (обозначенных как "4").

Подпишись 👉🏻 @KodduuPython 🤖
Вот интересный пример кода на Python, который позволяет генерировать фракталы, такие как "Множество Мандельброта":

python
import matplotlib.pyplot as plt
import numpy as np

def mandelbrot(c,max_iter):
z = c
for n in range(max_iter):
if abs(z) > 2:
return n
z = z*z + c
return max_iter

def display_mandelbrot(xmin,xmax,ymin,ymax,width,height,max_iter):
r1 = np.linspace(xmin, xmax, width)
r2 = np.linspace(ymin, ymax, height)
return (r1, r2, np.array([[mandelbrot(complex(r, i),max_iter) for r in r1] for i in r2]))

def main():
xmin, xmax, ymin, ymax = -2.0, 0.7, -1.35, 1.35
width, height = 1000, 1000

d = display_mandelbrot(xmin,xmax,ymin,ymax,width,height,256)

plt.imshow(d[2], extent=(xmin, xmax, ymin, ymax))
plt.show()

if __name__ == "__main__":
main()


Этот код использует библиотеку matplotlib для отображения фрактала. Если у вас еще не установлена эта библиотека, вы можете установить ее с помощью pip:

pip install matplotlib


Запустите код и вы увидите прекрасное изображение Множества Мандельброта!

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

python
def simple_chat_bot(input_text):
input_text = input_text.lower()

if 'привет' in input_text:
return "Привет! Как я могу помочь?"
elif 'как дела' in input_text:
return "Я же просто программа, у меня нет чувств. А у тебя?"
elif 'пока' in input_text:
return "До свидания!"
else:
return "Извините, я не понял вашу команду."

# Тестирование нашего чат-бота
while True:
user_input = input("Вы: ")
if 'выход' in user_input.lower():
print("Чат-бот: До свидания!")
break
response = simple_chat_bot(user_input)
print(f"Чат-бот: {response}")


Чтобы запустить этот код, скопируйте его и вставьте в вашу IDE или текстовый редактор, а затем выполните. Далее вы сможете взаимодействовать с этим простым чат-ботом. Закончить сессию можно, введя 'выход'.

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

1. Сначала установите colorama:

pip install colorama


2. Используйте следующий код:

python
from colorama import init, Fore, Back, Style
import random

# Инициализация colorama
init(autoreset=True)

def colored_output():
colors = [Fore.RED, Fore.GREEN, Fore.YELLOW, Fore.BLUE, Fore.MAGENTA, Fore.CYAN, Fore.WHITE]

print("Случайный цвет для каждой буквы в слове 'PYTHON':")

for letter in 'PYTHON':
print(random.choice(colors) + letter, end=' ')

print("\n")

print(Back.GREEN + "Текст на зеленом фоне")
print(Back.CYAN + Style.BRIGHT + "Яркий текст на голубом фоне")

colored_output()


Этот код будет выводить слово "PYTHON" так, что у каждой буквы будет свой случайный цвет. Также вы увидите примеры различного фона и стилей текста.

Подпишись 👉🏻 @KodduuPython 🤖
Давайте попробуем что-то интересное с библиотекой pyfiglet. Она позволяет выводить текст в интересных "артистических" шрифтах в консоли.

1. Сначала установите pyfiglet:

bash
pip install pyfiglet


2. Используйте следующий код:

python
import pyfiglet

def fancy_text_output():
# Выбор шрифта
font = pyfiglet.Figlet(font='slant')

# Трансформация текста
transformed_text = font.renderText('Hello, World!')

print(transformed_text)

fancy_text_output()


Запустите этот код, и вы увидите текст "Hello, World!" в интересном шрифте. Вы можете изменять название шрифта (например, 'slant'), чтобы получить разные стили вывода. Посмотрите другие доступные шрифты в документации pyfiglet или просто попробуйте разные названия наугад.

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

Предположим, что у вас есть время t (в минутах) на дистанции d (в километрах). Тогда предсказанное время T на другой дистанции D можно рассчитать по следующей формуле:

T = t x (D/d)^1.06

Вот пример Python кода, который применяет эту формулу:

python
def predict_time(current_time, current_distance, target_distance):
"""
Предсказание времени на целевой дистанции исходя из текущего результата на другой дистанции.

:param current_time: Текущее время (в минутах) на дистанции current_distance.
:param current_distance: Текущая дистанция (в километрах).
:param target_distance: Целевая дистанция (в километрах).
:return: Предсказанное время на целевой дистанции.
"""
return current_time * (target_distance / current_distance) ** 1.06

if __name__ == "__main__":
distances = {
"5K": 5,
"10K": 10,
"Half Marathon": 21.0975,
"Marathon": 42.195
}

current_distance = float(input("Введите текущую дистанцию (например, 5, 10, 21.0975, 42.195): "))
current_time = float(input("Введите ваше время (в минутах) на этой дистанции: "))

for name, dist in distances.items():
predicted_time = predict_time(current_time, current_distance, dist)
hours = int(predicted_time // 60)
minutes = predicted_time % 60
print(f"Предполагаемое время для {name}: {hours} часов {minutes:.2f} минут")

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

Подпишись 👉🏻 @KodduuPython 🤖
Если учесть вес бегуна в прогнозировании, дело становится сложнее. Однако общий принцип заключается в том, что снижение веса, как правило, ведет к улучшению времени на дистанции (хотя это зависит от индивидуальных особенностей и пределов). Один из способов оценить, как изменение веса повлияет на время, — это использовать эмпирическое правило, например, что каждое снижение веса на 1 кг приведет к улучшению времени на 1-2% (это приближенная оценка).

Давайте создадим простой скрипт, который использует этот подход:

python
def predict_time(current_time, current_distance, target_distance, current_weight, target_weight):
base_time = current_time * (target_distance / current_distance) ** 1.06

# Эмпирический коэффициент улучшения времени на 1-2% за каждый кг уменьшения веса
improvement_factor = 1 - 0.01 * (current_weight - target_weight)

return base_time * improvement_factor

if __name__ == "__main__":
distances = {
"5K": 5,
"10K": 10,
"Half Marathon": 21.0975,
"Marathon": 42.195
}

current_distance = float(input("Введите текущую дистанцию (например, 5, 10, 21.0975, 42.195): "))
current_time = float(input("Введите ваше время (в минутах) на этой дистанции: "))
current_weight = float(input("Введите ваш текущий вес (в кг): "))
target_weight = float(input("Введите ваш целевой вес (в кг): "))

for name, dist in distances.items():
predicted_time = predict_time(current_time, current_distance, dist, current_weight, target_weight)
hours = int(predicted_time // 60)
minutes = predicted_time % 60
print(f"Предполагаемое время для {name} при весе {target_weight} кг: {hours} часов {minutes:.2f} минут")


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

Подпишись 👉🏻 @KodduuPython 🤖
BMI (индекс массы тела) рассчитывается по следующей формуле:

BMI = вес (кг) / рост (метр)^2

Вот простой скрипт на Python для расчета BMI:

python
def calculate_bmi(weight, height):
"""
Рассчитать индекс массы тела (BMI).

:param weight: Вес в кг.
:param height: Рост в метрах.
:return: BMI.
"""
return weight / (height ** 2)

if __name__ == "__main__":
weight = float(input("Введите ваш вес (в кг): "))
height = float(input("Введите ваш рост (в метрах, например, 1.75): "))

bmi = calculate_bmi(weight, height)

print(f"Ваш индекс массы тела (BMI): {bmi:.2f}")

# Дополнительно можно добавить интерпретацию результата
if bmi < 18.5:
print("Недостаточная масса тела")
elif 18.5 <= bmi < 24.9:
print("Нормальная масса тела")
elif 24.9 <= bmi < 29.9:
print("Избыточная масса тела (предожирение)")
else:
print("Ожирение")

Запустите скрипт, введите свой вес и рост, и он покажет вам ваш индекс массы тела и соответствующую интерпретацию.

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

python
import random

# Пример блюд с калорийностью
dishes = {
"Омлет": 200,
"Мюсли": 150,
"Бутерброд с авокадо": 250,
"Салат Цезарь": 350,
"Борщ": 220,
"Спагетти Карбонара": 500,
"Рис с овощами": 280,
"Стейк из лосося": 370,
"Фруктовый салат": 120,
"Гречка с курой": 320
}

def get_meal(calories, ratio):
"""
Возвращает блюдо исходя из заданной калорийности и соотношения.

:param calories: Общая калорийность.
:param ratio: Соотношение калорийности.
:return: Случайное блюдо исходя из заданной калорийности.
"""
meal_calories = calories * ratio
suitable_dishes = [dish for dish, cal in dishes.items() if 0.9 * meal_calories < cal < 1.1 * meal_calories]
return random.choice(suitable_dishes) if suitable_dishes else "Блюдо не найдено"

if __name__ == "__main__":
total_calories = float(input("Введите желаемую калорийность на день: "))

breakfast = get_meal(total_calories, 0.3)
lunch = get_meal(total_calories, 0.4)
dinner = get_meal(total_calories, 0.3)

print(f"Завтрак: {breakfast}")
print(f"Обед: {lunch}")
print(f"Ужин: {dinner}")


Вы можете запустить этот код и ввести желаемую калорийность. Программа предложит вам блюда на завтрак, обед и ужин.

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

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

python
def fibonacci_stream():
a, b = 0, 1
while True:
yield a
a, b = b, a + b

def find_fib_greater_than(n):
for fib in fibonacci_stream():
if fib > n:
return fib

if __name__ == "__main__":
print("Бесконечный поток чисел Фибоначчи:")

fib_stream = fibonacci_stream()
for _ in range(10):
print(next(fib_stream), end=", ")
print("...")

print("\nПервое число Фибоначчи, большее 1000:")
print(find_fib_greater_than(1000))

Когда этот код запускается, он сначала выводит первые 10 чисел Фибоначчи, а затем первое число Фибоначчи, превышающее 1000. Код использует генератор для эффективного создания потока чисел Фибоначчи без необходимости хранения всех предыдущих чисел в памяти.

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

python
import math
import time

class Planet:
def __init__(self, name, radius, distance, orbital_period):
self.name = name
self.radius = radius # радиус планеты
self.distance = distance # среднее расстояние до солнца
self.orbital_period = orbital_period # период обращения вокруг солнца (в днях)
self.angle = 0 # текущий угол в радианах

def move(self, days):
"""Переместить планету на определенное количество дней"""
self.angle += (2 * math.pi * days) / self.orbital_period
self.angle %= (2 * math.pi)

def position(self):
"""Получить текущие координаты планеты"""
x = self.distance * math.cos(self.angle)
y = self.distance * math.sin(self.angle)
return x, y

class SolarSystem:
def __init__(self):
self.planets = []

def add_planet(self, planet):
self.planets.append(planet)

def move_all(self, days):
for planet in self.planets:
planet.move(days)

def display(self):
for planet in self.planets:
x, y = planet.position()
print(f"{planet.name}: x = {x:.2f}, y = {y:.2f}")

if __name__ == "__main__":
earth = Planet("Земля", 6371, 149.6e6, 365.25)
mars = Planet("Марс", 3389, 227.9e6, 687)
venus = Planet("Венера", 6051, 108.2e6, 224.7)

solar_system = SolarSystem()
solar_system.add_planet(earth)
solar_system.add_planet(mars)
solar_system.add_planet(venus)

for day in range(0, 366, 10): # двигаемся на 10 дней за шаг
print(f"День: {day}")
solar_system.move_all(10)
solar_system.display()
time.sleep(1)

Этот код симулирует движение Земли, Марса и Венеры вокруг Солнца. Планеты перемещаются по своим орбитам с определенным шагом в днях. Текущие координаты каждой планеты выводятся на экране.

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

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

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

python
class Rocket:
def __init__(self, fuel, power):
self.fuel = fuel # оставшийся топливо
self.power = power # максимальная мощность двигателя
self.height = 0 # текущая высота
self.velocity = 0 # текущая скорость
self.gravity = -9.8 # гравитация планеты

def thrust(self, percentage):
"""Тяга двигателя. Параметр - процент максимальной мощности."""
if self.fuel <= 0:
print("Нет топлива!")
return
force = (self.power * percentage) / 100
self.fuel -= percentage
self.velocity += force
if self.fuel < 0:
self.fuel = 0

def update(self):
"""Обновляем состояние ракеты каждую секунду."""
self.velocity += self.gravity
self.height += self.velocity
if self.height < 0:
self.height = 0

if __name__ == "__main__":
rocket = Rocket(100, 10)

while rocket.height < 1000 and rocket.fuel > 0:
print(f"Высота: {rocket.height:.2f} м. Оставшееся топливо: {rocket.fuel:.2f}%")
percentage = float(input("Введите процент мощности (0-100): "))
rocket.thrust(percentage)
rocket.update()

if rocket.height >= 1000:
print("Успех! Вы достигли орбиты!")
else:
print("Топливо закончилось. Вы не смогли достичь орбиты.")

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

Подпишись 👉🏻 @KodduuPython 🤖
Как насчет мини-игры "Поймай комету"? В этой игре игроку нужно угадывать позицию кометы на основе ее предыдущих местоположений.

Пример на Python:

python
import random

class Comet:
def __init__(self, size):
self.size = size # размер игрового поля
self.position = self.random_position() # начальное положение кометы

def random_position(self):
return random.randint(0, self.size - 1)

def move(self):
# двигаем комету в случайном направлении
direction = random.choice([-1, 1])
new_position = self.position + direction
# если комета выходит за пределы поля, двигаем ее в обратном направлении
if new_position < 0 or new_position >= self.size:
direction = -direction
self.position += direction

if __name__ == "__main__":
comet = Comet(10)
guesses = 3

print(f"Комета находится где-то на поле размером {comet.size}.")

while guesses > 0:
print(f"У вас осталось попыток: {guesses}")
guess = int(input("Угадайте позицию кометы (0-9): "))

comet.move()

if guess == comet.position:
print("Вы угадали! Вы поймали комету!")
break
else:
print("Вы промахнулись!")
guesses -= 1

if guesses == 0:
print(f"Вы проиграли! Комета была на позиции {comet.position}.")

В этой игре комета случайным образом движется по игровому полю размером 10. Игрок пытается угадать позицию кометы, имея только 3 попытки. Каждый раз, когда игрок делает попытку, комета двигается на одну позицию влево или вправо.

Цель игры - угадать текущее местоположение кометы с ограниченным числом попыток.

Подпишись 👉🏻 @KodduuPython 🤖
Давайте создадим простой космический калькулятор, который может вычислять расстояние между двумя планетами на основе их средних расстояний от Солнца.

python
class Planet:
def __init__(self, name, distance_from_sun):
self.name = name
self.distance_from_sun = distance_from_sun # среднее расстояние от Солнца в миллионах километров

class SpaceCalculator:
def __init__(self):
self.planets = {
"Меркурий": Planet("Меркурий", 57.9),
"Венера": Planet("Венера", 108.2),
"Земля": Planet("Земля", 149.6),
"Марс": Planet("Марс", 227.9),
"Юпитер": Planet("Юпитер", 778.5),
"Сатурн": Planet("Сатурн", 1427),
"Уран": Planet("Уран", 2871),
"Нептун": Planet("Нептун", 4498)
}

def calculate_distance(self, planet1_name, planet2_name):
planet1 = self.planets.get(planet1_name)
planet2 = self.planets.get(planet2_name)

if not planet1 or not planet2:
return "Одна из планет не найдена."

distance = abs(planet1.distance_from_sun - planet2.distance_from_sun)
return f"Расстояние между {planet1_name} и {planet2_name} составляет {distance} млн км."

if __name__ == "__main__":
calculator = SpaceCalculator()

planet1 = input("Введите имя первой планеты: ")
planet2 = input("Введите имя второй планеты: ")

print(calculator.calculate_distance(planet1, planet2))


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

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

Прежде всего, вам потребуется установить matplotlib, если у вас его еще нет:

bash
pip install matplotlib


Теперь давайте создадим симулятор:

python
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import math

class Planet:
def __init__(self, name, distance_from_sun, orbital_period):
self.name = name
self.distance_from_sun = distance_from_sun
self.orbital_period = orbital_period

def position(self, day):
"""Вычисление положения планеты по заданному дню."""
angle = (day % self.orbital_period) * (2 * math.pi) / self.orbital_period
x = self.distance_from_sun * math.cos(angle)
y = self.distance_from_sun * math.sin(angle)
return x, y

class SolarSystem:
def __init__(self):
self.planets = [
Planet("Меркурий", 57.9, 88),
Planet("Венера", 108.2, 225),
Planet("Земля", 149.6, 365),
Planet("Марс", 227.9, 687),
Planet("Юпитер", 778.5, 4332),
Planet("Сатурн", 1427, 10759),
Planet("Уран", 2871, 30687),
Planet("Нептун", 4498, 60190)
]

def plot(self, day):
fig, ax = plt.subplots(figsize=(10, 10))
ax.set_xlim(-5000, 5000)
ax.set_ylim(-5000, 5000)

# Рисуем Солнце в центре
ax.scatter(0, 0, s=200, c='yellow', label="Солнце")

for planet in self.planets:
x, y = planet.position(day)
ax.scatter(x, y, label=planet.name)

ax.legend()
plt.show()

if __name__ == "__main__":
solar_system = SolarSystem()
day = int(input("Введите день (0 - бесконечность): "))
solar_system.plot(day)


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

Учтите, что это упрощенная модель и для более точной симуляции потребуются более сложные расчеты и другие параметры.

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

python
class Particle:
def __init__(self, name, mass, charge, description):
self.name = name
self.mass = mass # в гигаэлектронвольтах/c^2
self.charge = charge # в единицах элементарного заряда
self.description = description

class ParticleCatalog:
def __init__(self):
self.particles = {
"фотон": Particle("фотон", 0, 0, "Фотон — бесмассовая частица, квант электромагнитного поля."),
"бозон Хиггса": Particle("бозон Хиггса", 125.1, 0, "Бозон Хиггса — элементарная частица, предсказанная теорией для объяснения механизма приобретения массы другими элементарными частицами."),
"электрон": Particle("электрон", 0.511, -1, "Электрон — элементарная частица, имеющая отрицательный заряд и участвующая во многих электромагнитных взаимодействиях.")
}

def display_particle_info(self, name):
particle = self.particles.get(name.lower())
if not particle:
return "Частица не найдена."
return f"Имя: {particle.name}\nМасса: {particle.mass} ГэВ/c^2\nЗаряд: {particle.charge}е\nОписание: {particle.description}"

if __name__ == "__main__":
catalog = ParticleCatalog()

while True:
particle_name = input("\nВведите название частицы (или 'выход' для завершения): ")

if particle_name.lower() == "выход":
break

print(catalog.display_particle_info(particle_name))


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

Заметьте, что это лишь базовая модель, и настоящий каталог частиц, такой как Стандартная модель, содержит гораздо больше деталей и частиц.

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

python
import random
import matplotlib.pyplot as plt

class Photon:
def __init__(self, angle=0):
self.angle = angle # угол движения фотона относительно оси X

def scatter(self):
"""Моделирует рассеяние фотона на электроне."""
delta_angle = random.uniform(-90, 90) # изменение угла после столкновения, в градусах
self.angle += delta_angle
if self.angle > 360:
self.angle -= 360
elif self.angle < 0:
self.angle += 360

def simulate_photon_path(steps):
photon = Photon()
x, y = [0], [0] # начальное положение фотона

for step in range(steps):
photon.scatter()
dx = 1 * (random.uniform(0.9, 1.1)) * (random.choice([1, -1])) # небольшое случайное изменение для моделирования реалистичного движения
dy = dx * (random.uniform(0.9, 1.1)) * (random.choice([1, -1]))

# обновляем координаты фотона на основе его угла
x.append(x[-1] + dx)
y.append(y[-1] + dy)

return x, y

if __name__ == "__main__":
steps = 100
x, y = simulate_photon_path(steps)

plt.figure(figsize=(10, 10))
plt.plot(x, y, '-o', label="Траектория фотона")
plt.legend()
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Моделирование пути фотона через материал")
plt.grid(True)
plt.show()


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

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

Подпишись 👉🏻 @KodduuPython 🤖
Давайте создадим мини-приложение с использованием библиотеки pygame. Это будет простой пример, в котором пользователь может двигать квадрат на экране с помощью клавиш.

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

bash
pip install pygame


2. Затем используйте следующий код:

python
import pygame
from pygame.locals import *

# Инициализация pygame
pygame.init()

# Установка параметров дисплея
WIDTH, HEIGHT = 640, 480
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Двигайте квадрат!")

# Установка параметров квадрата
square_size = 50
x, y = (WIDTH - square_size) // 2, (HEIGHT - square_size) // 2
color = (0, 128, 255)
speed = 5

# Основной цикл игры
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False

keys = pygame.key.get_pressed()
if keys[K_UP]:
y -= speed
if keys[K_DOWN]:
y += speed
if keys[K_LEFT]:
x -= speed
if keys[K_RIGHT]:
x += speed

# Ограничение перемещения квадрата внутри окна
x = max(0, min(WIDTH - square_size, x))
y = max(0, min(HEIGHT - square_size, y))

screen.fill((255, 255, 255)) # очистка экрана
pygame.draw.rect(screen, color, (x, y, square_size, square_size))

pygame.display.flip()

pygame.quit()


Этот код создает простое окно с квадратом, который вы можете двигать с помощью клавиш-стрелок на вашей клавиатуре. Наслаждайтесь и экспериментируйте с разными параметрами!

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