Python вопросы с собеседований
24.7K subscribers
508 photos
15 videos
17 files
403 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит

РКН: clck.ru/3FmrFd
加入频道
🖥 Напишите класс PipManager, в котором определите следующие методы:

show_pip_version() – вывод версии менеджера;
show_pip_help() – вывод справки по менеджеру;
install_package(package_name) – установка пакета;
upgrade_package(package_name) – обновление пакета;
show_package_info(package_name) – вывод информации о пакете;
show_packages() – вывод списка установленных пакетов;
uninstall_package(package_name) – удаление пакета.

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


Пишите свое решение в комментариях👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Задача золотой массив

Пролог
Миша учится в классе, в котором у каждого ученика есть рейтинг успеваемости. Иван Иванович (ИИ) - учитель информатики перед каждым уроком получает массив с рейтингом учеников, которые придут. Он хочет рассадить их определённым образом, а Миша хочет 5 по информатике, и он решил написать программу, которая поможет ИИ.

Задание
Вам дается массив целых чисел [students]. Массив [students] понравится ИИ если:

Длина массива - четное число (чтобы у каждого ученика был сосед по парте, ученик без соседа отправится ИИ на другой урок)
students[i] != students[i+1] для всех учеников на четных позициях (ИИ хочет, чтобы ученики с одинаковым рейтингом не сидели за одной партой; первые два элемента массива - ученики за первой партой, следующие два элемента - за второй и тд.)
Пустой массив тоже понравится ИИ, потому что тогда вместо урока он пойдет в столовую пить чай.

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

Верните минимальное число элементов, которые необходимо удалить, чтобы массив понравился ИИ.

Пример:

Ввод: students = [1, 1, 2, 3, 5]
Вывод: 1
Мы можем удалить или students[0] или students[1], этого будет достаточно, чтобы массив понравился ИИ - students[1, 2, 3, 5].

Пишите свое решение в комментариях👇

@python_job_interview
⚡️Маст-хэв список для программистов, каналы с последними книжными новинками, библиотеками, разбором кода и актуальной информацией, связанной с вашим языком программирования.
Лучший способ получать свежие обновлении и следить за трендами в разработке.

Машинное обучение: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
C#: t.me/csharp_ci
C/C++/ t.me/cpluspluc
Data Science: t.me/data_analysis_ml
Devops: t.me/devOPSitsec
Go: t.me/Golang_google
Базы данных: t.me/sqlhub
Rust: t.me/rust_code
Javascript: t.me/javascriptv
React: t.me/react_tg
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Linux: t.me/+A8jY79rcyKJlYWY6
Big Data: t.me/bigdatai
Хакинг: t.me/linuxkalii
Тестирование: https://yangx.top/+F9jPLmMFqq1kNTMy
Java: t.me/javatg

💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy

Папка машинное обучение: https://yangx.top/addlist/_FjtIq8qMhU0NTYy

📕 Бесплатные Книги для программистов: https://yangx.top/addlist/YZ0EI8Ya4OJjYzEy

🎞 YouTube канал: https://www.youtube.com/@uproger

😆ИТ-Мемы: t.me/memes_prog

🇬🇧Английский: t.me/english_forprogrammers
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Найти максимальный по модулю элемент в массиве с уникальными по модулю значениями

📌 ЗАДАЧА
Заполнить массив случайными положительными и отрицательными числами таким образом, чтобы все числа по модулю были разными. Это значит, что в массиве не может быть ни только двух равных чисел, но не может быть двух равных по модулю. В полученном массиве найти наибольшее по модулю число.

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

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

Решение:

from random import random<br>
N = 15<br>
m = int(random() * 40) - 20<br>
arr = [m]<br>
i = 1<br>
while i < N:<br>
m = int(random() * 40) - 20<br>
f = 1<br>
for j in arr:<br>
if abs(j) == abs(m):<br>
f = 0<br>
break<br>
if f == 1:<br>
arr.append(m)<br>
i += 1<br>
print(arr)<br>
j = 0<br>
for i in range(1, 15):<br>
if abs(arr[i]) > abs(arr[j]):<br>
j = i<br>
print('Максимальный по модулю %d-й элемент равен %d' % (j,arr[j]))<br>


Пишите свое решение в комментариях👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос_ответ_для_Python_разработчика_на_собеседовании.pdf
851.3 KB
📌 400 самых популярных вопросов-ответов для Python-разработчика.

Сохраняйте себе, чтобы не потерять
Задача для новичков.

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

Пример:
```profit({
"cost_price": 32.67,
"sell_price": 45.00,
"inventory": 1200
}) ➞ 14796

profit({
"cost_price": 225.89,
"sell_price": 550.00,
"inventory": 100
}) ➞ 32411

profit({
"cost_price": 2.77,
"sell_price": 7.95,
"inventory": 8500
}) ➞ 44030

```Примечание:
1. Предполагаем, что все запасы были проданы.
2. Прибыль = общая сумма продаж – общая себестоимость

Пишите ваши варианты решения в комментах. Варианты решений будут скоро(сегодня-завтра)

#новичок #coбес

Пишите свое решение в комментариях👇

@python_job_interview
🖥 Задача по Python #14

Напишите функцию, которая при задании URL-адреса в виде строки анализирует только доменное имя и возвращает его в виде строки.

Примеры

url = "https://uproger.com/c/HowdyhoNet" -> domain name = "uproger.com"
url = "http://www.zombie-bites.com" -> domain name = "zombie-bites"
url = "https://www.cnet.com" -> domain name = cnet"


Пишите свое решение в комментариях👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Задача

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

Примеры

* С инпутом 'a'
* Ваша функция должна вернуть ['a']
* С инпутом 'ab'
* Ваша функция должна вернуть ['ab', 'ba']
* С инпутом 'aabb'
* Ваша функция должна вернуть ['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']


Обратите внимание, что порядок перестановок не имеет значения.

Пишите свое решение в комментариях👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Что такое фикстуры в Pytest? Какие фикстуры вы знаете ?

Встроенные фикстуры — хороший инструмент, чтобы не создавать свои велосипеды и эффективно использовать мощь фреймворка, которую хотели передать авторы. Фикстуры помогают в разных случаях: при работе с выводом ошибок, логировании, создании отчетов и так далее. В статье разберем основные встроенные фикстуры и их применение в Pytest.

Потоки ввода и вывода ошибок

Когда нужно протестировать системные сообщения или перехватить ошибку, помогают фикстуры, которые умеют работать с потоками вывода.

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

Захваченный вывод доступен через вызов метода capfd.readouterr(), который возвращает named tuple с stderr и stdout в виде строк.

def test_system_echo(capfd):
os.system('echo "hello"')
captured = capfd.readouterr()
assert captured.out == "hello\n"

Capfdbinary — тоже работает со стандартным выводом и ошибками, но возвращает именованный кортеж, где сообщения из stderr и stdout представлены в виде байтовых строк.

def test_system_echo(capfdbinary):
os.system('echo "hello"')
captured = capfdbinary.readouterr()
assert captured.out == b"hello\n"

Capsys — фикстура для работы с потоками для стандартного вывода и вывода ошибок на уровне python-кода. Захватывает sys.stdout и sys.stderr из кода и возвращает в виде строк.

def test_output(capsys):
print("hello")
captured = capsys.readouterr()
assert captured.out == "hello\n"

Capsysbinary — подходит для работы с потоками стандартного вывода на уровне python-кода. Захватывает sys.stdout и sys.stderr из кода и возвращает в виде байтовых строк.

def test_output(capsysbinary):
print("hello")
captured = capsysbinary.readouterr()
assert captured.out == b"hello\n"
Логирование
Логи — отличный инструмент для дебага, когда дело касается стабильной работы приложения. По ним можно понять, когда и из-за чего в работе системы возник сбой. Pytest имеет несколько фикстур для управления логами из тестов.

Caplog — позволяет работать с логами в python-коде. Дает возможность изменять уровень логирования, перехватывать сообщения, модифицировать их и многое другое.

# Задать уровень логирования
def test_foo(caplog):
caplog.set_level(logging.INFO)
for message in caplog.messages:
assert "for debug level" not in message
# Пример проверки уровня логирования и текста в сообщении лога
def test_baz(caplog):
func_under_test()
for record in caplog.records:
assert record.levelname != "CRITICAL"
assert "wally" not in caplog.text

Recwarn — возвращает экземпляр класса WarningsRecorder, где будут храниться все warnings, которые были вызваны с помощью warnings.warn в тестовых функциях.

import warnings

def test_check_warnings(recwarn):
warnings.warn("hello", UserWarning)
assert len(recwarn) == 1
warn = recwarn.pop(UserWarning)
assert issubclass(warn.category, UserWarning)
assert str(warn.message) == "hello"
assert warn.filename

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

Doctest_namespace — фикстура для работы со встроенной библиотекой doctest. Библиотека помогает сравнить поведение функции с тем, что описано в docstring как ее ожидаемое поведение.

# Объявляем фикстуру в conftest.py
import numpy

@pytest.fixture(autouse=True)
def add_np(doctest_namespace):
doctest_namespace["np"] = numpy # Добавляет в namespace np ссылку на объект numpy


# Вызываем namespace в numpy.py
def arange():
"""
>>> a = np.arange(10)
>>> len(a)
10
"""
pass

Напишите фикстуры, которые вы используете в комментариях 👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое дескрипторы данных?

Очень часто переменные, инициализируемые в классе, являются однотипными. Например, есть класс Employee (сотрудник), принимающий параметры: имя, фамилия, отчество, должность. Все они являются строками. Следовательно, прежде чем создать экземпляр класса, нужно проверить, что пользователь ввел строки. А для этого потребуются сеттеры, проверяющие тип вводимых параметров. В итоге, мы 4 раза повторим код проверки. Нарушается принцип DRY (don't repeat yourself).

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

Дескриптор - такой атрибут объекта, поведение которого переопределяется специальными методами. Проще говоря, доступ к какому-то свойству экземпляра можно переопределить с учетом дополнительных проверок. Если делать эти верификации без дескрипторов, то один и тот же код начнет повторяться.

Существует 4 метода протокола дескрипторов:
get__() - получить значение свойства;
set__() - задать значение;
delete__() - удалить атрибут;
set_name__() - присвоить имя свойству (появился в Питоне версии 3.6).

Если применяется только метод __get__(), то мы имеем дело с дескриптором без данных, а если есть еще и __set__(), то речь будет идти о дескрипторе данных.

Покажем использование дескрипторов на вышеупомянутом примере.

Пример – IDE
---
# Создаем класс с протоколами дескриптора
class StringChecker:

# Получаем доступ к свойству
def __get__(self, instance, owner):
if instance is None:
return self
return instance.__dict__[self.name]

# Меняем свойство
def __set__(self, instance, str_value):
if not isinstance(str_value, str):
raise ValueError('Нужно предоставить строку')
elif len(str_value) < 2:
raise ValueError('Необходимо минимум 2 буквы')
instance.__dict__[self.name] = str_value

# Задаем имя свойства
def __set_name__(self, owner, name):
self.name = name


class Employee:


# Определяем атрибуты (их может быть любое количество)
name = StringChecker()
surname = StringChecker()
patronymic = StringChecker()
post = StringChecker()

# Инициализируем свойства с учетом требуемых проверок
def __init__(self, name, surname, patronymic, post):
self.name = name
self.surname = surname
self.patronymic = patronymic
self.post = post



# Тесты
director = Employee('Иван', 'Николаевич', 'Прогин', 'Директор')
print(director.__dict__)
director.name = 1
director.name = 'A'



Результат выполнения
---
{'name': 'Иван', 'surname': 'Николаевич', 'patronymic': 'Прогин', 'post': 'Директор'}
ValueError: Нужно предоставить строку
ValueError: Минимум две буквы в атрибуте требуется

@python_job_interview
🖥 Задача: Конференц-залы II.

Сложность задачи: Средняя

Условие задачи:
Дан массив интервалов времени проведения совещаний, intervals, где intervals[i] = [start(i), end(i)]. Найдите минимальное требуемое количество конференц-залов.

Пример:
Ввод: intervals = [[0,30],[5,10],[15,20]]
Вывод: 2

Ввод: intervals = [[7,10],[2,4]]
Вывод: 1

📌Решение

Пишите свое решение в комментариях👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Задача: Самые дешевые авиабилеты в пределах K остановок

Условие: Имеется n городов, соединенных некоторым количеством рейсов. Вам дан массив flights, где flights[i] = [fromi, toi, pricei] означает, что существует рейс из города fromi в город toi со стоимостью pricei.

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

Пример:

Ввод:
n = 4, flights = [[0,1,100],[1,2,100],[2,0,100],[1,3,600],[2,3,200]], src = 0, dst = 3, k = 1
Вывод: 700

Ввод: n = 3, flights = [[0,1,100],[1,2,100],[0,2,500]], src = 0, dst = 2, k = 1
Вывод: 200

📌Решение

Пишите свое решение в комментариях👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Задача: Лучшая команда, в которой нет конфликтов

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

Однако в баскетбольной команде не должно быть конфликтов. Конфликт возникает, если младший игрок набрал строго больше очков, чем старший. Конфликт не возникает между игроками одного возраста.

Задав два списка, scores и ages, в которых каждый scores[i] и ages[i] представляет собой счет и возраст i-го игрока соответственно, верните наибольший общий балл среди всех возможных баскетбольных команд.

Пример:

Ввод:
scores = [1,3,5,10,15], ages = [1,2,3,4,5]
Вывод: 34

Ввод: scores = [4,5,6,5], ages = [2,1,2,1]
Вывод: 16

Решение

Пишите свое решение в комментариях👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Уроки Парсинга на Python Сравниваем Scrappy и bs4

🎞 Видео

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Умножение строк

Сложность: Средняя

Условие задачи:
Даны два неотрицательных целых числа num1 и num2, представленные в виде строк, вернуть произведение num1 и num2, также представленное в виде строки.

Примечание. Вы не должны использовать какую-либо встроенную библиотеку BigInteger или напрямую преобразовывать входные данные в целое число.

Пример:
Ввод: num1 = "2", num2 = "3"
Вывод: "6"

Ввод: num1 = "123", num2 = "456"
Вывод: "56088"

📌Решение

Пишите свое решение в комментариях👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Продвинутый парсинг на Python со сменой прокси

🎞 Video

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
52 Amazing Python Projects For Developers.pdf
710.2 KB
🔥 Более 50 крутых проектов на Python для практики с исходным кодом и подробными объяснениями, как мы любим.

Множество проектов, e-mail рассыльщик, парсеры, собственный Paint и многое другое.

@python_job_interview
🖥Многопоточный парсер на Python. ООП подход

🎞 Video

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
📧Python Атоматизация отправки email с selenium

Видео

@python_job_interview