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
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

Создали объект класса. В поле b (a.b) лежит число 3. В поле c, объекта a, мы создаем значение 5.
// - операция целочисленного деления. 5 // 3 —> 1 (3 помещается в 5 целиком только 1 раз)

Ответ: 1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👨‍💻1
🟢 Сортировка слиянием в Python

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

➡️ Принцип работы

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

➡️ Реализация в Python

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

def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left_half = merge_sort(arr[:mid])
right_half = merge_sort(arr[mid:])
return merge(left_half, right_half)

def merge(left, right):
merged = []
left_index = 0
right_index = 0
while left_index < len(left) and right_index < len(right):
if left[left_index] <= right[right_index]:
merged.append(left[left_index])
left_index += 1
else:
merged.append(right[right_index])
right_index += 1
merged += left[left_index:]
merged += right[right_index:]
return merged


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

Сортировка слиянием имеет несколько ключевых преимуществ. Во-первых, она эффективна, с временем выполнения O(n log n). Во-вторых, она стабильна, что означает, что она сохраняет исходный порядок равных элементов. Однако у нее есть и недостатки. Она требует дополнительное пространство для хранения промежуточных результатов, что может быть проблемой для больших данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🎲 Рандомен ли random.randint в Python? Как он работает под капотом?


Одной из наиболее часто используемых функций для генерации случайных чисел является функция random.randint(). Но насколько случайными являются числа, которые генерирует эта функция?

➡️ Рандомен ли random.randint?

С точки зрения программирования, идеальной случайности не существует. Даже функция random.randint() в Python генерирует так называемые псевдослучайные числа. Это значит, что хотя числа кажутся случайными, они на самом деле генерируются с использованием определенного алгоритма, который может повторяться при определенных условиях.

➡️ Как работает random.randint?

Функция random.randint() использует алгоритм Мерсенна Твистер, который является одним из наиболее широко используемых алгоритмов для генерации псевдослучайных чисел. Он основан на математических принципах и генерирует последовательности чисел, которые в действительности предсказуемы, если известно достаточно много предыдущих чисел в последовательности.

➡️ Влияет ли seed на random.randint?

Значение seed играет важную роль в генерации псевдослучайных чисел в Python. Если вы используете функцию random.seed() с определенным значением перед вызовом random.randint(), вы будете получать одну и ту же последовательность "случайных" чисел каждый раз, когда вы запускаете свой код. Это может быть полезно для отладки и воспроизводимости результатов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👨‍💻1
©️ Зачем создавать копию объекта в Python?


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

➡️ Поверхностное и глубокое копирование

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

➡️ Избегание неожиданных побочных эффектов

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

➡️ Повышение производительности кода

Создание копий объектов может помочь улучшить производительность вашего кода. Когда вы работаете с большими объектами или структурами данных, изменение оригинала может быть ресурсоемким процессом. Создание копии и работа с ней, вместо оригинала, может сэкономить время и ресурсы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Шапки заключённых

Логическая задача от Google😳.
Четверо заключенных были арестованы, но тюрьма переполнена, и тюремщику некуда их посадить. Он решает дать им головоломку. Если они справятся, то выйдут на свободу, а если не справятся, то будут казнены.

Тюремщик выстроил трех человек в линию. Четвертого он посадил за ширму. Каждому заключённому он дал по одной шапке.

Тюремщик объяснил, что есть две черные и две белые шапочки, и каждый заключенный носит одну из них. При этом каждый из заключенных должен видеть только шапки тех, кто находится перед ним, но не собственные шапки или не шапки тех, кто находится позади. Четвертый человек за ширмой не может видеть шапки других заключённых, а они не видят, какая шапка на его голове. Общаться заключённым тоже нельзя.

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

Как заключённым избежать казни?

Стоит ли кидать логические задачи подобного плана?

p.s. ответ дам скоро...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Python Hub - сборище Питонистов
🤔 Шапки заключённых Логическая задача от Google😳. Четверо заключенных были арестованы, но тюрьма переполнена, и тюремщику некуда их посадить. Он решает дать им головоломку. Если они справятся, то выйдут на свободу, а если не справятся, то будут казнены.…
💡 Решение

Заключенные A и B по сути изолированы. У них нет информации, которая помогла бы им дать ответ. Заключенные C и D понимают это, поэтому решение задачи лежит на них.

Заключенный D видит шляпы заключенных B и C. Если бы у B и C были шляпы одного цвета (например, чёрного), то D догадался бы, что на его голове точно должна быть шляпа другого цвета, то есть белого.

Когда время почти истекло, С понимает, что D не может дать ответ. Это значит, что цвет его шляпы отличается от цвета шляпы B, иначе D сразу ответил бы. Поэтому С делает вывод, что на нём черная шляпа, так как он видит белую шляпу В.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😱1
Картинки из видео, разбираем! ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁1
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

Если мы указываем в срезе, что мы идем от большего индекса к меньшему, то 3-им параметром должны указать шаг. (по умолчанию он равен 1. А от 2 до 1 с шагом в +1 мы никак не доберемся).
В данном примере мы получим пустоту. (ничего).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
💬 Символ перехода на следующую строку в Python и другие специальные символы


➡️ Символ новой строки в Python

В Python символ новой строки представлен как '\n'. Он используется для обозначения конца строки текста и начала новой. Когда интерпретатор Python встречает символ новой строки в строке, он понимает, что нужно перенести строку и начать новую. Например:

print("Привет\nМир")


Этот код напечатает:

Привет
Мир


Это происходит потому, что символ '\n' сигнализирует интерпретатору о начале новой строки после печати "Привет".

➡️ Другие специальные символы в Python

Помимо символа новой строки, Python также поддерживает различные другие специальные символы, которые часто используются с оператором print для форматирования вывода. Например, символ '\t' представляет собой табуляцию, создающую большое пространство в выводе.

print("Привет\tМир")


Этот код напечатает:

Привет   Мир


➡️ Экранированные последовательности в Python

Экранированные последовательности в Python начинаются с обратной косой черты (\) и следуют за символом, который вы хотите вставить. Python интерпретирует экранированную последовательность как один символ. Помимо '\n', '\t', в Python есть несколько других экранированных последовательностей, таких как \' для одинарной кавычки, \" для двойной кавычки и \\ для самой обратной косой черты.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Отмеряем нужное количество воды

Эту задачу могут дать на собеседовании.

Представьте, что у вас есть две пустых бутыли для воды объемом в 3 и 5 галлонов. Как отмерить ровно 4 галлона воды?
Запас воды для решения не ограничен.

Прошлый раз задача вам понравилась!

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

p.s. ответ дам скоро...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Python Hub - сборище Питонистов
🤔 Отмеряем нужное количество воды Эту задачу могут дать на собеседовании. Представьте, что у вас есть две пустых бутыли для воды объемом в 3 и 5 галлонов. Как отмерить ровно 4 галлона воды? Запас воды для решения не ограничен. Прошлый раз задача вам понравилась!…
👍 Было много разных версий, но в каком-то смысле они все схожи.

Можете заглянуть в комменты и почитать их самостоятельно!


Выложу те ответы, которые были в исходниках:

Каждую бутылку наполнить на половину (1.5 и 2.5 литра= 4 литра)....

Шутка, конечно 🤡

Вот реальные варики:


Наполняем бутылку в 5 литров, переливаем воду в 3х-литровую, остается 2 литра. Выливаем воду из 3х-литровой, наливаем туда 2 литра. Набираем еще раз 5и-литровую, доливаем в трехлитровую недостающий литр, и в 5-литровой получается 4 литра.

И понравился еще такой:

Две 3х литровки залить в 5ти литровку останеться 1литр потом эту воду залить в 5ти литровку а затем залить 3литра
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🤡1