Python вопросы с собеседований
Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Python вопросы с собеседований
تُعد قناة Python вопросы с собеседований (@python_job_interview) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 24 937 مشتركاً، محتلاً المرتبة 5 309 في فئة التكنولوجيات والتطبيقات والمرتبة 26 059 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 24 937 مشتركاً.
بحسب آخر البيانات بتاريخ 01 نوفمبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 75، وفي آخر 24 ساعة بمقدار -8، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 5.90%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 3.06% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 1 472 مشاهدة. وخلال اليوم الأول يجمع عادةً 762 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 7.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل github, api, собеседование, git, docker.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Вопросы с собеседований по Python
@workakkk - админ
@machinelearning_interview - вопросы с собесдований по Ml
@pro_python_code - Python
@data_analysis_ml - анализ данных на Python
@itchannels_telegram - 🔥 главное в ит
РКН: clck.ru/3FmrFd”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 02 نوفمبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
'''
Time Complexity = O(N)
Space Complexity = O(N)
Where N is the length of the string.
'''
def reverseString(str: str) -> str:
# if the string is " " then return "".
if(str == "" or str == " "):
return ""
ans = ''
start = len(str) - 1
while(start >= 0):
# Skip multiple spaces.
if(str[start] == ' '):
start-=1
else:
# Add space between words.
if(len(ans) > 0):
ans += (' ')
j = start
while(j >= 0 and str[j] != ' '):
j-=1
# add current word to ans.
ans += (str[j+1: j+1+start-j])
start = j
return ans
2. Сумма всех чисел до N
Вам дано число N. Напишите скрипт, который считал бы сумму всех четных чисел в промежутке от 1 до N, включая N. К примеру, если N равняется 6, то вывод должен быть равен 2+4+6, то есть 12.
Решение:
Нам нужно вывести формулу для вычисления суммы четных чисел до числа 'N'.
Пусть задано число N. Тогда общее количество четных чисел от 1 до N будет равно N/2. Например, для 4 список четных чисел будет равен 2 и 4, а их количество равно 2.
Последовательность четных чисел до N образует арифметическую прогрессию с общей разницей D между числами в 2, первым элементом A = 2, и количеством элементов N, равным N/2, как доказано выше.
Сумма арифметической прогрессии равна (N/2)*(A+L), где N — количество элементов, а L — последнее число, которое также можно записать как A + (N - 1)D.
Таким образом, сумма равна (N/2*2) * (2 + 2 + (N/2 - 1)*2) = (N/2) * (1 + 1 + N/2 - 1) = (N/2) * (N/2 + 1).
'''
Time Complexity : O(1)
Space Complexity : O(1)
'''
def evenSumTillN(n):
# Calculate the sum.
sum = (n // 2) * (n // 2 + 1)
return sum
Остальныеnum1 = "2", num2 = "3"
Вывод: "6"
Ввод: num1 = "123", num2 = "456"
Вывод: "56088"
📌Решение
Пишите свое решение в комментариях👇
@python_job_interviewfunc max(a, b int) int {
if a > b {
return a
}
return b
}
func bestTeamScore(scores []int, ages []int) int {
var n int = len(ages)
player := [][]int{}
for i := 0; i < n; i++ {
player = append(player, []int{ages[i], scores[i]})
}
sort.Slice(player, func(i, j int) bool {
return player[i][0] < player[j][0] || (player[i][0] == player[j][0] && player[i][1] < player[j][1])
})
var ans int = 0
DP := make([]int, n + 1)
for i := 0; i < n; i++ {
DP[i + 1] = player[i][1]
for j := 0; j < i; j++ {
if player[j][1] > player[i][1] {continue}
DP[i + 1] = max(DP[i + 1], player[i][1] + DP[j + 1])
}
ans = max(ans, DP[i + 1])
}
return ans
}
Пишите свое решение в комментариях👇
@python_job_interviewНа курсе рассматриваются все особенности актуальных версий Python 3.6+.👉 ПРОЙТИ ТЕСТ: https://otus.pw/qmDG/
Нативная интеграция. Информация о продукте www.otus.ruintervals = [[0,30],[5,10],[15,20]]
Вывод: 2
Ввод: intervals = [[7,10],[2,4]]
Вывод: 1
📌Решение
Пишите свое решение в комментариях👇
@python_job_interviewget__() - получить значение свойства;
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_interviewdef 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