Python Hub - сборище Питонистов
1.71K subscribers
657 photos
1 video
37 files
276 links
Уголок счастья для любого питониста.

Сотрудничество или заказы: @leshunist

https://shcoder.dev - студия разработки ShcoderDevelopment

https://t.me/pythonhub_chat - чат
Download Telegram
Что выдаст код выше?
Anonymous Quiz
11%
1
8%
0
18%
5
18%
7
14%
6
21%
Error
11%
Не знаю
🤡8👍4🤔2
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

Вызываем функцию rec, передавая туда значение 3.
Внутри функции идет проверка, где мы в return'e возвращаем результат n + новый вызов функции rec(n-1) —> rec(2)

Операция повторяется и мы возвращаем результат n + rec(n-1) —> n + rec(1)

Заходим заново в функцию и возвращаем n + rec(0) —> теперь после вызова сработает return 1, т.к. if проверяет что n==0.

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

n + rec(0) —> 1 + 1 —> 2
n + rec(1) —> 2 + 2 —> 4
n + rec(2) —> 3 + 4 —> 7
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Освещение модуля 'this' в Python


Модуль 'this' в Python - это встроенный модуль, который, когда импортируется, автоматически выводит 'The Zen of Python'. Это, по сути, набор правил и принципов, на которых строится разработка на Python. Они служат напоминанием о том, какой должна быть идеальная программа на Python, и хотя они не являются строгими правилами, они широко применяются и уважаются в сообществе Python.

Пример:

import this


После выполнения этого кода, вы увидите 'The Zen of Python' на вашем экране.

Попробуйте сами❗️
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🌴 Создание бинарного дерева в Python


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

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

Пример кода:

class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data


➡️ Создание бинарного дерева

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

Пример кода:

root = Node(1)

root.left = Node(2)
root.right = Node(3)

root.left.left = Node(4)
root.left.right = Node(5)


➡️ Обход бинарного дерева

Обход - это процесс посещения каждого узла в дереве. Существуют различные методы обхода, включая прямой (Preorder), симметричный (Inorder) и обратный (Postorder) обход. В Python мы можем реализовать эти методы с помощью рекурсии или стеков.

Пример кода для прямого обхода:

def preorder_traversal(root):
if root:
print(root.data)
preorder_traversal(root.left)
preorder_traversal(root.right)
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍4
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

Немного затянулось, сорри.
Как вы знаете (или не знаете, тогда знайте) метод .pop удаляет элемент по индексу.
Т.е. если бы мы написали, my_list.pop(1), то элемент JavaScript бы удалился из списка.

Но а что, если мы не прокинули индекс? Тогда выбирается последний элемент. В нашем случае - c#

Но почему ответ - это не список без последнего элемента.

Все дело в том, что мы принтуем не список, а результат выполнения функции .pop. В свою очередь, функция .pop возвращает удаленный элемент (последний элемент) (( C# ))
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
💡 Использование модуля difflib в Python


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

➡️ Функция get_close_matches

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

Например:

import difflib

words = ['кот', 'собака', 'кит', 'слон']
difflib.get_close_matches('кот', words)


В этом примере функция возвращает: ['кот', 'кит'].

➡️ Функция ndiff

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

Например:

import difflib

str1 = "кот"
str2 = "кит"
diff = difflib.ndiff(str1, str2)
print('\\n'.join(diff))


В этом примере функция выводит:

  к
- о
+ и
т


➡️ Функция SequenceMatcher

Функция SequenceMatcher() является более общей и мощной функцией, чем ndiff(). Она позволяет сравнивать любые две последовательности и определять степень их сходства.

Например:

import difflib

str1 = "кот"
str2 = "кит"
match = difflib.SequenceMatcher(None, str1, str2)
print(match.ratio())


В этом примере функция возвращает: 0.6666666666666666, что означает, что строки совпадают на 66.67%.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
Методы .isnumeric() и .isalpha() в Python


➡️ Метод .isnumeric()

Метод .isnumeric() в Python используется для проверки, содержит ли строка только числа. Если все символы в строке являются числами, этот метод возвращает значение True. В противном случае возвращается False. Этот метод очень полезен при валидации ввода данных, когда вы хотите убедиться, что пользователь ввел только числа.

str1 = '12345'
print(str1.isnumeric()) # Вывод: True

str2 = '12345abc'
print(str2.isnumeric()) # Вывод: False


➡️ Метод .isalpha()

Метод .isalpha() в Python, с другой стороны, используется для проверки, содержит ли строка только буквы. Если все символы в строке являются буквами, этот метод возвращает значение True. В противном случае возвращается False. Этот метод также полезен при валидации ввода данных, когда вы хотите убедиться, что пользователь ввел только буквы.

str3 = 'abc'
print(str3.isalpha()) # Вывод: True

str4 = 'abc123'
print(str4.isalpha()) # Вывод: False
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🌴 Введение в двоичное дерево поиска (BST) с примерами на Python


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

➡️ Пример BST на Python

class Node:
def __init__(self, key):
self.left = None
self.right = None
self.val = key

def insert(root, key):
if root is None:
return Node(key)
else:
if root.val < key:
root.right = insert(root.right, key)
else:
root.left = insert(root.left, key)
return root

def inorder(root):
if root:
inorder(root.left)
print(root.val),
inorder(root.right)

r = Node(50)
r = insert(r, 30)
r = insert(r, 20)
r = insert(r, 40)
r = insert(r, 70)
r = insert(r, 60)
r = insert(r, 80)

inorder(r)


В этом примере мы создаем BST с помощью Python. Мы определяем класс Node, который представляет узел в BST. Затем мы определяем функции для вставки нового узла и для обхода BST.

➡️ Преимущества и недостатки BST

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


То есть, по сути, это сортированное дерево, поиск в котором легко выполнить, из-за того, что оно упорядочено.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🌀 Создать 2 одновременно работающих цикла в Python

➡️ Многопоточность в Python

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

➡️ Как создать 2 одновременных цикла

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

import threading
import time

def loop1():
for i in range(10):
print('Loop 1:', i)
time.sleep(1)

def loop2():
for i in range(10):
print('Loop 2:', i)
time.sleep(1)

thread1 = threading.Thread(target=loop1)
thread2 = threading.Thread(target=loop2)

thread1.start()
thread2.start()

thread1.join()
thread2.join()import threading
import time

def loop1():
for i in range(10):
print('Loop 1:', i)
time.sleep(1)

def loop2():
for i in range(10):
print('Loop 2:', i)
time.sleep(1)

thread1 = threading.Thread(target=loop1)
thread2 = threading.Thread(target=loop2)

thread1.start()
thread2.start()

thread1.join()
thread2.join()


В этом примере два цикла выполняются одновременно, каждый в своем собственном потоке.


Попробуйте скопировать и проверить у себя самостоятельно!👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

Функция getsizeof() модуля sys возвращает размер объекта object в байтах. Объект может быть любым типом объекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
😮 6 простых советов по написанию чистого кода

➡️ 1. Пишите читабельный код

➡️ 2. Используйте понятные слова для обозначения переменных, функций и методов

➡️ 3. Пишите код так, чтобы любая функция или метод выполняли только одну задачу

➡️ 4. Используйте комментарии в качестве пояснений

➡️ 5. Будьте последовательны

➡️ 6. Регулярно проверяйте свой код

А какие принципы используете вы? Какие считаете занудством?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51