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
librosa — это мощная библиотека для анализа и обработки аудио. Вот некоторые основные возможности и примеры ее использования:

### 1. Загрузка и воспроизведение аудиофайла:

Для начала убедитесь, что у вас установлены необходимые библиотеки:
bash
pip install librosa soundfile numpy


Теперь вы можете загрузить аудиофайл и воспроизвести его:

python
import librosa
import librosa.display
import soundfile as sf
import numpy as np
import matplotlib.pyplot as plt

# Загрузка аудиофайла
y, sr = librosa.load('path_to_your_audio_file.wav', sr=None)

# Воспроизведение аудиофайла
sf.write('tmp.wav', y, sr)
os.system("start tmp.wav")


### 2. Визуализация волновой формы:

python
plt.figure(figsize=(12, 4))
librosa.display.waveshow(y, sr=sr)
plt.title('Waveform')
plt.tight_layout()
plt.show()


### 3. Вычисление и визуализация спектрограммы:

python
# Вычисление спектрограммы
D = librosa.amplitude_to_db(np.abs(librosa.stft(y)), ref=np.max)

# Визуализация
plt.figure(figsize=(12, 4))
librosa.display.specshow(D, sr=sr, x_axis='time', y_axis='log')
plt.colorbar(format='%+2.0f dB')
plt.title('Spectrogram')
plt.tight_layout()
plt.show()


### 4. Извлечение признаков (например, темп):

python
# Вычисление темпа
tempo, _ = librosa.beat.beat_track(y, sr=sr)
print(f"Estimated tempo: {tempo} beats per minute.")


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

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

python
import turtle
import random

# Настройка экрана
wn = turtle.Screen()
wn.bgcolor("black")

# Создание "черепашки" для рисования снежинки
flake = turtle.Turtle()
flake.shape("circle")
flake.color("white")
flake.speed(0)
flake.penup()
flake.hideturtle()

flake_list = []

# Создание снежинки
def create_flake():
x = random.randint(-300, 300)
y = random.randint(100, 300)
flake.penup()
flake.goto(x, y)
flake.showturtle()
flake_list.append(flake.clone())

# Падение снежинки
def fall():
for flake in flake_list:
y = flake.ycor()
y -= random.randint(1, 5)
flake.sety(y)

if y < -300:
x = random.randint(-300, 300)
y = random.randint(100, 300)
flake.goto(x, y)

# Создание множества снежинок
for _ in range(50):
create_flake()

# Основной цикл анимации
while True:
fall()
wn.update()


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

Подпишись 👉🏻 @KodduuPython 🤖
Попробуем написать небольшую текстовую игру-квест на Python:

python
def start_game():
print("Вы просыпаетесь в тёмной комнате. Вы не помните, как здесь оказались.")
print("Перед вами две двери: левая и правая. Какую дверь вы выберете?")

choice = input("Введите 'левая' или 'правая': ")

if choice == "левая":
dragon_room()
elif choice == "правая":
trap_room()
else:
print("Вы выбрали неизвестное действие и остались в комнате навсегда.")
end_game()

def dragon_room():
print("\nВы заходите в комнату и видите огромного дракона.")
print("Дракон предлагает вам два варианта: 1) сыграть в игру или 2) сразиться с ним.")

choice = input("Введите '1' чтобы сыграть или '2' чтобы сразиться: ")

if choice == "1":
print("Вы играли в крестики-нолики и победили дракона! Он подарил вам сокровище!")
end_game()
elif choice == "2":
print("Дракон оказался слишком сильным и вы проиграли.")
end_game()
else:
print("Вы не смогли принять решение и дракон съел вас.")
end_game()

def trap_room():
print("\nВы заходите в комнату и попадаете в ловушку!")
print("Пол под вами начинает проваливаться!")

choice = input("Быстро! Введите 'прыгать' чтобы попытаться выжить: ")

if choice == "прыгать":
print("Вы увернулись от проваливающегося пола и нашли выход!")
end_game()
else:
print("Вы не успели и упали в яму.")
end_game()

def end_game():
print("\nКонец игры!")
replay = input("Хотите начать сначала? (да/нет): ")
if replay == "да":
start_game()
else:
print("Спасибо за игру!")

start_game()


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

Подпишись 👉🏻 @KodduuPython 🤖
👍2
Давайте напишем простой генератор паролей на Python:

python
import random
import string

def generate_password(length=8):
characters = string.ascii_letters + string.digits + string.punctuation
password = ''.join(random.choice(characters) for i in range(length))
return password

print("Генератор паролей")
password_length = int(input("Введите желаемую длину пароля: "))
print(f"Ваш новый пароль: {generate_password(password_length)}")


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

Подпишись 👉🏻 @KodduuPython 🤖
Представляю простой консольный квиз на Python:

python
def ask_question(question, correct_answer, options):
print(question)
for i, option in enumerate(options, 1):
print(f"{i}. {option}")

answer = int(input("Ваш ответ (введите номер): "))

if options[answer-1] == correct_answer:
return True
else:
return False

questions = [
{
"question": "Какая планета ближе всего к Солнцу?",
"correct_answer": "Меркурий",
"options": ["Марс", "Меркурий", "Венера", "Земля"]
},
{
"question": "Какой элемент имеет химический символ 'Au'?",
"correct_answer": "Золото",
"options": ["Золото", "Аргон", "Аллюминий", "Серебро"]
}
]

score = 0

for q in questions:
if ask_question(q['question'], q['correct_answer'], q['options']):
print("Правильно!")
score += 1
else:
print(f"Неправильно! Правильный ответ: {q['correct_answer']}")

print(f"Ваш результат: {score}/{len(questions)}")


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

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

python
def celsius_to_fahrenheit(celsius):
return 9.0/5.0 * celsius + 32

def fahrenheit_to_celsius(fahrenheit):
return (fahrenheit - 32) * 5.0/9.0

print("Программа конвертации температуры")
choice = input("Конвертировать из Цельсия в Фаренгейта (введите 'C') или из Фаренгейта в Цельсия (введите 'F')? ")

if choice == 'C':
celsius = float(input("Введите температуру в градусах Цельсия: "))
print(f"{celsius}°C = {celsius_to_fahrenheit(celsius):.2f}°F")
elif choice == 'F':
fahrenheit = float(input("Введите температуру в градусах Фаренгейта: "))
print(f"{fahrenheit}°F = {fahrenheit_to_celsius(fahrenheit):.2f}°C")
else:
print("Неверный выбор!")


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

Подпишись 👉🏻 @KodduuPython 🤖
Представлю еще одну интересную библиотеку - emoji.

Библиотека emoji позволяет добавлять эмодзи в ваш код на Python.

1. Установите библиотеку:
pip install emoji


2. Пример кода:

python
import emoji

def main():
print(emoji.emojize('Python is :thumbs_up:'))
print(emoji.emojize('Библиотеки на Python делают код веселым :wink:', language='ru'))

# Перевод текстового описания эмодзи в сам эмодзи
user_input = input("Введите описание эмодзи (например, :heart:): ")
print(emoji.emojize(user_input))

if __name__ == "__main__":
main()


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

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

Подпишись 👉🏻 @KodduuPython 🤖
Давайте рассмотрим еще одну интересную библиотеку — howdoi.

Эта библиотека позволяет быстро находить ответы на программистские вопросы прямо из командной строки (или из вашего кода), используя Stack Overflow.

1. Установите библиотеку:
pip install howdoi


2. Пример использования в коде:

python
import howdoi

def get_answer(query):
return howdoi.howdoi({'query': query})

def main():
question = input("Что вы хотели бы узнать? ")
print(get_answer(question))

if __name__ == "__main__":
main()


Запустив этот код, вы можете задать программистский вопрос (на английском языке), и программа попробует найти ответ на Stack Overflow.

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

Надеюсь, что это добавит удобства в ваш рабочий процесс!

Подпишись 👉🏻 @KodduuPython 🤖
1🆒1
Рассмотрим библиотеку pywhatkit.

pywhatkit — это интересная библиотека, которая позволяет выполнять множество различных задач, таких как отправка сообщений WhatsApp, преобразование текста в рукопись, автоматический поиск в Google и многое другое.

1. Установите библиотеку:
pip install pywhatkit


2. Примеры использования:

a) Отправить сообщение WhatsApp:
python
import pywhatkit as kt

def send_whatsapp():
# Не забудьте войти в WhatsApp Web на вашем компьютере перед запуском
phone_num = input("Введите номер телефона в формате +xxxxxxxxxxx: ")
message = input("Введите сообщение: ")
time_hour = int(input("Введите час отправки (24-часовой формат): "))
time_min = int(input("Введите минуту отправки: "))

kt.sendwhatmsg(phone_num, message, time_hour, time_min)

send_whatsapp()


b) Преобразовать текст в рукопись:
python
import pywhatkit as kt

def text_to_handwriting():
text = input("Введите текст для преобразования в рукопись: ")
output_path = "output.png"

kt.text_to_handwriting(text, save_to=output_path)
print(f"Рукописный текст сохранен в {output_path}")

text_to_handwriting()


Обратите внимание, что для отправки сообщений через WhatsApp, вам нужно будет предварительно отсканировать QR-код на сайте WhatsApp Web.

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

Подпишись 👉🏻 @KodduuPython 🤖
1🆒1
Рассмотрим библиотеку rich.

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

1. Установите библиотеку:
pip install rich


2. Примеры использования:

a) Вывод стилизованного текста:
python
from rich import print

print("[bold red]Это красный жирный текст![/bold red]")
print("[underline blue]Это синий текст с подчеркиванием![/underline blue]")


b) Вывод таблицы:
python
from rich.table import Table
from rich.console import Console

console = Console()

table = Table(show_header=True, header_style="bold magenta")
table.add_column("ID")
table.add_column("Name")
table.add_column("Age")

table.add_row("1", "Alice", "28")
table.add_row("2", "Bob", "23")
table.add_row("3", "Charlie", "34")

console.print(table)


c) Вывод Markdown:
python
from rich.console import Console

console = Console()

markdown_text = """
# Заголовок
- Список 1
- Список 2
"""

console.print(markdown_text, markup=False)


d) Прогресс-бар:
python
import time
from rich.progress import track

for step in track(range(10), description="Обработка..."):
time.sleep(0.1)


rich действительно преобразует то, как вы видите вывод в консоли, делая его намного более привлекательным и читаемым. Вы можете использовать его для улучшения CLI-интерфейсов, скриптов и многого другого.

Подпишись 👉🏻 @KodduuPython 🤖
Давайте рассмотрим библиотеку dearpygui.

dearpygui — это быстрая, простая в использовании и портируемая библиотека для создания графических пользовательских интерфейсов (GUI) на Python.

1. Установите библиотеку:
pip install dearpygui


2. Пример создания простого окна с кнопкой:

python
import dearpygui.dearpygui as dpg

def on_button_click(sender, app_data):
dpg.create_simple_plot("Sample Plot", [0, 1, 2, 3, 4], [0, 1, 4, 9, 16])

with dpg.handler_registry():
with dpg.window(label="Main Window"):
dpg.add_text("Hello, dearpygui!")
dpg.add_button(label="Show Plot", callback=on_button_click)

dpg.create_context()
dpg.create_viewport(title='Custom GUI', width=600, height=400)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.destroy_context()


Этот код создаст окно с текстом и кнопкой. При нажатии на кнопку будет отображаться график.

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

Если вы искали быстрый и простой способ создать GUI на Python без необходимости изучения сложных библиотек вроде PyQt или Tkinter, dearpygui может быть отличным выбором!

Подпишись 👉🏻 @KodduuPython 🤖
🆒3
Давайте поговорим о библиотеке imageio.

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

1. Установите библиотеку:
pip install imageio


2. Примеры использования:

a) Чтение и сохранение изображения:
python
import imageio

image = imageio.imread("input.jpg")
imageio.imwrite("output.png", image)


b) Создание анимированного GIF из нескольких изображений:
python
import imageio

filenames = ["frame1.png", "frame2.png", "frame3.png"]
images = [imageio.imread(filename) for filename in filenames]
imageio.mimsave("animation.gif", images, duration=0.5) # duration — это продолжительность каждого кадра в секундах


c) Чтение и запись видео:
python
reader = imageio.get_reader("video.mp4")
fps = reader.get_meta_data()['fps']

writer = imageio.get_writer("output_video.mp4", fps=fps)

for frame in reader:
modified_frame = frame[:, :, :3] # Например, удалить альфа-канал
writer.append_data(modified_frame)

writer.close()


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

Подпишись 👉🏻 @KodduuPython 🤖
Рассмотрим библиотеку pyfiglet.

pyfiglet — это реализация на Python популярной утилиты figlet, которая позволяет создавать ASCII-искусство из текста. С её помощью вы можете генерировать красочные и стилизованные заголовки или логотипы прямо в вашем терминале.

1. Установите библиотеку:
pip install pyfiglet


2. Пример использования:

python
import pyfiglet

def main():
font = pyfiglet.Figlet(font='slant') # Вы можете изменить шрифт на любой другой из доступных
text = input("Введите текст для преобразования: ")
ascii_art = font.renderText(text)
print(ascii_art)

if __name__ == "__main__":
main()


Запустите код и введите любой текст, чтобы увидеть его стилизованное ASCII-представление.

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

Подпишись 👉🏻 @KodduuPython 🤖
Поговорим о библиотеке pygame.

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

1. Установите библиотеку:
pip install pygame


2. Простой пример создания окна с движущимся прямоугольником:

python
import pygame
from pygame.locals import QUIT

pygame.init()

WIDTH, HEIGHT = 640, 480
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Простой пример с pygame")

WHITE = (255, 255, 255)
RED = (255, 0, 0)

x, y = WIDTH // 2, HEIGHT // 2
velocity = 5

running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False

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

screen.fill(WHITE)
pygame.draw.rect(screen, RED, (x, y, 50, 50))

pygame.display.flip()
pygame.time.Clock().tick(60)

pygame.quit()


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

pygame — это мощный инструмент для создания 2D-игр и мультимедийных приложений, и он предоставляет множество возможностей для реализации различных идей. Если вы заинтересованы в разработке игр или графических приложений на Python, pygame может стать отличным выбором!

Подпишись 👉🏻 @KodduuPython 🤖
🆒2
Давайте рассмотрим библиотеку Scrapy.

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

1. Установите библиотеку:
pip install Scrapy


2. Пример создания простого паука для сбора заголовков с веб-страницы:

python
import scrapy

class SimpleSpider(scrapy.Spider):
name = "simple_spider"
start_urls = [
'https://example.com',
]

def parse(self, response):
for title in response.css('h1::text, h2::text, h3::text'):
yield {'title': title.get()}


Чтобы запустить этого паука, сохраните его в файл simple_spider.py и выполните команду:
scrapy runspider simple_spider.py


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

Если вам нужно автоматически собирать информацию с веб-сайтов или мониторить изменения контента, Scrapy может стать незаменимым инструментом для этих задач.

Подпишись 👉🏻 @KodduuPython 🤖
🆒2
Создание полноценного VPN-сервера — это сложная задача, и для надёжного и безопасного VPN лучше использовать специализированные решения, такие как OpenVPN или WireGuard. Однако, для демонстрационных целей, мы можем рассмотреть создание простого SOCKS-прокси с использованием Python, который будет перенаправлять трафик, но не обеспечивать его шифрование.

Для этого мы можем использовать библиотеку pysocks.

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


2. Простой SOCKS-прокси сервер:

python
import socket
import threading
import socks

def handler(client):
address, port = client.getpeername()
print(f"Подключение от {address}:{port}")

# Используйте socks.reply.PROXY_ERROR, чтобы отправить ошибку, если что-то пойдет не так.
client.sendall(socks.reply.SOCKS5_GRANTED)

data = client.recv(1024)
while data:
client.sendall(data)
data = client.recv(1024)

print(f"Отключение от {address}:{port}")
client.close()

def main():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("0.0.0.0", 1080))
server.listen(5)
print("SOCKS сервер запущен на порту 1080")

while True:
client, addr = server.accept()
thread = threading.Thread(target=handler, args=(client,))
thread.start()

if __name__ == "__main__":
main()


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

Если вы рассматриваете создание реального VPN-сервера для практического использования, рекомендуется использовать проверенные и широко используемые решения, такие как OpenVPN, и убедиться, что вы осведомлены о потенциальных рисках и вопросах безопасности.

Подпишись 👉🏻 @KodduuPython 🤖
🔥3
Вот пример необычного кода на Python, который использует метод Монте-Карло для приближенного вычисления числа π (пи):

import random

def estimate_pi(num_samples):
inside_circle = 0

for _ in range(num_samples):
x, y = random.random(), random.random()
distance = x**2 + y**2

if distance <= 1:
inside_circle += 1

return (inside_circle / num_samples) * 4

# Попробуем с 1000000 случайных точек
pi_estimate = estimate_pi(1_000_000)
print(f'Приближенное значение числа π после 1,000,000 испытаний: {pi_estimate}')

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

Однако, чтобы сделать код действительно необычным, мы можем добавить немного "магии" Python, используя декораторы и контекстные менеджеры:

import random
import contextlib

# Декоратор для измерения времени выполнения функции
import time
def timeit(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"Функция {func.__name__!r} выполнялась {end - start:.4f} секунд.")
return result
return wrapper

# Контекстный менеджер для изменения точности вывода чисел с плавающей точкой
@contextlib.contextmanager
def precision(level):
old_precision = f"{0:.10f}".format(0).count('0')
template = "{0:." + str(level) + "f}"
float.__str__ = lambda self: template.format(self)
try:
yield
finally:
float.__str__ = lambda self: ("{0:." + str(old_precision) + "f}").format(self)

@timeit
def estimate_pi(num_samples):
inside_circle = 0
for _ in range(num_samples):
x, y = random.random(), random.random()
if x**2 + y**2 <= 1:
inside_circle += 1
return (inside_circle / num_samples) * 4

# Используем контекстный менеджер для установки точности числа π
with precision(8):
pi_estimate = estimate_pi(1_000_000)
print(f'Приближенное значение числа π после 1,000,000 испытаний: {pi_estimate}')

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

Подпишись 👉🏻 @KodduuPython 🤖
Как насчет кода, который превращает текстовое сообщение в "речь" ASCII-арт? Это необычный и интересный способ представления текста. Для этого мы можем использовать библиотеку art, которая позволяет генерировать текст в различных стилях ASCII-арт.

Перед использованием этой библиотеки, её необходимо установить, выполнив команду pip install art в командной строке.

Вот пример кода:

from art import *

# Выбираем стиль для текста. Стили можно посмотреть в документации библиотеки.
style = "block" # это один из возможных стилей

# Функция, которая принимает текст и стиль, возвращая ASCII-арт
def text_to_art(text, style):
art_text = text2art(text, font=style)
return art_text

# Пример использования функции
text = "Привет, мир!"
ascii_art = text_to_art(text, style)

print(ascii_art)

Запустив этот код, вы получите вывод в консоль, где "Привет, мир!" будет представлено в виде ASCII-арт в выбранном стиле.

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

Подпишись 👉🏻 @KodduuPython 🤖
🔥4
Как насчет создания мини-игры в консоли на Python, например, текстового квеста? Пользователь будет выбирать действия из предложенных вариантов, что приведет к различным исходам. Вот простой пример:

def introduction():
print("Вы просыпаетесь в незнакомой комнате. Что вы будете делать?")
print("1) Осмотреть комнату")
print("2) Попытаться открыть дверь")
choice = input("> ")
if choice == "1":
look_around()
elif choice == "2":
open_door()
else:
print("Неизвестное действие. Попробуйте снова.")
introduction()

def look_around():
print("Комната пуста, кроме стола с ключом и заметкой.")
print("1) Взять ключ")
print("2) Прочитать заметку")
choice = input("> ")
if choice == "1":
take_key()
elif choice == "2":
read_note()
else:
print("Неизвестное действие. Попробуйте снова.")
look_around()

def open_door():
print("Дверь закрыта на замок.")
if "ключ" in inventory:
print("Вы используете ключ и дверь открывается. Поздравляем, вы вышли на свободу!")
else:
print("Но у вас нет ключа. Кажется, вам стоит его найти.")
introduction()

def take_key():
print("Вы взяли ключ.")
inventory.append("ключ")
introduction()

def read_note():
print("Заметка гласит: 'Иногда правильный выбор - не делать ничего.'")
introduction()

# Главная программа
inventory = [] # Инвентарь игрока

print("Добро пожаловать в текстовый квест!")
introduction()


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

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

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

import string
import random

# Функция шифрования текста шифром Цезаря
def caesar_encrypt(text, shift):
encrypted_text = ""
for char in text:
if char.isalpha():
offset = 65 if char.isupper() else 97
encrypted_text += chr((ord(char) + shift - offset) % 26 + offset)
else:
encrypted_text += char
return encrypted_text

# Функция расшифровки текста шифром Цезаря
def caesar_decrypt(encrypted_text, shift):
return caesar_encrypt(encrypted_text, -shift)

# Функция генерации случайного сообщения
def generate_random_message(length):
letters = string.ascii_letters + " " # Пространство и буквы для сообщения
return ''.join(random.choice(letters) for i in range(length))

# Генерация и шифрование сообщения
random_message = generate_random_message(50)
shift = random.randint(1, 25)
encrypted_message = caesar_encrypt(random_message, shift)

print(f"Original message: {random_message}")
print(f"Encrypted message with shift {shift}: {encrypted_message}")

# Попробуем расшифровать
decrypted_message = caesar_decrypt(encrypted_message, shift)
print(f"Decrypted message: {decrypted_message}")

# Проверка, верно ли расшифровано сообщение
assert random_message == decrypted_message


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

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

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