Python: задачки и вопросы
7.88K subscribers
1.15K photos
1 video
1 file
73 links
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
Download Telegram
🌱 Что выведет код?
Anonymous Quiz
19%
None
10%
[4, 5, 1]
30%
[1, 4, 5]
41%
Error
В этом коде возникает TypeError потому что метод sort() в Python не может сравнивать числа разных типов — в данном случае целые числа (4, 5) и комплексное число 1j.

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

Или если бы вы хотели сортировать по модулю комплексных чисел:

y = [4, 5, 1j]
y.sort(key=abs) # Сортировка по модулю числа
🌱 Что выведет код?
Anonymous Quiz
13%
a
9%
None
49%
s
28%
Error
В коде используется метод count() для подсчёта вхождений подстроки "abb" в строку "abbzxyzxzxabb", но с определёнными начальным и конечным индексами.

1. "abb" - подстрока, которую мы ищем
2. -10 - начальный индекс (отсчёт с конца строки)
3. -1 - конечный индекс (отсчёт с конца строки)

Срез от -10 до -1 даёт нам "zxyzxzxab", и в нем нет вхождения "abb".

Если бы мы хотели посчитать вхождения в последних 10 символах:

print("abbzxyzxzxabb".count("abb", -10)) # 1
🌱 Что выведет код?
Anonymous Quiz
25%
1
43%
2
21%
3
10%
Error
В коде создаётся серия: [1, 2, 3, np.nan, 4, 5]

Метод cumsum() вычисляет накопительную сумму:

1: 1.0 (просто первое число)
2: 3.0 (1 + 2)
3: 6.0 (1 + 2 + 3)
4: NaN
5: 10.0 (1 + 2 + 3 + 4)
6: 15.0 (1 + 2 + 3 + 4 + 5)

Когда встречается np.nan (Not a Number), pandas пропускает его при подсчёте. Все числа преобразуются в тип float64, потому что np.nan является числом с плавающей точкой

Если бы мы хотели, чтобы np.nan не прерывал подсчёт, мы могли бы использовать параметр skipna=False:

print(numbers.cumsum(skipna=False))

Тогда результат был бы другим, и все значения после np.nan тоже стали бы NaN.
🌱 Что выведет код?
Anonymous Quiz
9%
1
9%
2
68%
3
13%
Error
У нас есть функция f с тремя параметрами:


def f(a, b = 1, c = 2):
...

И она вызывается дважды:

1. f(2, c = 2):
- a = 2 (первый позиционный аргумент)
- b = 1 (значение по умолчанию, так как не указано)
- c = 2 (именованный аргумент)
Поэтому выводится: a is: 2 b is: 1 c is: 2

2. f(c = 100, a = 110):
- a = 110 (именованный аргумент)
- b = 1 (значение по умолчанию, так как не указано)
- c = 100 (именованный аргумент)
Поэтому выводится: a is: 110 b is: 1 c is: 100

Python сначала обрабатывает позиционные аргументы, а затем именованные. Если какой-то параметр не указан, используется его значение по умолчанию. В нашем случае параметр b ни разу не был указан явно, поэтому всегда использовалось его значение по умолчанию - 1.
🔍 Что выведет код?
Anonymous Quiz
66%
300 400
21%
100 400
4%
100 200
9%
Error
1. В классе P (родительский класс):
- self.__x = 100 - создается приватный атрибут __x со значением 100
- self.y = 200 - создается публичный атрибут y со значением 200

2. В классе C (дочерний класс):
- super().__init__() - вызывается конструктор родительского класса
- self.__x = 300 - создается НОВЫЙ приватный атрибут __x со значением 300
- self.y = 400 - переопределяется значение публичного атрибута y

Ключевой момент здесь в том, что в Python приватные атрибуты (с двойным подчеркиванием __) автоматически «манглируются» (переименовываются) интерпретатором. Когда мы создаем приватный атрибут __x в классе P, он фактически становится _P__x, а когда создаем __x в классе C, он становится _C__x.

Поэтому:
1. Когда вызывается d.print(), метод print из класса P обращается к self.__x, что на самом деле означает self._P__x, поэтому выводится 100
2. Атрибут y является публичным, поэтому его значение успешно переопределяется в классе C на 400

Таким образом, в выводе мы видим:
- 100 (значение _P__x из родительского класса)
- 400 (значение y из дочернего класса)

Это демонстрирует важное различие между приватными и публичными атрибутами в Python при наследовании.
🔍 Что выведет код?
Anonymous Quiz
12%
1
5%
2
17%
3
66%
4
Код выводит "131211131211" и затем вызывает ошибку IndexError.

rev_func() — рекурсивная функция, но она не имеет условия выхода (базового случая):

1. Начальный вызов: rev_func(x, 3)
- x = [11, 12, 13]
- length = 3
- Выводит x[2] = 13

2. Рекурсивный вызов: rev_func(x, 2)
- Выводит x[1] = 12

3. Рекурсивный вызов: rev_func(x, 1)
- Выводит x[0] = 11

4. Рекурсивный вызов: rev_func(x, 0)
- Пытается вывести x[-1], что приводит к IndexError

Функция продолжает вызывать сама себя, уменьшая length, пока не достигает отрицательного значения, что приводит к попытке доступа к несуществующему индексу списка (т. е. IndexError).
Выберите стандартный метод Python для записи данных в бинарном режиме:
Anonymous Quiz
57%
write
16%
Output.binary
13%
Dump
14%
Binary.output
write - это стандартный метод для записи данных в файл. Он может работать с бинарными данными, если файл открыт в бинарном режиме ('wb').

Остальные варианты неверны:
- Output.binary - такого метода нет в стандартной библиотеке Python
- Dump - это не стандартный метод Python для записи данных
- Binary.output - такого метода нет в стандартной библиотеке Python

Пример правильного использования write для бинарной записи:

with open('file.bin', 'wb') as f:
f.write(binary_data)