Python Learning
33.5K subscribers
1.95K photos
8 videos
7 files
953 links
№ 4974297878

Обучающий канал по Python

Ссылка для друга - https://t.me/+I7jrAQKR5xAyYTAy

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Python_per_month
Download Telegram
#Вопросы_с_собеседования
Объясните, что такое обработка исключений в Python, и предоставьте пример кода, демонстрирующий использование блока try-except.


Обработка исключений в Python позволяет программисту обрабатывать и управлять ошибками в коде. Блок try содержит код, который может вызвать исключение. Если исключение происходит, выполнение кода переходит к блоку except, который содержит обработчики конкретных типов исключений.
Блок else выполняется, если в блоке try не возникло исключение.
Блок finally выполняется всегда, независимо от того, произошло исключение или нет. Этот блок используется, например, для освобождения ресурсов.

В примере на картинке в функции divide_numbers представлен пример деления двух чисел с использованием блока try-except. В случае деления на ноль выводится сообщение об ошибке. Если переданы нечисловые значения, программа сообщает об ошибке типа. В блоке else выводится сообщение об успешном выполнении операции, а в блоке finally выводится сообщение, которое всегда выполняется.
👍24❤‍🔥2
#Вопросы_с_собеседования
Напишите функцию на Python, которая принимает на вход строку из слов, разделенных пробелами, и возвращает новую строку, в которой каждое слово написано задом наперед. Например, для входной строки "Hello World" функция должна вернуть "olleH dlroW".


Решение:

В начале кода мы используем метод split(), чтобы разбить входную строку на список слов. Это делается по пробелам, предполагая, что слова разделены пробелами. Затем мы используем генератор списка (list comprehension), чтобы перевернуть каждое слово в списке. word[::-1] — это способ перевернуть строку с помощью среза. Далее мы используем метод join(), чтобы объединить перевернутые слова обратно в строку, разделяя их пробелами и, наконец, возвращаем полученную строку.
👍32❤‍🔥2🎉2💔1
💻 Определяем ip адрес своего компьютера

Этот код использует библиотеку requests для отправки HTTP-запроса к веб-сервису ipify, который предоставляет API для определения публичного IP-адреса пользователя. Код написан в форме функции get_public_ip, что делает его удобным для повторного использования.

Использование блока try-except обеспечивает обработку исключений, которые могут возникнуть при запросе (например, проблемы с подключением к интернету). Если запрос успешен, функция возвращает IP-адрес, иначе возвращает сообщение об ошибке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤‍🔥3🎉3
#Вопросы_с_собеседования
Объясните, что делает данная функция (первая картинка), оптимизируйте ее, и напишите тесты для проверки ее корректности.

Что делает функция:

Данная функция some_function принимает список чисел input_list, проходится по каждому элементу в списке, проверяет, является ли элемент четным числом, и если да, то добавляет квадрат этого числа в новый список result. В конце функция возвращает этот новый список.

Оптимизация кода:
Мы можем использовать list comprehension для более компактной записи этой функции:

def optimized_function(input_list):
return [item ** 2 for item in input_list if item % 2 == 0]


Также, если вам необходимо, чтобы функция работала для любого итерируемого объекта, вы можете добавить проверку на четность элемента и заменить на использование генератора:

def general_function(iterable):
return (item ** 2 for item in iterable if item % 2 == 0)


Тестирование:
Теперь напишем тесты для проверки корректности функции. Мы можем использовать библиотеку unittest для этого (вторая картинка).
👍34❤‍🔥3🎉2🏆1🗿1
#Вопросы_с_собеседования
Напишите функцию, которая принимает на вход строку и возвращает количество уникальных слов в этой строке. Считайте, что слова разделяются пробелами, знаками препинания должны быть удалены. Напишите код и расскажите, как вы обрабатываете знаки препинания. Какие дополнительные оптимизации можно внести?


Объяснение:
В этом коде мы используем string.punctuation для определения знаков препинания и str.translate() для удаления их из строки. Затем мы приводим всю строку к нижнему регистру и разбиваем ее на слова, считая количество уникальных слов с использованием множества (set).

Оптимизации:
Мы могли бы использовать регулярные выражения для более точного удаления знаков препинания и разделения слов. Вместо создания промежуточного списка words, мы могли бы сразу подсчитывать уникальные слова при проходе по строке, что сэкономило бы память.
👍21❤‍🔥2🎉1
#Вопросы_с_собеседования
Напишите функцию, которая принимает на вход список словарей, представляющих собой записи о студентах. Каждый словарь содержит ключи 'name', 'age' и 'grade'. Функция должна возвращать средний возраст студентов и среднюю оценку. Напишите код и объясните, как бы вы обработали случаи, когда в словарях отсутствуют ключи или значения не являются числами
.

Объяснение:
В этой функции мы проходим по списку словарей, проверяем наличие ключей 'name', 'age' и 'grade' и их типы. Если данные валидны, добавляем их к общей сумме, чтобы затем посчитать средние значения.
👍21🤔1
pow()

В Python функция pow() используется для вычисления степени числа. Вот как она работает:

result = pow(x, y, z)


где: x — основание степени,
y — показатель степени,
z (необязательный параметр) — модуль, по которому производится вычисление.
Если z указан, то pow(x, y, z) возвращает (x y) % z. Если z не указан, то возвращается x y.

#для_начинающих
👍22❤‍🔥1😱1🎉1
#Вопросы_с_собеседования
Напишите функцию, которая принимает на вход строку и возвращает количество уникальных слов в этой строке. Считайте, что слова разделяются пробелами, знаками препинания должны быть удалены. Напишите код и расскажите, как вы обрабатываете знаки препинания. Какие дополнительные оптимизации можно внести?


Объяснение:
В этом коде (первая картинка) мы используем string.punctuation для определения знаков препинания и str.translate() для удаления их из строки. Затем мы приводим всю строку к нижнему регистру и разбиваем ее на слова, считая количество уникальных слов с использованием множества (set).

Оптимизации (вторая картинка):
Мы могли бы использовать регулярные выражения для более точного удаления знаков препинания и разделения слов. Вместо создания промежуточного списка words, мы могли бы сразу подсчитывать уникальные слова при проходе по строке, что сэкономило бы память.
👍13😱3🗿2❤‍🔥1🍾1
memoryview()

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

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

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

#для_начинающих
👍21❤‍🔥2😱1🎉1
Метод __getitem__

Метод __getitem__ является частью протокола индексации, который позволяет объекту быть индексируемым, как это делается, например, для списков или словарей. Этот метод вызывается при использовании квадратных скобок [] для доступа к элементам объекта.

Этот метод также используется при работе с срезами. Если вы хотите, чтобы ваш объект поддерживал срезы, вы также можете реализовать метод __getitem__ с тремя аргументами: self, start, stop.

#для_начинающих
👍16🎉3❤‍🔥1
#Вопросы_с_собеседования
Реализуйте алгоритм поиска в ширину (BFS - Breadth-First Search) для графа на Python. Напишите код и объясните, как работает этот алгоритм. Обсудите его сложность и применение.

Объяснение:

Алгоритм поиска в ширину (BFS) используется для обхода или поиска в графе. Он начинает с выбора стартовой вершины и пошагово распространяется по всем смежным вершинам.

Шаги алгоритма:
1. Создается пустое множество visited для отслеживания посещенных вершин и очередь queue для управления порядком обхода.
2. Стартовая вершина добавляется в очередь и отмечается как посещенная.
3. Пока очередь не пуста, извлекается вершина из начала очереди (queue.popleft()).
4. Выводится значение текущей вершины и добавляются в очередь все её смежные вершины, которые еще не были посещены.
5. Шаги 3-4 повторяются до тех пор, пока очередь не опустеет.

Сложность:
Временная сложность: O(V + E), где V — количество вершин, E — количество ребер в графе.
Пространственная сложность: O(V), так как используется множество для отслеживания посещенных вершин.

Применение:
BFS применяется в задачах поиска кратчайших путей в невзвешенных графах.
Он также используется в задачах, связанных с обходом графов, например, в нахождении компонент связности.
👍14
frozenset

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

Вот несколько ключевых особенностей frozenset:

Неизменяемость: Это означает, что вы не можете добавлять, удалять или изменять элементы в frozenset после его создания.
Хешируемость: Поскольку frozenset неизменяем, он является хешируемым, что означает, что его можно использовать в качестве ключа в словарях и элемента множества.

Обратите внимание, что, поскольку frozenset не поддерживает изменения, некоторые методы, которые изменяют множество (например, add, remove, discard), не применимы к frozenset. Однако, вы можете выполнять операции, возвращающие новые frozenset, такие как объединение и пересечение.

#для_начинающих
👍18
Ruff

Ruff — это новый, быстроразвивающийся линтер Python кода, призванный заменить flake8 и isort.

Основным преимуществом Ruff является его скорость. Ruff в 10-100 раз быстрее аналогов (Линтер написан на Rust). В сравнении с flake8, автор заявляет о практически полном совпадении с набором правил инструмента и нативной реализацией популярных плагинов (flake8-bugbear и т.д.). Также Ruff совместим с Black «из коробки».

Ruff может форматировать код. Например, он автоматически удаляет неиспользуемые импорты. Что касается сортировки и группировки строк импорта, то она практически идентична isort.

Документация лежит здесь.

#для_продвинутых
👍22
👍6
Что выведет данный код?
Anonymous Quiz
34%
True
42%
False
23%
Ошибку
🤔18👍7🥰2🎉1
#Вопросы_с_собеседования
Реализуйте алгоритм сортировки слиянием (Merge Sort) на Python. Напишите код и объясните, как работает этот алгоритм. Расскажите о его сложности и возможных оптимизациях.


Объяснение:
Алгоритм сортировки слиянием (Merge Sort) использует стратегию «разделяй и властвуй». Он состоит из двух основных шагов:

Разделение (Divide): Массив разделяется на две равные (при четном числе элементов) или почти равные (при нечетном) части. Этот процесс рекурсивно выполняется для каждой из подпоследовательностей.
Слияние (Merge): Отсортированные подпоследовательности сливаются обратно в один отсортированный массив.

Сложность:
Временная сложность: O(n log n) в худшем, лучшем и среднем случаях.
Пространственная сложность: O(n).

Оптимизации:
— При реализации можно использовать вставочную сортировку для маленьких подмассивов, так как у нее меньшая константа в асимптотике.
— Если массив уже отсортирован, можно добавить проверку и пропустить шаг сортировки.
— Вместо копирования подмассивов при каждом рекурсивном вызове можно использовать вспомогательный массив для слияния, что уменьшит использование памяти.
👍15😁1
Метод swapcase()

Метод swapcase() в Python является встроенным методом строк (str), который создает новую строку, меняя регистр каждой буквы в исходной строке. Если буква была в верхнем регистре, она будет преобразована в нижний регистр, и наоборот.

Результатом будет строка 'hELLO, wORLD!'.

#для_начинающих
👍25❤‍🔥3🎉1