Рассмотрим библиотеку
1. Установите библиотеку:
2. Пример использования:
Запустите код и введите любой текст, чтобы увидеть его стилизованное ASCII-представление.
Подпишись 👉🏻 @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 🤖
Поговорим о библиотеке
1. Установите библиотеку:
2. Простой пример создания окна с движущимся прямоугольником:
Этот код создает окно с белым фоном и красным прямоугольником, который можно перемещать с помощью стрелок на клавиатуре.
Подпишись 👉🏻 @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
Давайте рассмотрим библиотеку
1. Установите библиотеку:
2. Пример создания простого паука для сбора заголовков с веб-страницы:
Чтобы запустить этого паука, сохраните его в файл
Если вам нужно автоматически собирать информацию с веб-сайтов или мониторить изменения контента,
Подпишись 👉🏻 @KodduuPython 🤖
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, который будет перенаправлять трафик, но не обеспечивать его шифрование.
Для этого мы можем использовать библиотеку
1. Установите необходимые библиотеки:
2. Простой SOCKS-прокси сервер:
Это довольно примитивный пример и не предоставляет шифрования или аутентификации. Также он не является настоящим SOCKS-прокси (он просто принимает соединения и пересылает данные обратно), но вы можете улучшить его, добавив правильную реализацию протокола SOCKS и другие функции.
Если вы рассматриваете создание реального VPN-сервера для практического использования, рекомендуется использовать проверенные и широко используемые решения, такие как OpenVPN, и убедиться, что вы осведомлены о потенциальных рисках и вопросах безопасности.
Подпишись 👉🏻 @KodduuPython 🤖
Для этого мы можем использовать библиотеку
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, который использует метод Монте-Карло для приближенного вычисления числа π (пи):
Однако, чтобы сделать код действительно необычным, мы можем добавить немного "магии" Python, используя декораторы и контекстные менеджеры:
Подпишись 👉🏻 @KodduuPython 🤖
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-арт? Это необычный и интересный способ представления текста. Для этого мы можем использовать библиотеку
Перед использованием этой библиотеки, её необходимо установить, выполнив команду
Вот пример кода:
Обратите внимание, что в зависимости от стиля и длины текста, ASCII-арт может занимать много места на экране, и некоторые сложные символы или кириллица могут отображаться некорректно в определённых стилях.
Подпишись 👉🏻 @KodduuPython 🤖
art, которая позволяет генерировать текст в различных стилях ASCII-арт.Перед использованием этой библиотеки, её необходимо установить, выполнив команду
pip install art в командной строке.Вот пример кода:
from art import *Запустив этот код, вы получите вывод в консоль, где "Привет, мир!" будет представлено в виде ASCII-арт в выбранном стиле.
# Выбираем стиль для текста. Стили можно посмотреть в документации библиотеки.
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-арт может занимать много места на экране, и некоторые сложные символы или кириллица могут отображаться некорректно в определённых стилях.
Подпишись 👉🏻 @KodduuPython 🤖
🔥4
Как насчет создания мини-игры в консоли на Python, например, текстового квеста? Пользователь будет выбирать действия из предложенных вариантов, что приведет к различным исходам. Вот простой пример:
В этом коде определены функции для каждого возможного действия игрока. В начале игры вызывается функция
Этот код можно расширить, добавив больше комнат, предметов, загадок и разветвлений сюжета, чтобы сделать игру более интересной и полноценной.
Подпишись 👉🏻 @KodduuPython 🤖
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 🤖
Давайте создадим простой скрипт, который будет генерировать случайные "секретные" сообщения и затем решать их с помощью простого метода шифрования — шифра Цезаря. Это классический метод, в котором каждая буква в тексте заменяется на другую, которая находится на некотором фиксированном числе позиций левее или правее её в алфавите.
Этот код сначала генерирует случайное сообщение, затем шифрует его с использованием шифра Цезаря и в конце расшифровывает, проверяя, что расшифрованное сообщение совпадает с исходным.
Обратите внимание, что использование
Подпишись 👉🏻 @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 🤖
Давайте создадим что-то оригинальное и интерактивное — например, скрипт, который позволяет пользователю "рисовать" в консоли, используя клавиатуру. Пользователь сможет перемещаться по консоли с помощью клавиш WASD и оставлять звездочки (*), создавая простые рисунки.
Этот скрипт создает простой текстовый интерфейс, где пользователь может "рисовать", перемещаясь по "холсту" и оставляя звездочки. Как только пользователь нажимает 'q', программа завершается, показывая последнее состояние "холста".
Примечание: Этот код предназначен для запуска в среде Windows, поскольку используется
Подпишись 👉🏻 @KodduuPython 🤖
import os
import sys
import msvcrt
# Инициализируем "холст" для рисования
width, height = 40, 20 # Размер холста
cursor_x, cursor_y = width // 2, height // 2 # Начальное положение курсора
canvas = [[" " for _ in range(width)] for _ in range(height)]
canvas[cursor_y][cursor_x] = "*" # Рисуем начальную точку
# Отображение холста
def print_canvas(canvas):
os.system('cls' if os.name == 'nt' else 'clear') # Очищаем экран
for row in canvas:
print("".join(row))
# Обновление позиции курсора на холсте
def update_canvas(x, y, canvas):
if 0 <= x < width and 0 <= y < height:
canvas[y][x] = "*"
return canvas
# Печать инструкций
print("Use WASD keys to move around and draw. Press 'q' to quit.")
# Главный цикл
while True:
print_canvas(canvas)
# Получаем ввод от пользователя
if msvcrt.kbhit():
key = msvcrt.getch().decode().lower()
if key == 'q':
break # Выходим из программы
elif key == 'w':
cursor_y = max(0, cursor_y - 1)
elif key == 's':
cursor_y = min(height - 1, cursor_y + 1)
elif key == 'a':
cursor_x = max(0, cursor_x - 1)
elif key == 'd':
cursor_x = min(width - 1, cursor_x + 1)
canvas = update_canvas(cursor_x, cursor_y, canvas)
# Перед выходом очищаем экран и печатаем итоговый рисунок
os.system('cls' if os.name == 'nt' else 'clear')
print_canvas(canvas)
Этот скрипт создает простой текстовый интерфейс, где пользователь может "рисовать", перемещаясь по "холсту" и оставляя звездочки. Как только пользователь нажимает 'q', программа завершается, показывая последнее состояние "холста".
Примечание: Этот код предназначен для запуска в среде Windows, поскольку используется
msvcrt для не блокирующего ввода и cls для очистки экрана. Для других операционных систем потребуются изменения.Подпишись 👉🏻 @KodduuPython 🤖
Давайте попробуем что-то совершенно иное: создадим простой генератор музыки на Python. Мы будем использовать библиотеку
Сначала вам нужно будет установить библиотеку
Теперь, когда у нас есть
Этот скрипт генерирует случайную мелодию в диапазоне одной октавы (C4-C5) в C мажорной гамме и сохраняет её в MIDI файле. Вы можете воспроизвести этот файл с помощью любого стандартного MIDI плеера.
Такой подход может быть начальной точкой для создания более сложной системы генерации музыки, которая учитывает гармонии, ритм и музыкальные формы.
Подпишись 👉🏻 @KodduuPython 🤖
pyknon, которая не так широко известна, но позволяет создавать музыкальные ноты и мелодии.Сначала вам нужно будет установить библиотеку
pyknon:pip install pyknon
Теперь, когда у нас есть
pyknon, давайте напишем скрипт для создания случайной мелодии:from pyknon.genmidi import Midi
from pyknon.music import NoteSeq, Note
import random
def generate_random_melody(num_notes, note_duration=1/4):
scale = ['c', 'd', 'e', 'f', 'g', 'a', 'b'] # C мажор
melody = NoteSeq()
for _ in range(num_notes):
pitch = random.choice(scale) + str(random.randint(4, 5))
note = Note(pitch=pitch, duration=note_duration)
melody.append(note)
return melody
# Генерируем случайную мелодию из 20 нот
random_melody = generate_random_melody(20)
# Создаем MIDI файл
midi = Midi(1, tempo=120)
midi.seq_notes(random_melody, track=0)
# Сохраняем MIDI файл
midi.write("random_melody.mid")
print("Случайная мелодия была создана и сохранена в файл 'random_melody.mid'.")
Этот скрипт генерирует случайную мелодию в диапазоне одной октавы (C4-C5) в C мажорной гамме и сохраняет её в MIDI файле. Вы можете воспроизвести этот файл с помощью любого стандартного MIDI плеера.
Такой подход может быть начальной точкой для создания более сложной системы генерации музыки, которая учитывает гармонии, ритм и музыкальные формы.
Подпишись 👉🏻 @KodduuPython 🤖
Давайте попробуем создать скрипт на Python, который может выступать в качестве базового "искусственного интеллекта" для общения. Он будет использовать простую систему правил для определения ответов на входные данные пользователя.
Этот скрипт просто проверяет, содержит ли ввод пользователя определенные ключевые слова, и отвечает соответствующими фразами из словаря. Если скрипт не находит подходящего ответа, он говорит, что не понимает ввод.
Это довольно примитивная реализация, но она демонстрирует основной принцип создания скриптов для общения, который можно усложнить, используя более продвинутые методы обработки естественного языка и машинного обучения.
Подпишись 👉🏻 @KodduuPython 🤖
import random
# Словарь соответствий ключевых слов и ответов
keywords_to_responses = {
"привет": ["Привет!", "Здравствуй!", "Доброго времени суток!"],
"как дела": ["Отлично, спасибо!", "Все хорошо, как у тебя?", "Замечательно, а у тебя?"],
"пока": ["До свидания!", "Пока!", "Буду скучать!"],
}
# Функция для получения ответа на основе ввода пользователя
def get_response(user_input):
for keyword, responses in keywords_to_responses.items():
if keyword in user_input.lower():
return random.choice(responses)
return "Извините, я вас не понял."
# Главный цикл общения
while True:
user_input = input("Вы: ")
response = get_response(user_input)
print(f"ИИ: {response}")
if user_input.lower() in ["пока", "до свидания"]:
break
Этот скрипт просто проверяет, содержит ли ввод пользователя определенные ключевые слова, и отвечает соответствующими фразами из словаря. Если скрипт не находит подходящего ответа, он говорит, что не понимает ввод.
Это довольно примитивная реализация, но она демонстрирует основной принцип создания скриптов для общения, который можно усложнить, используя более продвинутые методы обработки естественного языка и машинного обучения.
Подпишись 👉🏻 @KodduuPython 🤖
Попробуем создать скрипт, который будет использовать рекурсию для рисования фрактала. Мы сделаем "Дерево Пифагора", которое является классическим фракталом и хорошим примером рекурсивной графики.
Для этого нам понадобится библиотека
Когда вы запустите этот скрипт, вы увидите, как Turtle рисует фрактальное "Дерево Пифагора" в новом окне. Этот пример демонстрирует рекурсивную природу фракталов и как можно использовать рекурсию для создания сложных графических изображений с использованием относительно простого кода.
Обратите внимание, что вы можете изменять параметры, такие как начальная длина ветви и минимальная длина, до которой дерево будет строиться, чтобы увидеть, как это влияет на окончательное изображение фрактала.
Подпишись 👉🏻 @KodduuPython 🤖
Для этого нам понадобится библиотека
turtle для рисования, которая является стандартной в Python и не требует установки дополнительных модулей.import turtle
import math
# Установка параметров черепахи
turtle.speed('fastest')
turtle.left(90)
turtle.penup()
turtle.goto(0, -200)
turtle.pendown()
# Функция рисования дерева Пифагора
def draw_pythagoras_tree(length, min_length=10):
if length < min_length:
return
turtle.forward(length)
turtle.left(45)
draw_pythagoras_tree(length / math.sqrt(2), min_length)
turtle.right(90)
turtle.forward(length / math.sqrt(2))
draw_pythagoras_tree(length / math.sqrt(2), min_length)
turtle.left(45)
turtle.backward(length)
# Вызов функции с начальной длиной ветви
draw_pythagoras_tree(100)
# Завершаем рисование
turtle.done()
Когда вы запустите этот скрипт, вы увидите, как Turtle рисует фрактальное "Дерево Пифагора" в новом окне. Этот пример демонстрирует рекурсивную природу фракталов и как можно использовать рекурсию для создания сложных графических изображений с использованием относительно простого кода.
Обратите внимание, что вы можете изменять параметры, такие как начальная длина ветви и минимальная длина, до которой дерево будет строиться, чтобы увидеть, как это влияет на окончательное изображение фрактала.
Подпишись 👉🏻 @KodduuPython 🤖
Давайте попробуем создать скрипт, который генерирует лабиринт и затем решает его. Мы будем использовать алгоритм генерации лабиринта на основе объединения случайных ячеек и алгоритм поиска пути A* для его решения.
Перед запуском скрипта установите необходимую библиотеку
Вот сам скрипт:
Этот скрипт делает следующее:
1. Генерирует случайный лабиринт с препятствиями.
2. Ищет путь от верхнего левого угла (0, 0) до нижнего правого (size-1, size-1) с помощью алгоритма A*.
3. Выводит лабиринт и найденный путь на экран.
Запустите скрипт, и вы увидите в терминале отображение лабиринта и путь, найденный алгоритмом A*. Символ "·" будет указывать пройденный путь через лабиринт.
Подпишись 👉🏻 @KodduuPython 🤖
Перед запуском скрипта установите необходимую библиотеку
numpy:pip install numpy
Вот сам скрипт:
import numpy as np
from queue import PriorityQueue
# Инициализация лабиринта
def init_maze(size=10):
maze = np.random.choice([0, 1], size=(size, size), p=[0.2, 0.8])
start, end = (0, 0), (size - 1, size - 1)
maze[start], maze[end] = 0, 0
return maze, start, end
# Функция для печати лабиринта
def print_maze(maze, path=[]):
for r, row in enumerate(maze):
for c, val in enumerate(row):
if (r, c) in path:
print("·", end=" ")
else:
print("█" if val == 1 else " ", end=" ")
print()
# Алгоритм A*
def a_star(maze, start, end):
size = maze.shape[0]
queue = PriorityQueue()
queue.put((0, start))
costs = {start: 0}
prev = {start: None}
visited = set()
while not queue.empty():
cost, current = queue.get()
visited.add(current)
if current == end:
break
for direction in [(0, 1), (1, 0), (0, -1), (-1, 0)]: # Вправо, вниз, влево, вверх
row, col = current[0] + direction[0], current[1] + direction[1]
next_cell = (row, col)
if 0 <= row < size and 0 <= col < size and maze[row][col] == 0:
new_cost = costs[current] + 1
if next_cell not in costs or new_cost < costs[next_cell]:
costs[next_cell] = new_cost
priority = new_cost + abs(end[0] - row) + abs(end[1] - col)
queue.put((priority, next_cell))
prev[next_cell] = current
# Восстанавливаем путь
cell, path = end, []
while prev[cell]:
path.append(cell)
cell = prev[cell]
path.append(start)
path.reverse()
return path
# Генерация и решение лабиринта
maze, start, end = init_maze(10)
path = a_star(maze, start, end)
print_maze(maze, path)
Этот скрипт делает следующее:
1. Генерирует случайный лабиринт с препятствиями.
2. Ищет путь от верхнего левого угла (0, 0) до нижнего правого (size-1, size-1) с помощью алгоритма A*.
3. Выводит лабиринт и найденный путь на экран.
Запустите скрипт, и вы увидите в терминале отображение лабиринта и путь, найденный алгоритмом A*. Символ "·" будет указывать пройденный путь через лабиринт.
Подпишись 👉🏻 @KodduuPython 🤖
Попробуем что-то интерактивное и визуально приятное: скрипт, который рисует спиральные узоры. Для этого мы будем использовать библиотеку
Запустив этот скрипт, вы увидите, как черепаха рисует спиральный узор, постепенно изменяя цвета радуги. В функции
Функция
Вы можете изменять параметры для получения различных видов спиралей и узоров.
Подпишись 👉🏻 @KodduuPython 🤖
turtle. Этот скрипт создаст окно, где будет нарисован красивый узор в виде спирали, изменяя цвета в процессе рисования.import turtle
import math
import colorsys
def draw_spiral(t, length, angle, increase, colors, width):
for i in range(length):
color = colors[i % len(colors)]
t.pencolor(color)
t.forward(i * increase)
t.right(angle)
t.width(width)
def get_color_gradient(length, saturation=1, lightness=0.5):
return [colorsys.hls_to_rgb(h / length, lightness, saturation) for h in range(length)]
# Настройки для черепахи
window = turtle.Screen()
window.bgcolor("black")
spiral_turtle = turtle.Turtle()
spiral_turtle.speed(0) # Максимальная скорость рисования
# Генерация градиента цветов
colors = get_color_gradient(360, 1, 0.5)
# Рисуем спираль
draw_spiral(spiral_turtle, 100, 120, 0.1, colors, 2)
# Завершаем рисование
window.mainloop()
Запустив этот скрипт, вы увидите, как черепаха рисует спиральный узор, постепенно изменяя цвета радуги. В функции
draw_spiral, length задает количество шагов в спирали, angle определяет угол поворота, increase влияет на увеличение длины шага, colors содержит список цветов, а width устанавливает толщину линии.Функция
get_color_gradient генерирует равномерный список цветов в HLS формате (оттенок, светлость, насыщенность), который затем используется для установки цвета линии на каждом шаге рисования.Вы можете изменять параметры для получения различных видов спиралей и узоров.
Подпишись 👉🏻 @KodduuPython 🤖
Что такое ООП?
Представьте, что у вас есть много разных игрушек. Каждая игрушка уникальна: одна может быть машинкой, другая - самолетом. В программировании такие игрушки называют "объектами", а ООП помогает нам их создавать и управлять ими.
Примеры:
- Классы - это как рецепты или инструкции для создания игрушек. Если у вас есть инструкция для машинки, вы можете сделать много разных машинок.
- Объекты - это сами игрушки, которые вы сделали по инструкции. Каждая машинка - это отдельный объект.
- Атрибуты - это детали ваших игрушек. У машинки могут быть цвет, размер, количество колес.
- Методы - это действия, которые могут выполнять ваши игрушки. Например, машинка может ехать.
Почему ООП важно?
Используя ООП, мы можем организовать наш код так же, как если бы мы организовывали игрушки. Это делает код более понятным и легким для изменений.
Примеры ООП в Python
### Класс "Котик":
-
-
### Создание объекта "Котик":
А что если без ООП?
Без использования ООП, нам пришлось бы каждый раз заново писать инструкцию для каждой игрушки. Это как если бы вы каждый раз, когда хотите сделать машинку, придумывали её с нуля, вместо того чтобы использовать уже готовую инструкцию. Это занимает больше времени и усилий.
Вариант без ООП:
Представьте, что у вас есть много разных игрушек. Каждая игрушка уникальна: одна может быть машинкой, другая - самолетом. В программировании такие игрушки называют "объектами", а ООП помогает нам их создавать и управлять ими.
Примеры:
- Классы - это как рецепты или инструкции для создания игрушек. Если у вас есть инструкция для машинки, вы можете сделать много разных машинок.
- Объекты - это сами игрушки, которые вы сделали по инструкции. Каждая машинка - это отдельный объект.
- Атрибуты - это детали ваших игрушек. У машинки могут быть цвет, размер, количество колес.
- Методы - это действия, которые могут выполнять ваши игрушки. Например, машинка может ехать.
Почему ООП важно?
Используя ООП, мы можем организовать наш код так же, как если бы мы организовывали игрушки. Это делает код более понятным и легким для изменений.
Примеры ООП в Python
### Класс "Котик":
class Cat:-
def __init__(self, name):
self.name = name
def meow(self):
return f"{self.name} говорит мяу!"
Cat — это класс.-
name — это атрибут, который говорит нам имя котика.-
meow — это метод, который заставляет котика мяукать.### Создание объекта "Котик":
my_cat = Cat("Барсик")
print(my_cat.meow()) # Барсик говорит мяу!
my_cat — это объект, который мы создали по классу Cat.А что если без ООП?
Без использования ООП, нам пришлось бы каждый раз заново писать инструкцию для каждой игрушки. Это как если бы вы каждый раз, когда хотите сделать машинку, придумывали её с нуля, вместо того чтобы использовать уже готовую инструкцию. Это занимает больше времени и усилий.
Вариант без ООП:
def create_cat(name):Подпишись 👉🏻 @KodduuPython 🤖
return {"name": name}
def cat_meow(cat):
return f"{cat['name']} говорит мяу!"
my_cat = create_cat("Барсик")
print(cat_meow(my_cat))
my_cat2 = create_cat("Маруся")
print(cat_meow(my_cat))
👍2
ООП на примере кулинарии 🍰
Сегодня мы познакомимся с увлекательным миром программирования на Python через призму кулинарии, а именно через Объектно-Ориентированное Программирование (ООП). Давайте узнаем, как это может упростить нашу жизнь в кухне.
Что такое ООП?
Представьте, что у вас есть книга с рецептами. Каждый рецепт - это инструкция для приготовления определенного блюда. В программировании, эти рецепты и блюда - это "классы" и "объекты".
### Примеры:
- Классы - это как рецепты. Например, у вас есть рецепт пирога.
- Объекты - это конкретные блюда, приготовленные по рецептам. Из рецепта пирога можно приготовить множество разных пирогов.
- Атрибуты - это ингредиенты и характеристики блюда, например, тип начинки или размер пирога.
- Методы - это действия, которые мы выполняем с блюдами, например, выпекать пирог.
Почему ООП важно?
Использование ООП в программировании - это как иметь набор проверенных рецептов, которые можно легко адаптировать и использовать снова и снова. Это делает процесс готовки (или написания кода) более организованным и эффективным.
Примеры ООП в Python
### Класс "Пирог":
-
-
-
### Создание объектов "Пирог":
А что если без ООП?
Без ООП нам пришлось бы каждый раз заново описывать каждый шаг приготовления пирога, не имея универсального рецепта. Это как если бы вы каждый раз, когда хотите приготовить пирог, начинали бы с самого начала, без готового списка ингредиентов и инструкций.
### Без ООП:
В этом подходе мы используем функции для создания и выпечки пирогов, но у нас нет удобной структуры, которая позволяет легко переиспользовать и адаптировать рецепты.
Заключение
ООП в Python - это как иметь хорошо организованную кулинарную книгу с рецептами, которые можно легко адаптировать под разные вкусы и предпочтения. Это делает процесс готовки более приятным и менее хаотичным. Попробуйте и убедитесь, насколько это удобно! 🍰🍽🐍
Подпишись 👉🏻 @KodduuPython 🤖
Сегодня мы познакомимся с увлекательным миром программирования на Python через призму кулинарии, а именно через Объектно-Ориентированное Программирование (ООП). Давайте узнаем, как это может упростить нашу жизнь в кухне.
Что такое ООП?
Представьте, что у вас есть книга с рецептами. Каждый рецепт - это инструкция для приготовления определенного блюда. В программировании, эти рецепты и блюда - это "классы" и "объекты".
### Примеры:
- Классы - это как рецепты. Например, у вас есть рецепт пирога.
- Объекты - это конкретные блюда, приготовленные по рецептам. Из рецепта пирога можно приготовить множество разных пирогов.
- Атрибуты - это ингредиенты и характеристики блюда, например, тип начинки или размер пирога.
- Методы - это действия, которые мы выполняем с блюдами, например, выпекать пирог.
Почему ООП важно?
Использование ООП в программировании - это как иметь набор проверенных рецептов, которые можно легко адаптировать и использовать снова и снова. Это делает процесс готовки (или написания кода) более организованным и эффективным.
Примеры ООП в Python
### Класс "Пирог":
class Pie:
def __init__(self, filling, size):
self.filling = filling
self.size = size
def bake(self):
return f"Выпекаем {self.size} пирог с {self.filling} начинкой."
-
Pie — это класс (рецепт).-
filling и size — это атрибуты (начинка и размер).-
bake — это метод (действие выпекания).### Создание объектов "Пирог":
apple_pie = Pie("яблочной", "большой")
cherry_pie = Pie("вишневой", "средний")
print(apple_pie.bake()) # Выпекаем большой пирог с яблочной начинкой.
print(cherry_pie.bake()) # Выпекаем средний пирог с вишневой начинкой.А что если без ООП?
Без ООП нам пришлось бы каждый раз заново описывать каждый шаг приготовления пирога, не имея универсального рецепта. Это как если бы вы каждый раз, когда хотите приготовить пирог, начинали бы с самого начала, без готового списка ингредиентов и инструкций.
### Без ООП:
def create_pie(filling, size):
return {"filling": filling, "size": size}
def bake_pie(pie):
return f"Выпекаем {pie['size']} пирог с {pie['filling']} начинкой."
apple_pie = create_pie("яблочной", "большой")
cherry_pie = create_pie("вишневой", "средний")
print(bake_pie(apple_pie))
print(bake_pie(cherry_pie))
В этом подходе мы используем функции для создания и выпечки пирогов, но у нас нет удобной структуры, которая позволяет легко переиспользовать и адаптировать рецепты.
Заключение
ООП в Python - это как иметь хорошо организованную кулинарную книгу с рецептами, которые можно легко адаптировать под разные вкусы и предпочтения. Это делает процесс готовки более приятным и менее хаотичным. Попробуйте и убедитесь, насколько это удобно! 🍰🍽🐍
Подпишись 👉🏻 @KodduuPython 🤖
Давайте рассмотрим пример неоптимального кода на Python и его оптимальный вариант.
Неоптимальный код:
Оптимальный код:
В чем разница?
1. Читаемость кода: Оптимальный код использует list comprehension, что делает код более читаемым и компактным. Вместо нескольких строк с циклом for и методом append, в оптимальном коде всё это сделано в одной строке.
2. Производительность: List comprehension в Python обычно работает быстрее, чем соответствующий цикл for с append из-за внутренней оптимизации Python. Это особенно заметно при работе с большими списками.
3. Современные стандарты: Использование list comprehension является более "питоническим" способом работы со списками и рекомендуется как более элегантный и эффективный стиль программирования на Python.
Итак, оптимальный код лучше тем, что он более читаем, эффективен и соответствует современным стандартам написания кода на Python.
Подпишись 👉🏻 @KodduuPython 🤖
Неоптимальный код:
numbers = [1, 2, 3, 4, 5]
squares = []
for number in numbers:
squares.append(number * number)
print(squares)
Оптимальный код:
numbers = [1, 2, 3, 4, 5]
squares = [number * number for number in numbers]
print(squares)
В чем разница?
1. Читаемость кода: Оптимальный код использует list comprehension, что делает код более читаемым и компактным. Вместо нескольких строк с циклом for и методом append, в оптимальном коде всё это сделано в одной строке.
2. Производительность: List comprehension в Python обычно работает быстрее, чем соответствующий цикл for с append из-за внутренней оптимизации Python. Это особенно заметно при работе с большими списками.
3. Современные стандарты: Использование list comprehension является более "питоническим" способом работы со списками и рекомендуется как более элегантный и эффективный стиль программирования на Python.
Итак, оптимальный код лучше тем, что он более читаем, эффективен и соответствует современным стандартам написания кода на Python.
Подпишись 👉🏻 @KodduuPython 🤖
Наш первый платный курс по Python на stepik на основе топ 50 примеров кода с задачами и ДЗ.
И скидка в 2000 руб 👀 только для читателей канала по линку https://stepik.org/a/185238/pay?promo=dcfeb683c217284e до 07.12.2023 включительно!
Подпишись 👉🏻 @KodduuPython 🤖
И скидка в 2000 руб 👀 только для читателей канала по линку https://stepik.org/a/185238/pay?promo=dcfeb683c217284e до 07.12.2023 включительно!
Подпишись 👉🏻 @KodduuPython 🤖
Stepik: online education
Python в нескучных примерах (50)
Для того чтобы научится программировать - нужно много программировать, совершать ошибки, править код, узнавать как можно сделать код лучше, делать код лучше, и продолжать программировать. В этом курсе нет воды, только большое количество примеров на основании…
🎉2
Давайте рассмотрим ещё один пример неоптимального кода на Python и его оптимальную версию.
Неоптимальный код:
1. Читаемость: Оптимальный код снова использует list comprehension, что делает функцию более лаконичной и легко читаемой. Мы уменьшили количество строк и упростили структуру кода.
2. Производительность: Как и в предыдущем примере, list comprehension обычно работает быстрее, чем эквивалентный цикл for с условием и append. Особенно это становится заметным при обработке больших коллекций данных.
3. Простота и сокращение кода: Оптимальный код не только упрощает чтение и поддержку кода, но также делает функцию более универсальной и легко адаптируемой для разных задач.
В этом примере оптимизация заключается в том, что код становится более компактным, читаемым и эффективным за счет использования list comprehension вместо традиционного цикла for с условным оператором.
Подпишись 👉🏻 @KodduuPython 🤖
Неоптимальный код:
def find_even_numbers(numbers):Оптимальный код:
even_numbers = []
for number in numbers:
if number % 2 == 0:
even_numbers.append(number)
return even_numbers
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(find_even_numbers(numbers))
def find_even_numbers(numbers):В чем разница?
return [number for number in numbers if number % 2 == 0]
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(find_even_numbers(numbers))
1. Читаемость: Оптимальный код снова использует list comprehension, что делает функцию более лаконичной и легко читаемой. Мы уменьшили количество строк и упростили структуру кода.
2. Производительность: Как и в предыдущем примере, list comprehension обычно работает быстрее, чем эквивалентный цикл for с условием и append. Особенно это становится заметным при обработке больших коллекций данных.
3. Простота и сокращение кода: Оптимальный код не только упрощает чтение и поддержку кода, но также делает функцию более универсальной и легко адаптируемой для разных задач.
В этом примере оптимизация заключается в том, что код становится более компактным, читаемым и эффективным за счет использования list comprehension вместо традиционного цикла for с условным оператором.
Подпишись 👉🏻 @KodduuPython 🤖
Давайте рассмотрим пример из другой области, который демонстрирует различие между неоптимальным и оптимальным кодом, не связанный с обработкой списков.
Неоптимальный код: Обработка строк
1. Читаемость и простота: В оптимальном коде используется форматирование строк с помощью f-строк (formatted string literals), что делает код более лаконичным и читаемым. Он избавляет от необходимости вручную проверять и форматировать каждую часть даты.
2. Сокращение кода: Оптимальный вариант уменьшает количество строк кода, делая его более компактным и легким для понимания. Всё, что касается форматирования даты, выполняется в одной строке.
3. Предотвращение ошибок: В неоптимальном коде легче допустить ошибку при ручном форматировании. Оптимальный подход с f-строками уменьшает вероятность таких ошибок.
В этом примере оптимизация достигается за счет использования встроенных возможностей Python для форматирования строк, делая код более чистым, кратким и устойчивым к ошибкам.
Подпишись 👉🏻 @KodduuPython 🤖
Неоптимальный код: Обработка строк
def format_date(year, month, day):Оптимальный код: Обработка строк
formatted_year = str(year)
if month < 10:
formatted_month = '0' + str(month)
else:
formatted_month = str(month)
if day < 10:
formatted_day = '0' + str(day)
else:
formatted_day = str(day)
return formatted_year + '-' + formatted_month + '-' + formatted_day
print(format_date(2023, 3, 7))
def format_date(year, month, day):В чем разница?
return f"{year:04d}-{month:02d}-{day:02d}"
print(format_date(2023, 3, 7))
1. Читаемость и простота: В оптимальном коде используется форматирование строк с помощью f-строк (formatted string literals), что делает код более лаконичным и читаемым. Он избавляет от необходимости вручную проверять и форматировать каждую часть даты.
2. Сокращение кода: Оптимальный вариант уменьшает количество строк кода, делая его более компактным и легким для понимания. Всё, что касается форматирования даты, выполняется в одной строке.
3. Предотвращение ошибок: В неоптимальном коде легче допустить ошибку при ручном форматировании. Оптимальный подход с f-строками уменьшает вероятность таких ошибок.
В этом примере оптимизация достигается за счет использования встроенных возможностей Python для форматирования строк, делая код более чистым, кратким и устойчивым к ошибкам.
Подпишись 👉🏻 @KodduuPython 🤖
Давайте рассмотрим ещё один пример оптимизации кода, на этот раз в контексте работы с файлами.
Неоптимальный код: Чтение файла
Оптимальный код: Чтение файла
В чем разница?
1. Управление ресурсами: В оптимальном коде используется контекстный менеджер
2. Эффективность: В оптимальном варианте файл читается построчно, а не целиком, что экономит память, особенно при работе с большими файлами. К тому же, преобразование строк выполняется сразу в процессе чтения.
3. Читаемость и сокращение кода: Использование list comprehension вместо явного цикла for делает код более лаконичным и читаемым.
Этот пример демонстрирует, как можно улучшить работу с файлами, используя более безопасные и эффективные подходы в Python, такие как контекстные менеджеры и list comprehension.
Подпишись 👉🏻 @KodduuPython 🤖
Неоптимальный код: Чтение файла
file = open('data.txt', 'r')
lines = file.readlines()
file.close()
processed_lines = []
for line in lines:
processed_lines.append(line.strip())
print(processed_lines)Оптимальный код: Чтение файла
with open('data.txt', 'r') as file:
processed_lines = [line.strip() for line in file]
print(processed_lines)В чем разница?
1. Управление ресурсами: В оптимальном коде используется контекстный менеджер
with для работы с файлами. Это гарантирует, что файл будет корректно закрыт после завершения блока кода, даже если произойдет ошибка. В неоптимальном коде файл закрывается вручную, что может привести к ошибкам, например, если чтение файла вызовет исключение, файл не будет закрыт.2. Эффективность: В оптимальном варианте файл читается построчно, а не целиком, что экономит память, особенно при работе с большими файлами. К тому же, преобразование строк выполняется сразу в процессе чтения.
3. Читаемость и сокращение кода: Использование list comprehension вместо явного цикла for делает код более лаконичным и читаемым.
Этот пример демонстрирует, как можно улучшить работу с файлами, используя более безопасные и эффективные подходы в Python, такие как контекстные менеджеры и list comprehension.
Подпишись 👉🏻 @KodduuPython 🤖