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
Движение небесных тел, таких как Луна и Земля, определяется законами классической механики. Для расчета движения мы можем использовать уравнения Ньютона. Вот простой пример кода на Python, который использует библиотеку scipy для решения дифференциальных уравнений движения:

python
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# Константы
G = 6.67430e-11 # Гравитационная постоянная Нм^2/кг^2
M = 5.972e24 # Масса Земли, кг
m = 7.348e22 # Масса Луны, кг
R = 384400000 # Среднее расстояние от Земли до Луны, м

# Система дифференциальных уравнений
def equations(y, t, G, M, m):
x, v_x, y, v_y = y
d = np.sqrt(x**2 + y**2)
dvxdt = -G * M * x / d**3
dvydt = -G * M * y / d**3
return v_x, dvxdt, v_y, dvydt

# Начальные условия
x0 = R
v_x0 = 0
y0 = 0
v_y0 = np.sqrt(G * M / R) # Центробежная скорость для установления Луны на орбите
y0 = [x0, v_x0, y0, v_y0]

# Время
t = np.linspace(0, 2.362e6, 1000) # Продолжительность одного оборота Луны вокруг Земли (27.3 дня)

# Решаем систему уравнений
sol = odeint(equations, y0, t, args=(G, M, m))

# Рисуем график орбиты Луны вокруг Земли
plt.figure(figsize=(5, 5))
plt.plot(sol[:, 0], sol[:, 2])
plt.xlabel('x (m)')
plt.ylabel('y (m)')
plt.title('Орбита Луны вокруг Земли')
plt.show()


В этом примере мы моделируем орбиту Луны вокруг Земли, предполагая, что Земля находится в точке (0, 0), и что только Земля оказывает гравитационное воздействие на Луну. Это простое представление, и в реальности движение Луны будет влиять на другие планеты и Солнце.

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

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

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

Вот пример простого расчета орбиты 'Oumuamua с использованием библиотеки poliastro:

python
from astropy import units as u
from poliastro.bodies import Sun
from poliastro.twobody import Orbit
from poliastro.plotting import StaticOrbitPlotter
import matplotlib.pyplot as plt

# Задаем начальные данные 'Oumuamua, полученные из наблюдений
a = -1.27263626 * u.AU
ecc = 1.2008975 * u.one
inc = 122.743 * u.deg
raan = 24.5995 * u.deg
argp = 241.7275 * u.deg
nu = 25.3842 * u.deg

# Создаем орбиту 'Oumuamua
oumuamua = Orbit.from_classical(Sun, a, ecc, inc, raan, argp, nu)

# Рисуем орбиту
frame = StaticOrbitPlotter()
frame.plot(oumuamua)

# Отображаем график
plt.show()


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

Подпишись 👉🏻 @KodduuPython 🤖
Анализ сигналов SETI (Search for Extraterrestrial Intelligence) – это очень сложная и многогранная задача. Предоставить полноценное решение для такой задачи в рамках этого ответа невозможно. Ниже пример кода, который демонстрирует анализ гипотетического сигнала, чтобы определить, имеет ли он какие-либо аномалии, которые могут указывать на внеземное происхождение.

Предположим, у нас есть одномерный массив данных (например, временной ряд) с амплитудами сигнала. Мы можем анализировать его на предмет аномальных пиков:

python
import numpy as np
import matplotlib.pyplot as plt

# Симуляция данных
np.random.seed(0)
data_length = 1000
signal = np.random.normal(0, 1, data_length)
signal[500:510] = signal[500:510] + 7 # Добавляем аномальный пик для демонстрации

# Определение порога для обнаружения аномалий
threshold = np.mean(signal) + 3*np.std(signal)

# Поиск аномалий
anomalies = np.where(signal > threshold)

# Визуализация
plt.figure(figsize=(10, 6))
plt.plot(signal)
plt.axhline(threshold, color='r', linestyle='--', label='Threshold')
plt.scatter(anomalies, signal[anomalies], color='r', label='Anomaly')
plt.legend()
plt.title("Signal Analysis for SETI")
plt.xlabel("Time")
plt.ylabel("Amplitude")
plt.show()

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

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

Подпишись 👉🏻 @KodduuPython 🤖
Давайте рассмотрим ещё один метод поиска аномалий в сигналах – метод скользящего окна. Этот метод использует локальные статистики (например, среднее и стандартное отклонение) внутри окна определенного размера для определения аномалий.

python
import numpy as np
import matplotlib.pyplot as plt

# Симуляция данных
np.random.seed(42)
data_length = 1000
signal = np.random.normal(0, 1, data_length)
signal[750:755] = signal[750:755] + 6 # Добавляем аномальный пик для демонстрации

def find_anomalies(signal, window_size, sigma=3.0):
"""
Функция для обнаружения аномалий с использованием метода скользящего окна.
"""
anomalies = []
for i in range(len(signal) - window_size + 1):
local_region = signal[i:i+window_size]
mean = np.mean(local_region)
std = np.std(local_region)

for j in range(window_size):
if abs(local_region[j] - mean) > sigma*std:
anomalies.append(i + j)

return np.unique(anomalies) # Удаляем дубликаты

window_size = 50
anomalies = find_anomalies(signal, window_size)

# Визуализация
plt.figure(figsize=(10, 6))
plt.plot(signal)
plt.scatter(anomalies, signal[anomalies], color='r', label='Anomaly')
plt.legend()
plt.title("Signal Analysis using Moving Window Method")
plt.xlabel("Time")
plt.ylabel("Amplitude")
plt.show()

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

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

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

python
import cv2
import numpy as np

def detect_road_line(frame):
# Преобразуем изображение в оттенки серого
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# Применяем пороговое значение для выделения белой линии
_, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)

# Применяем Canny для обнаружения краев
edges = cv2.Canny(binary, 50, 150)

# Находим контуры
contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# Отсеиваем небольшие контуры и рисуем на изображении
for contour in contours:
if cv2.contourArea(contour) > 400:
cv2.drawContours(frame, [contour], -1, (0, 255, 0), 2)

return frame

# Открываем видеопоток (можно использовать видеофайл, указав путь к файлу вместо 0)
cap = cv2.VideoCapture(0)

while True:
ret, frame = cap.read()

if not ret:
break

processed_frame = detect_road_line(frame)

cv2.imshow('AutoPilot Demo', processed_frame)

if cv2.waitKey(1) & 0xFF == ord('q'):
break

cap.release()
cv2.destroyAllWindows()


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

Подпишись 👉🏻 @KodduuPython 🤖
2
Автопилот для самолета – это еще более сложная система, чем для автомобиля, и подразумевает множество проверок и систем безопасности. В реальных условиях разработка автопилота для самолета требует знаний в области авионики, аэродинамики и безопасности полетов.

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

python
class Autopilot:
def __init__(self, target_altitude):
self.target_altitude = target_altitude
self.kp = 0.1
self.ki = 0.01
self.kd = 0.05
self.prev_error = 0
self.cumulative_error = 0

def control(self, current_altitude):
error = self.target_altitude - current_altitude
self.cumulative_error += error

# PID regulation
p_term = self.kp * error
i_term = self.ki * self.cumulative_error
d_term = self.kd * (error - self.prev_error)

self.prev_error = error

# Combine terms to get control output
output = p_term + i_term + d_term

# The output can be used to adjust the throttle or elevator of the aircraft
# For this demonstration, we just return it
return output

# Демонстрация работы
autopilot = Autopilot(target_altitude=35000) # Target altitude in feet

# Simulated flight data (current altitude in feet)
flight_data = [34000, 34100, 34150, 34180, 34210, 34240, 34260, 34280]

for altitude in flight_data:
control_output = autopilot.control(altitude)
print(f"Current Altitude: {altitude} ft, Control Output: {control_output}")


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

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

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

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

Давайте использовать OpenCV для обнаружения необычных светящихся объектов на изображении:

python
import cv2
import numpy as np

def detect_bright_objects(image_path):
image = cv2.imread(image_path, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Выделяем яркие области на изображении
_, thresholded = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)

# Находим контуры на бинаризованном изображении
contours, _ = cv2.findContours(thresholded, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

potential_dyson_spheres = []
for contour in contours:
if cv2.contourArea(contour) > 500: # Отсекаем маленькие объекты
potential_dyson_spheres.append(contour)
x, y, w, h = cv2.boundingRect(contour)
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow('Potential Dyson Spheres', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

return potential_dyson_spheres

# Тестирование функции
image_path = "path_to_your_telescope_image.jpg"
detect_bright_objects(image_path)


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

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

Одним из способов использовать глубокое обучение для анализа изображений в Python является использование библиотеки TensorFlow и ее высокоуровневого API Keras.

В качестве примера давайте используем предварительно обученную модель VGG16 (одну из популярных моделей в области компьютерного зрения):

python
import numpy as np
import tensorflow as tf
from tensorflow.keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from tensorflow.keras.preprocessing import image

# Загрузка предварительно обученной модели VGG16
model = VGG16(weights='imagenet')

def predict_artificial_objects(img_path):
img = image.load_img(img_path, target_size=(224, 224))
img_array = image.img_to_array(img)
img_batch = np.expand_dims(img_array, axis=0)

img_preprocessed = preprocess_input(img_batch)
predictions = model.predict(img_preprocessed)

# Расшифровка результатов в список объектов и их вероятностей
decoded_predictions = decode_predictions(predictions, top=5)[0]

artificial_objects = ["bottle", "can", "laptop", "cellphone", "tv", "camera"] # примеры объектов искусственного происхождения

found_objects = []
for i, (imagenet_id, label, score) in enumerate(decoded_predictions):
if label in artificial_objects:
found_objects.append((label, score))

return found_objects

img_path = "path_to_your_image.jpg"
print(predict_artificial_objects(img_path))


Здесь мы загружаем модель VGG16, обученную на датасете ImageNet, и используем ее для определения объектов на изображении. Затем мы фильтруем предсказанные объекты по списку типичных объектов искусственного происхождения.

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

Подпишись 👉🏻 @KodduuPython 🤖
👍1
Давайте создадим небольшую текстовую игру на Python, где пользователь должен угадать число от 1 до 100, которое компьютер загадал.

python
import random

def guess_the_number():
number = random.randint(1, 100)
attempts = 0

print("Я загадал число от 1 до 100. Попробуйте угадать его!")

while True:
try:
guess = int(input("Ваш вариант: "))

if 1 <= guess <= 100:
attempts += 1

if guess < number:
print("Загаданное число больше вашего варианта.")
elif guess > number:
print("Загаданное число меньше вашего варианта.")
else:
print(f"Поздравляю! Вы угадали число {number} за {attempts} попыток.")
break
else:
print("Ваш вариант должен быть в диапазоне от 1 до 100.")
except ValueError:
print("Пожалуйста, введите число.")

if __name__ == "__main__":
guess_the_number()


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

Сохраните этот код в файл и запустите. Наслаждайтесь игрой!

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

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

python
import random

def generate_story():
heroes = ["рыцарь", "волшебник", "король", "дракон", "вампир"]
actions = ["спас", "поймал", "победил", "потерял", "нашел"]
circumstances = ["в густом лесу", "в подземелье старого замка", "на вершине горы", "в подводном городе", "в волшебном мире"]

hero = random.choice(heroes)
action = random.choice(actions)
circumstance = random.choice(circumstances)

story = f"Однажды {hero} {action} своего друга {circumstance}."
return story

if __name__ == "__main__":
print(generate_story())


Запустите программу несколько раз, чтобы насладиться различными историями. Вы также можете дополнить или модифицировать списки heroes, actions и circumstances, чтобы сделать генерируемые истории более разнообразными и интересными.

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

python
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.balance = balance

def deposit(self, amount):
self.balance += amount
return f"Вы внесли {amount}$. Ваш текущий баланс: {self.balance}$."

def withdraw(self, amount):
if amount > self.balance:
return f"Недостаточно средств! Ваш текущий баланс: {self.balance}$."
self.balance -= amount
return f"Вы сняли {amount}$. Ваш текущий баланс: {self.balance}$."

def check_balance(self):
return f"Текущий баланс: {self.balance}$."

if __name__ == "__main__":
account = BankAccount("Алексей")
while True:
print("\nБанковский аккаунт:")
print("1. Внести депозит")
print("2. Снять деньги")
print("3. Проверить баланс")
print("4. Выйти")

choice = input("Выберите действие (1/2/3/4): ")

if choice == "1":
amount = float(input("Введите сумму для внесения: "))
print(account.deposit(amount))
elif choice == "2":
amount = float(input("Введите сумму для снятия: "))
print(account.withdraw(amount))
elif choice == "3":
print(account.check_balance())
elif choice == "4":
print("До свидания!")
break
else:
print("Неверный выбор. Пожалуйста, попробуйте снова.")


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

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

python
import random

def generate_acrostic(name):
words = {
'А': ["Алые", "Активные", "Амбициозные"],
'Б': ["Быстрые", "Блестящие", "Боевые"],
'В': ["Великие", "Верные", "Внезапные"],
# Добавьте больше слов для каждой буквы, чтобы улучшить разнообразие
# ...
}

verses = {
'А': ["алмазы сверкают на солнце.", "ангелы поют на небесах.", "акулы плавают в океане."],
'Б': ["буря начинается в полдень.", "бабочки летают вокруг.", "бегемоты громко ржут."],
'В': ["ветер шепчет тайные слова.", "волны разбиваются о берег.", "высоко поднимается луна."],
# Добавьте больше стихов для каждой буквы
# ...
}

acrostic = []
for letter in name.upper():
if letter in words and letter in verses:
line = f"{random.choice(words[letter])} {random.choice(verses[letter])}"
acrostic.append(line)

return "\n".join(acrostic)

if __name__ == "__main__":
name = input("Введите ваше имя: ")
print("\nВаш акростих:")
print(generate_acrostic(name))


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

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

Подпишись 👉🏻 @KodduuPython 🤖
👍1
Давайте создадим программу для кодирования и декодирования текста с использованием простого метода Цезаря.

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

python
def caesar_cipher(text, shift, mode="encode"):
alphabet = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
result = ''

for char in text.upper():
if char in alphabet:
index = alphabet.index(char)
if mode == "encode":
index = (index + shift) % len(alphabet)
elif mode == "decode":
index = (index - shift) % len(alphabet)
result += alphabet[index]
else:
result += char

return result

if __name__ == "__main__":
action = input("Выберите действие (encode/decode): ")
if action not in ["encode", "decode"]:
print("Неверное действие!")
exit()

text = input("Введите текст: ")
shift = int(input("Введите сдвиг (целое число): "))

result = caesar_cipher(text, shift, mode=action)
print(f"Результат: {result}")


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

Примечание: Данный шифр работает с русским алфавитом. Если вы хотите использовать английский или другой алфавит, просто замените строку alphabet соответствующими символами.

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

python
class Library:
def __init__(self):
self.books = ["Война и мир", "Преступление и наказание", "Мастер и Маргарита"]
self.lent_books = {}

def lend_book(self, book_name, user_name):
if book_name in self.books:
self.books.remove(book_name)
self.lent_books[book_name] = user_name
return f"Книга '{book_name}' выдана пользователю {user_name}."
elif book_name in self.lent_books:
return f"Книга '{book_name}' уже выдана пользователю {self.lent_books[book_name]}."
else:
return "Такой книги нет в библиотеке."

def return_book(self, book_name):
if book_name in self.lent_books:
user_name = self.lent_books[book_name]
del self.lent_books[book_name]
self.books.append(book_name)
return f"Книга '{book_name}' возвращена от пользователя {user_name}."
else:
return "Эта книга не была взята."

def display_books(self):
return ", ".join(self.books)

if __name__ == "__main__":
library = Library()
while True:
print("\nДобро пожаловать в библиотеку!")
print("1. Показать доступные книги")
print("2. Взять книгу")
print("3. Вернуть книгу")
print("4. Выйти")

choice = input("Выберите действие (1/2/3/4): ")

if choice == "1":
print("\nДоступные книги:")
print(library.display_books())
elif choice == "2":
book_name = input("Введите название книги, которую хотите взять: ")
user_name = input("Введите ваше имя: ")
print(library.lend_book(book_name, user_name))
elif choice == "3":
book_name = input("Введите название книги, которую хотите вернуть: ")
print(library.return_book(book_name))
elif choice == "4":
print("До свидания!")
break
else:
print("Неверный выбор. Пожалуйста, попробуйте снова.")


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

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

python
class Person:
def __init__(self, name, parent=None):
self.name = name
self.parent = parent
self.children = []

def add_child(self, child):
self.children.append(child)

def display_family_tree(self, level=0):
print(' ' * level + self.name)
for child in self.children:
child.display_family_tree(level + 1)

def find_person(root, name):
if root.name == name:
return root
for child in root.children:
result = find_person(child, name)
if result:
return result
return None

if __name__ == "__main__":
root_name = input("Введите имя основателя семьи: ")
root = Person(root_name)

while True:
print("\nМеню генеалогического дерева:")
print("1. Добавить члена семьи")
print("2. Показать дерево")
print("3. Выйти")

choice = input("Выберите действие (1/2/3): ")

if choice == "1":
parent_name = input("Введите имя родителя: ")
child_name = input("Введите имя ребенка: ")

parent = find_person(root, parent_name)
if parent:
child = Person(child_name, parent)
parent.add_child(child)
print(f"{child_name} добавлен в семью как ребенок {parent_name}.")
else:
print(f"Не удалось найти {parent_name} в дереве!")
elif choice == "2":
root.display_family_tree()
elif choice == "3":
print("До свидания!")
break
else:
print("Неверный выбор. Пожалуйста, попробуйте снова.")


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

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

python
class Room:
def __init__(self, description):
self.description = description
self.exits = {}
self.treasure = False

def add_exit(self, direction, room):
self.exits[direction] = room

def navigate(self, direction):
return self.exits.get(direction)

def set_treasure(self):
self.treasure = True

def game():
# Создание комнат
entrance = Room("Вы находитесь у входа в замок. Тяжелые деревянные двери приглашают вас внутрь.")
hall = Room("Вы в огромном зале с каменными стенами. Портреты королей висят на стенах.")
library = Room("Это огромная библиотека. Стеллажи с книгами тянутся до потолка.")
treasury = Room("Это сокровищница! Золотые монеты, драгоценные камни блескают на полках.")

# Установка выходов для каждой комнаты
entrance.add_exit("вперед", hall)
hall.add_exit("назад", entrance)
hall.add_exit("влево", library)
hall.add_exit("вперед", treasury)
library.add_exit("вправо", hall)
treasury.add_exit("назад", hall)

# Устанавливаем сокровище в сокровищнице
treasury.set_treasure()

# Начало игры
current_room = entrance
while True:
print(current_room.description)
if current_room.treasure:
print("Поздравляем! Вы нашли сокровище!")
break

direction = input("Куда вы хотите пойти? (вперед/назад/влево/вправо): ")
if direction in current_room.exits:
current_room = current_room.navigate(direction)
else:
print("Там нет двери. Попробуйте другое направление.")

if __name__ == "__main__":
game()


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

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

python
import random

class Pond:
def __init__(self, ducks=2, algae=100):
self.ducks = ducks
self.algae = algae

def pass_day(self):
# Утки едят водоросли
algae_eaten = min(self.ducks * 10, self.algae)
self.algae -= algae_eaten

# Водоросли растут
self.algae += 20

# Шанс на то, что утка размножится
if random.random() < 0.1 * self.ducks:
self.ducks += 1

# Шанс на то, что утка погибнет (если нечего есть)
if self.algae < 10 and random.random() < 0.3:
self.ducks -= 1

def __str__(self):
return f"В пруду {self.ducks} уток и {self.algae} водорослей."

if __name__ == "__main__":
pond = Pond()

days = 30
for day in range(days):
pond.pass_day()
print(f"День {day + 1}: {pond}")


В этой модели у нас есть пруд, в котором изначально 2 утки и 100 водорослей. Каждую итерацию (или "день") утки едят водоросли, водоросли растут, и у уток есть шанс размножиться или погибнуть (особенно, если водорослей мало). Это простая экосистема, которая показывает взаимодействие между двумя видами.

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

python
class ParkingLot:
def __init__(self, capacity=5):
self.capacity = capacity
self.occupied_slots = 0

def park(self, car_number):
if self.occupied_slots < self.capacity:
self.occupied_slots += 1
print(f"Автомобиль {car_number} припарковался. Свободных мест: {self.capacity - self.occupied_slots}")
else:
print(f"Парковка полна! Автомобиль {car_number} не смог припарковаться.")

def leave(self, car_number):
if self.occupied_slots > 0:
self.occupied_slots -= 1
print(f"Автомобиль {car_number} покинул парковку. Свободных мест: {self.capacity - self.occupied_slots}")
else:
print(f"Парковка пуста! Автомобиль {car_number} не может покинуть парковку.")

if __name__ == "__main__":
parking_lot = ParkingLot(3)

parking_lot.park("A123BC")
parking_lot.park("B456DE")
parking_lot.park("C789FG")
parking_lot.park("D101GH")

parking_lot.leave("A123BC")
parking_lot.leave("C789FG")
parking_lot.leave("B456DE")
parking_lot.leave("D101GH")


В этой программе у нас есть класс ParkingLot, который представляет парковку автомобилей. Парковка может принимать автомобили и отпускать их. Если парковка полна, новые автомобили не могут припарковаться, и наоборот, если парковка пуста, автомобили не могут её покинуть.

Подпишись 👉🏻 @KodduuPython 🤖
Приведенный ниже код демонстрирует использование библиотеки beautifulsoup4 для парсинга HTML и requests для выполнения HTTP-запросов. С помощью этого кода мы будем извлекать заголовки новостей с главной страницы сайта BBC News:

python
import requests
from bs4 import BeautifulSoup

def fetch_bbc_headlines():
# Отправляем запрос на главную страницу BBC News
response = requests.get('https://www.bbc.com/news')

# Проверяем статус ответа
if response.status_code != 200:
print("Failed to fetch the webpage")
return

# Разбираем HTML с помощью BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')

# Ищем все элементы с классом, который соответствует заголовкам новостей
headlines = soup.find_all('h3', class_='gs-c-promo-heading__title gel-pica-bold nw-o-link-split__text')

# Печатаем заголовки
for headline in headlines:
print(headline.text)

if __name__ == "__main__":
fetch_bbc_headlines()


Для выполнения этого кода, убедитесь, что у вас установлены библиотеки beautifulsoup4 и requests. Вы можете установить их с помощью pip:

pip install beautifulsoup4 requests


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

Подпишись 👉🏻 @KodduuPython 🤖
1
Вот другой интересный пример, который демонстрирует использование библиотеки matplotlib для визуализации данных:

python
import numpy as np
import matplotlib.pyplot as plt

def plot_sine_and_cosine_waves():
# Создаем массив значений от 0 до 4*pi
x = np.linspace(0, 4 * np.pi, 1000)

# Вычисляем значения синуса и косинуса для каждой точки
y_sin = np.sin(x)
y_cos = np.cos(x)

# Создаем график
plt.figure(figsize=(10, 6))
plt.plot(x, y_sin, label='sin(x)', color='blue')
plt.plot(x, y_cos, label='cos(x)', color='red')

# Настраиваем график
plt.title('Sine and Cosine Waves')
plt.xlabel('X values')
plt.ylabel('Y values')
plt.legend()
plt.grid(True)

# Отображаем график
plt.show()

if __name__ == "__main__":
plot_sine_and_cosine_waves()


Для выполнения этого кода вам понадобятся библиотеки numpy и matplotlib. Вы можете установить их с помощью pip:

pip install numpy matplotlib


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

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