Серия «Вопросы собеседований - разработчик python 1 - 100»

13

101 игра на python. Вопросы собеседований. 1 - 10

Вопрос 1.

В Python список (list) — одна из наиболее часто используемых структур данных, известная своей способностью хранить последовательность элементов. Что происходит, когда вы используете метод append() в списке, чтобы добавить новый элемент, а затем пытаетесь использовать метод extend(), чтобы добавить другую последовательность к тому же списку?

A. Метод append() добавит каждый символ нового элемента отдельно, а метод extend() создаст новый список внутри существующего списка.

B. Метод append() добавит новый элемент как один элемент в конец списка, а метод extend() будет итерировать по элементам и добавлять каждый из них по отдельности к исходному списку.

C. Оба метода append() и extend() добавят их содержимое одинаковым образом, создав вложенный список внутри исходного списка.

D. Метод append() заменяет существующий список, а метод extend() очищает список перед добавлением новой последовательности.


Вопрос 2.

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

A. for key, value in dictionary.items(): print(key, value)

B. for key in dictionary: print(key, dictionary[key])

C. for value in dictionary.values(): print(value)

D. for key in dictionary.keys(): print(key)


Вопрос 3.

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

A. Функция напрямую изменит глобальную переменную без какой-либо ошибки.

B. Python вызовет ошибку SyntaxError из-за конфликтующих областей видимости переменных.

C. Функция создаст новую локальную переменную с тем же именем, что и глобальная переменная, оставив глобальную переменную без изменений.

D. Глобальная переменная будет перекрыта, и ее значение изменится только тогда, когда функция завершит свою работу.


Вопрос 4.

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

A. "Python" + "is" + "awesome"

B. "Python", "is", "awesome"

C. "Python" + " " + "is" + " " + "awesome"

D. "Python".join(["is", "awesome"])


Вопрос 5.

При определении функции в Python можно установить значения параметров по умолчанию, что обеспечивает большую гибкость при вызове функции. Каков будет результат вызова следующей функции: def multiply(a, b=2): return a * b, если функция вызывается как multiply(5)?

A. Функция вернет 5.

B. Функция вызовет TypeError из-за отсутствующего аргумента.

C. Функция вернет 10, так как будет использовано значение по умолчанию b.

D. Функция вернет None, поскольку предоставлен только один параметр.


Вопрос 6.

В Python, какой метод можно использовать для замены частей строки другой строкой, и каков синтаксис этого метода, если вы хотите заменить 'cat' на 'dog' в строке s = "The cat sat on the mat"?

A. s.replaceString('cat', 'dog')

B. s.replace('cat', 'dog')

C. s.stringReplace('cat', 'dog')

D. s.replaceAll('cat', 'dog')


Вопрос 7.

При создании функции в Python, которая вычисляет факториал числа с использованием рекурсии, какое из следующих определений функции реализовано правильно и соответствует принципам рекурсии?

A. def factorial(n): return n * factorial(n-1) if n > 1 else 1

B. def factorial(n): return factorial(n-1) * n if n == 0 else 1

C. def factorial(n): factorial(n-1) * n

D. def factorial(n): return n * factorial(n) if n > 1 else 1


Вопрос 8.

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

A. Списки Python могут содержать только элементы одного и того же типа данных, такие как все целые числа или все строки.

B. Списки Python могут содержать элементы разных типов данных, такие как целые числа, строки и объекты, в одном и том же списке.

C. Списки Python не могут содержать другие типы коллекций, такие как другие списки или словари.

D. Списки Python являются неизменяемыми, то есть после создания их элементы не могут быть изменены.


Вопрос 9.

В Python, как можно эффективно объединить несколько строк, хранящихся в списке с именем strings = ["Python", "is", "awesome"], чтобы сформировать одну строку "Python is awesome"?

A. " ".join(strings)

B. strings.join(" ")

C. concatenate(" ", strings)

D. strings.concatenate(" ")


Вопрос 10. Рассмотрите блок кода Python для обработки исключений при попытке преобразовать целое число из пользовательского ввода, используя функцию input(). Какая реализация правильно обрабатывает ввод, который может быть недействительным целым числом, например 'пять', и выводит сообщение об ошибке?

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

ОТВЕТЫ


  1. Правильный ответ: B

    Объяснение:

    • Метод append(): добавляет свой аргумент как единый элемент в конец списка. Даже если аргументом является другой список или последовательность, они будут добавлены как один вложенный элемент.

    • Метод extend(): итерирует по элементам своего аргумента и добавляет каждый элемент по отдельности к концу исходного списка. Это означает, что если аргументом является список, каждый элемент этого списка будет добавлен как отдельный элемент в исходный список.

    Пример:

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

В результате:

  • append() добавляет 4 и [5, 6] как отдельные элементы.

  • extend() добавил 7 и 8 как отдельные элементы, а затем разбил строку "910" на символы и добавил их по отдельности.

Таким образом, ответ B является правильным, так как он точно описывает разницу в поведении методов append() и extend() при добавлении элементов в список.


2. Правильный ответ: A

Объяснение:

  • Метод items(): метод словаря items() возвращает view object, который отображает список пар ключ-значение в виде кортежей. Это позволяет одновременно итерировать по ключам и значениям в цикле for.

  • Метод keys(): метод keys() возвращает view object, содержащий только ключи словаря.

  • Метод values(): метод values() возвращает view object, содержащий только значения словаря.

Пример:

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

В результате:

  • Вариант A for key, value in dictionary.items(): print(key, value) правильно итерирует по парам "ключ-значение" словаря, используя метод items().

  • Вариант B for key in dictionary: print(key, dictionary[key]) работает, но использует прямой доступ к значению через ключ в словаре, а не итерируется по кортежам (key, value).

  • Варианты C и D итерируют либо только по значениям, либо только по ключам.

Таким образом, ответ A является правильным, поскольку он позволяет одновременно получить доступ и к ключам, и к значениям в цикле for.


3. Правильный ответ: C

Объяснение:

  • Локальные переменные: В Python переменные, объявленные внутри функции, по умолчанию считаются локальными для этой функции. Это означает, что они существуют и доступны только внутри этой функции.

  • Глобальные переменные: Глобальные переменные - это переменные, объявленные вне функций (на уровне модуля), и они доступны во всем коде модуля.

  • Изменение глобальных переменных: Если внутри функции используется имя переменной, которое также существует в глобальной области видимости, и при этом не используется ключевое слово global, то Python автоматически создаст локальную переменную с тем же именем внутри этой функции. Это означает, что изменения, произведенные с этой переменной внутри функции, не повлияют на глобальную переменную.

Пример:

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

В результате:

  • Внутри функции modify_variable создается локальная переменная global_variable со значением 5. Она перекрывает глобальную переменную с тем же именем, но не изменяет её.

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

  • После вызова функции, глобальная переменная global_variable сохраняет свое первоначальное значение 10.

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


4. Правильный ответ: A

Объяснение:

  • Оператор +: В Python оператор + используется для конкатенации строк. При использовании + между строками они просто объединяются в одну строку без добавления каких-либо дополнительных символов, если они явно не добавлены.

  • Запятая,: Если строки разделены запятыми, как в варианте B, это создаст кортеж строк, а не конкатенированную строку.

  • Добавление пробелов: В варианте C пробелы явно добавляются при конкатенации, что приводит к включению пробелов между словами.

  • Метод join(): Метод join() используется для объединения элементов итерируемого объекта (например, списка) в одну строку, используя строку, к которой применяется метод, в качестве разделителя.

Пример:

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

В результате:

  • Вариант A "Python" + "is" + "awesome" приводит к правильной конкатенации строк без добавления пробелов между ними.

  • Вариант B "Python", "is", "awesome" создает кортеж, а не строку.

  • Вариант C "Python" + " " + "is" + " " + "awesome" добавляет пробелы между строками, что не соответствует условию задания.

  • Вариант D "Python".join(["is", "awesome"]) использует join, но в данном примере он будет добавлять пробел между is и awesome, и к тому же нужно будет добавить строку "Python" в начало.

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


5. Правильный ответ: C

Объяснение:

  • Параметры по умолчанию: В Python можно задавать значения по умолчанию для параметров функции. Это означает, что если при вызове функции аргумент для этого параметра не указан, то будет использовано значение по умолчанию.

  • Применение значения по умолчанию: Если функция multiply вызывается с одним аргументом, например multiply(5), то переданное значение 5 будет присвоено параметру a, а для параметра b будет использовано значение по умолчанию, которое равно 2.

  • Результат: Функция вернет результат умножения переданного значения a на значение по умолчанию b, то есть 5 * 2 = 10.

Пример:

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

В результате:

  • При вызове multiply(5) значение 5 присваивается параметру a, а параметр b принимает свое значение по умолчанию 2. Функция возвращает 5 * 2 = 10.

  • При вызове multiply(5, 3) значение 5 присваивается параметру a, значение 3 присваивается параметру b. Функция возвращает 5 * 3 = 15.

Таким образом, ответ C является правильным, поскольку он точно описывает результат вызова функции multiply(5) с использованием значения по умолчанию для параметра b.


6. Правильный ответ: B

Объяснение:

  • Метод replace(): Метод replace() в Python используется для замены одной подстроки в строке на другую. Его синтаксис: строка.replace(старая_строка, новая_строка).

  • Неправильные методы: Методы replaceString(), stringReplace(), и replaceAll() не являются стандартными методами строк в Python.

Пример:

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

В результате:

  • Вариант B s.replace('cat', 'dog') правильно использует метод replace() для замены подстроки 'cat' на 'dog' в строке s.

  • Варианты A, C, и D используют несуществующие методы, и при их использовании будет вызвана ошибка AttributeError.

Таким образом, ответ B является правильным, поскольку он демонстрирует корректное использование метода replace() и его синтаксис.


7. Правильный ответ: A

Объяснение:

  • Рекурсивная функция: Рекурсивная функция — это функция, которая вызывает саму себя. Важной частью рекурсивной функции является наличие базового случая (base case), который прерывает рекурсию, и рекурсивного случая, который вызывает функцию с измененными входными данными для приближения к базовому случаю.

  • Факториал: Факториал числа n (обозначается как n!) — это произведение всех натуральных чисел до n. Например, 5! = 5 * 4 * 3 * 2 * 1 = 120.

  • Правильная реализация рекурсии:

    • Базовый случай: Для факториала базовым случаем является n = 1 (или n <= 1, включая 0!). В этом случае факториал равен 1.

    • Рекурсивный случай: Для n > 1, факториал вычисляется как n * factorial(n-1), то есть текущее число умножается на факториал числа, меньшего на единицу.

  • Проверка условия: Важно чтобы вызов factorial(n-1) был только при n>1, иначе будет бесконечная рекурсия.

Пример:

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

В результате:

  • Вариант A def factorial(n): return n * factorial(n-1) if n > 1 else 1 правильно реализует рекурсивную функцию для вычисления факториала, с корректным базовым случаем и рекурсивным вызовом.

  • Вариант B def factorial(n): return factorial(n-1) * n if n == 0 else 1 имеет неправильный базовый случай, который не будет обрабатывать положительные значения n.

  • Вариант C def factorial(n): factorial(n-1) * n не имеет базового случая и не возвращает значения, что приведет к бесконечной рекурсии и ошибке.

  • Вариант D def factorial(n): return n * factorial(n) if n > 1 else 1 имеет бесконечную рекурсию, так как вызывает факториал от того же числа а не n-1.

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


8. Правильный ответ: B

Объяснение:

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

  • Вариант A не верен, потому что в списке могут быть элементы разных типов.

  • Вариант B верен, поскольку он верно отражает гибкость списков Python.

  • Вариант C не верен, поскольку списки могут содержать другие коллекции, включая списки и словари.

  • Вариант D не верен, поскольку списки являются изменяемыми (mutable), то есть после их создания можно изменять их содержимое.

Пример:

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

В результате:

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

Таким образом, вариант B является единственно верным ответом.


9. Правильный ответ: A

Объяснение:

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

  • Вариант A является правильным, так как " ".join(strings) корректно использует пробел " " в качестве разделителя для объединения строк в списке strings.

  • Вариант B некорректен, так как метод join() вызывается у строки-разделителя, а не у списка.

  • Варианты C и D также некорректны, поскольку в Python нет методов concatenate() у строк или списка.

Пример:

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

В результате:

Метод join() используется для объединения всех строк из списка strings, вставляя между ними пробел. Метод вызывается на строке " ", которая выступает в качестве разделителя. Результатом является строка "Python is awesome".

Таким образом, вариант A является единственным правильным способом объединения строк из списка в одну строку с пробелами в качестве разделителей.


10. Правильный ответ: A

Объяснение:

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

  • try блок: содержит код, который может вызвать исключение. В данном случае это попытка преобразования строки, полученной от пользователя, в целое число с помощью функции int().

  • except блок: содержит код, который выполняется, если в блоке try возникает указанное исключение. В нашем случае это исключение ValueError, которое возникает при неудачной попытке преобразования строки в целое число.

Теперь разберем каждый вариант:

  • Вариант A: try: num = int(input("Введите число: ")) except ValueError: print("Это не является действительным числом!") - это правильная реализация. Она корректно пытается преобразовать ввод в число, и если возникает ошибка ValueError (например, если пользователь введет "пять"), программа перехватывает исключение и выводит соответствующее сообщение об ошибке.

  • Вариант B: try: num = int(input("Введите число: ")) if not num: print("Это не является действительным числом!") - содержит синтаксическую ошибку и не сможет обработать исключение. if not num: не будет выполнено, если возникает исключение ValueError, поскольку переменной num не будет присвоено значения.

  • Вариант C: num = int(input("Введите число: ")) except ValueError: print("Это не является действительным числом!") - отсутствует ключевое слово try для начала блока, который может вызывать исключение, поэтому возникает синтаксическая ошибка.

  • Вариант D: try: num = int(input("Введите число: ")) catch (ValueError): print("Это не является действительным числом!") - содержит синтаксическую ошибку: ключевое слово catch не используется в Python для обработки исключений, используется except.

Пример:

101 игра на python. Вопросы собеседований. 1 - 10 Программирование, Гайд, Python, Длиннопост

В результате:

В первом примере если ввести "123" - выведется "Вы ввели число: 123". Во втором примере если ввести "пять" - будет перехвачено исключение ValueError, и выведется сообщение "Это не является действительным числом!".

Таким образом, только вариант A корректно обрабатывает исключение ValueError и выводит соответствующее сообщение об ошибке.


Удачи!

Показать полностью 11
11

101 игра на python. Вопросы собеседований. 11 - 20

Вопросы 👉 1 - 10

Вопрос 11.

В Python имена переменных чувствительны к регистру, что означает, что variable и Variable считаются интерпретатором разными. Учитывая эту информацию, какое из следующих утверждений будет верным, если variable и Variable были определены как целые числа в сценарии Python?

A. print(variable) и print(Variable) выведут одинаковое значение, если обе переменные имеют одно и то же значение.

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

C. Python автоматически перезапишет значение первой переменной (variable) значением второй (Variable) во всем сценарии.

D. Невозможно использовать одно и то же имя с разными регистрами для разных переменных в одном сценарии.


Вопрос 12.

Python поддерживает несколько типов данных, и строки являются одним из наиболее часто используемых. При рассмотрении целого числа (int), числа с плавающей точкой (float) и строкового (str) типов данных, какой из следующих фрагментов кода правильно преобразует строковое представление числа в число с плавающей точкой и впоследствии добавляет его к целому числу перед выводом результата?

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

Вопрос 13.

Учитывая динамическую систему типизации Python, какой из следующих фрагментов кода демонстрирует гибкость присваивания типов в Python, позволяя переназначать переменные на различные типы данных в пределах одного и того же сценария?

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

Вопрос 14.

Функции Python определяются с помощью ключевого слова def, за которым следует имя функции и круглые скобки. Какое из следующих определений включает параметр по умолчанию, позволяя вызывать функцию с меньшим количеством аргументов, чем определено параметров?

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

Вопрос 15.

При итерировании по списку в Python для вычисления суммы его элементов, какая из следующих конструкций цикла правильно сформулирована, чтобы избежать ошибки IndexError и успешно вычислить общую сумму?

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

Вопрос 16.

Каков будет вывод следующего фрагмента кода Python при его выполнении?

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

A. Welcome to Python programming where the value of y is 15 э

B. Ошибка из-за несовместимых типов данных

C. Welcome to Python programming where the value of y is y

D. Ничего из вышеперечисленного


Вопрос 17.

Каково будет поведение следующей Python функции?

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

A. Функция возвращает "Even" только если n делится на 2 и 3.

B. Функция возвращает "Divisible by 3" для всех чисел, делящихся на 3, независимо от того, являются ли они четными.

C. Функция возвращает "Even" для всех четных чисел, и "Divisible by 3" для чисел не четных, но делящихся на 3.

D. Функция не может вернуть "Other".


Вопрос 18.

Дан следующий код модификации списка Python, каков будет окончательный вывод?

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

A. [5, 7, 9, 11, 13]

B. [2, 4, 6, 8, 10]

C. [3, 6, 9, 12, 15]

D. [5, 7, 9, 11, 15]


Вопрос 19.

Рассмотрите выполнение следующих операций над словарем Python. Каково состояние словаря person после завершения всех операций?

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

A. {'name': 'Alice', 'age': 26, 'city': 'New York'}

B. {'age': 26}

C. {'age': 26, 'city': 'New York'}

D. {'name': 'Alice', 'city': 'New York'}


Вопрос 20.

Каков будет результат выполнения следующего цикла Python и условных операторов?

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

A. ['2 is even', '4 is divisible by 4', '6 is even', '8 is divisible by 4', '10 is even']

B. ['1 is odd', '2 is even', '3 is odd', '4 is divisible by 4', '5 is odd', '6 is even', '7 is odd', '8 is divisible by 4', '9 is odd', '10 is even']

C. ['2 is even', '4 is even', '6 is even', '8 is even', '10 is even']

D. ['2 is divisible by 4', '4 is divisible by 4', '6 is divisible by 4', '8 is divisible by 4', '10 is divisible by 4']


Ответы


  • 11. Правильный ответ: A

    Объяснение:

    В Python идентификаторы (включая имена переменных) чувствительны к регистру. Это означает, что variable и Variable воспринимаются интерпретатором как две совершенно разные переменные.

    • Вариант A верен: Если обе переменные, variable и Variable, имеют одно и то же числовое значение, их вывод функцией print() покажет это значение, не зависимо от имени переменной. Python не будет рассматривать их как одну и ту же переменную из-за различий в регистре.

    • Вариант B не верен: Python не выдаст ошибку, что имена переменных не могут быть похожими, за исключением их регистра. Python интерпретирует их как две отдельные переменные.

    • Вариант C не верен: Python не будет автоматически перезаписывать значение variable значением Variable . Они будут существовать как две отдельные переменные.

    • Вариант D не верен: Python позволяет использовать одни и те же имена с разными регистрами для разных переменных в одном сценарии.

    Пример:

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

В результате:

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

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


  • 12. Правильный ответ: B

Объяснение:

  • Преобразование типов: Python позволяет преобразовывать значения из одного типа данных в другой с помощью специальных функций.

  • int(): Преобразует строку или число в целое число.

  • float(): Преобразует строку или число в число с плавающей точкой.

  • str(): Преобразует значение любого типа в строку.

Теперь проанализируем каждый вариант:

  • Вариант A: result = int("10.5") + 5; print(result) - Неправильный вариант, потому что функция int() не может напрямую преобразовать строку "10.5" в целое число, так как она содержит десятичную часть. Это вызовет ошибку ValueError.

  • Вариант B: result = float("10.5") + 5; print(result) - Это правильный вариант. Функция float() корректно преобразует строку "10.5" в число с плавающей точкой 10.5. Затем к этому числу добавляется целое число 5, и результат (число с плавающей точкой 15.5) выводится на экран.

  • Вариант C: result = str(10.5 + 5); print(result) - Неправильный вариант, потому что здесь сначала складываются 10.5 и 5, а затем результат 15.5 преобразуется в строку. Вместо числа с плавающей точкой мы получим строку "15.5".

  • Вариант D: result = "10.5" + str(5); print(result) - Неправильный вариант, потому что здесь строка "10.5" конкатенируется со строкой "5", в результате получается строка "10.55". Не происходит ни преобразования в число с плавающей точкой, ни сложения.

Пример:

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

В результате:

  • Вариант B успешно преобразует строку "10.5" в float, складывает с 5 и выводит результат как 15.5 с типом float.

  • Вариант A вызывает ошибку, так как невозможно преобразовать строку "10.5" в int.

Таким образом, только вариант B корректно выполняет преобразование строки в число с плавающей точкой и последующее сложение с целым числом.


  • 13. Правильный ответ: A

Объяснение:

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

  • Вариант A: x = 10; x = "ten"; print(x) - Это правильный вариант. Сначала переменной x присваивается целое число 10, а затем ей же присваивается строка "ten". Python позволяет это, демонстрируя гибкость динамической типизации.

  • Вариант B: x = 10; x = x + "10"; print(x) - Этот вариант приведет к ошибке, потому что вы пытаетесь сложить целое число со строкой. Python не выполняет неявное преобразование типов, поэтому возникнет ошибка TypeError.

  • Вариант C: x = "10"; x = int(x); x = x + 10; print(x) - Этот вариант сначала присваивает строковое значение "10" переменной x, затем преобразует его в целое число и присваивает переменной x новое значение, а затем складывает с целым числом 10. Это не демонстрирует изменение типа в течение времени, так как x будет int на протяжении 2х последних операций.

  • Вариант D: x = "10"; x = int(x); x = x + "10"; print(x) - Этот вариант похож на вариант C, но последняя операция снова использует строку, что приведет к ошибке TypeError, поскольку вы пытаетесь сложить целое число со строкой.

Пример:

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

В результате:

  • Вариант A успешно демонстрирует, как переменная x меняет тип с int на str в процессе выполнения программы.

  • Вариант B вызывает TypeError, так как Python не может автоматически сложить целое число со строкой.

Таким образом, только вариант A корректно демонстрирует гибкость динамической типизации в Python.


  • 14. Правильный ответ: A

Объяснение:

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

  • Вариант A: def print_value(x="Hello"): print(x) - это правильное определение функции с параметром по умолчанию. Если при вызове функции print_value() не передать аргумент, переменная x будет использовать значение по умолчанию "Hello".

  • Вариант B: def print_value(x, y): print(x) - Это определение функции, которое требует два обязательных параметра.

  • Вариант C: def print_value(x, y="Hello", z): print(x + y + z) - Это определение функции содержит синтаксическую ошибку. Параметры со значениями по умолчанию (y) должны стоять после всех параметров без значений по умолчанию (x, z).

  • Вариант D: def print_value(x): y = "Hello"; print(x + y) - Это определение функции с одним параметром, но в теле функции создаётся переменная y со строковым значением.

Пример:

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

В результате:

  • В варианте A, функция print_value() может быть вызвана без аргументов, и тогда будет использовано значение "Hello" по умолчанию. Если же передать аргумент, то значение по умолчанию переопределится.

  • Вариант С вызовет ошибку SyntaxError, потому что параметры со значением по умолчанию должны располагаться в конце.

Таким образом, вариант A является единственным правильным определением функции с параметром по умолчанию.


  • 15. Правильный ответ: B

Объяснение:

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

  • Вариант A: list_values = [1, 2, 3, 4, 5]; total = 0; for i in range(len(list_values) + 1): total += list_values[i]; print(total) - Неправильный вариант. Цикл for в этом варианте пытается перебрать индексы от 0 до len(list_values), включительно, что приведет к IndexError на последней итерации, потому что индексы списка начинаются с 0 и заканчиваются на len(list_values) - 1.

  • Вариант B: list_values = [1, 2, 3, 4, 5]; total = 0; for value in list_values: total += value; print(total) - Это правильный вариант. Цикл for в этом варианте итерирует напрямую по элементам списка, а не по их индексам. Это простой, эффективный и идиоматичный способ итерации по спискам в Python, при котором автоматически перебираются все элементы списка без необходимости использовать индексы.

  • Вариант C: list_values = [1, 2, 3, 4, 5]; total = 0; for i in range(1, len(list_values)): total += list_values[i]; print(total) - Неправильный вариант. Этот цикл пропустит первый элемент списка (с индексом 0), поскольку он итерирует по диапазону от 1 до len(list_values) - 1.

  • Вариант D: list_values = [1, 2, 3, 4, 5]; total = 0; for i in range(len(list_values) - 1): total += list_values[i]; print(total) - Неправильный вариант. Этот цикл пропустит последний элемент списка (с индексом len(list_values) - 1), поскольку он итерирует до len(list_values) - 2.

Пример:

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

В результате:

  • Вариант B успешно итерирует по всем элементам списка, суммирует их и выводит результат 15.

  • Вариант A вызовет ошибку IndexError при попытке обратиться к индексу 5, которого нет в списке.

Таким образом, только вариант B корректно и эффективно вычисляет сумму элементов списка.


16. Правильный ответ: A

Объяснение:

В Python оператор + используется для конкатенации (объединения) строк. Однако, он не может быть использован для прямого объединения строк с другими типами данных (например, с целыми числами). В данном коде переменная y является целым числом, поэтому ее необходимо преобразовать в строку, чтобы можно было конкатенировать ее со строковыми литералами и переменной x. Для этого используется функция str().

Разберем код по шагам:

  1. x = "Python": переменной x присваивается строковое значение "Python".

  2. y = 15: переменной y присваивается целочисленное значение 15.

  3. print("Welcome to " + x + " programming where the value of y is " + str(y)):

    • Создается строка "Welcome to ".

    • К этой строке прибавляется строка из переменной x ("Python"), используя оператор +.

    • К полученной строке прибавляется строка " programming where the value of y is ".

    • Переменная y (которая является целым числом) преобразуется в строку с помощью str(y), и далее конкатенируется с предыдущей строкой

    • Итоговая строка выводится на экран.

  • Вариант A: Welcome to Python programming where the value of y is 15 - это правильный вывод, так как переменная y правильно преобразована в строку.

  • Вариант B: Ошибка из-за несовместимых типов данных. Этот вариант был бы верен, если бы str(y) не было использовано для преобразования integer в строку.

  • Вариант C: Welcome to Python programming where the value of y is y - неверный вариант, поскольку переменная y должна быть преобразована в строку, и выведется ее значение, а не имя.

  • Вариант D: Ничего из вышеперечисленного - неверный вариант, поскольку вариант А верный

Пример:

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

В результате:

Код выполнится без ошибок, поскольку целое число y преобразуется в строку перед конкатенацией, и выведет на экран строку Welcome to Python programming where the value of y is 15.

Таким образом, вариант A является правильным ответом.


  • 17. Правильный ответ: C

Объяснение:

Функция check_number(n) проверяет число n на соответствие определенным условиям и возвращает строку в зависимости от результата проверки.

  • if n % 2 == 0:: Проверяет, является ли число n четным (то есть, делится ли оно на 2 без остатка). Если условие истинно, функция немедленно возвращает строку "Even" и прекращает выполнение.

  • elif n % 3 == 0:: Если предыдущее условие ложно (т.е. число n не является четным), проверяется, делится ли n на 3 без остатка. Если это условие истинно, функция возвращает строку "Divisible by 3" и прекращает выполнение.

  • else:: Если ни одно из предыдущих условий не выполнилось (т.е. число n не является ни четным, ни кратным 3), функция возвращает строку "Other".

Давайте проанализируем варианты ответов:

  • Вариант A не верен: Функция возвращает "Even" если число делится только на 2, а не на 2 и 3.

  • Вариант B не верен: Если число четное (делится на 2), то ветка if n % 2 == 0: выполняется первой и функция возвращает "Even", не проверяя делимость на 3.

  • Вариант C верен: Именно так работает функция, проверяя сначала на четность и потом на делимость на 3.

  • Вариант D не верен: Функция может вернуть "Other", если число не соответствует ни одному из первых двух условий.

Примеры:

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

В результате:

  • check_number(4) возвращает "Even", так как 4 делится на 2.

  • check_number(9) возвращает "Divisible by 3", так как 9 нечетное, но делится на 3.

  • check_number(7) возвращает "Other", так как 7 не делится ни на 2, ни на 3.

  • check_number(6) возвращает "Even", так как 6 делится на 2, и последующие условия не проверяются.

Таким образом, вариант C является единственным верным.


  • 18. Правильный ответ: A

Объяснение:

Этот код демонстрирует изменение списка items с помощью цикла for. Вот как работает этот код:

  1. Инициализация списка: items = [2, 4, 6, 8, 10] создает список с начальными значениями.

  2. Цикл for: for i in range(len(items)): этот цикл итерируется по индексам списка items. Функция range(len(items)) создает последовательность целых чисел от 0 до длины списка минус 1 (0, 1, 2, 3, 4 в данном случае).

  3. Изменение элементов: items[i] += 3 добавляет 3 к значению элемента списка по текущему индексу i.

  4. Вывод: print(items) выводит измененный список на экран.

Теперь разберем каждый шаг цикла:

  • i = 0: items[0] = 2 + 3 = 5

  • i = 1: items[1] = 4 + 3 = 7

  • i = 2: items[2] = 6 + 3 = 9

  • i = 3: items[3] = 8 + 3 = 11

  • i = 4: items[4] = 10 + 3 = 13

Пример:

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

В результате:

Каждый элемент исходного списка items увеличится на 3, что приведет к формированию нового списка [5, 7, 9, 11, 13].

Таким образом, вариант A является верным.


  • 19. Правильный ответ: C

Объяснение:

В этом коде происходят следующие операции со словарем person:

  1. Инициализация: person = {'name': 'Alice', 'age': 25} - Создается словарь person с начальными ключами-значениями: name: 'Alice' и age: 25.

  2. Обновление значения: person['age'] = 26 - Значение ключа 'age' изменяется с 25 на 26.

  3. Добавление элемента: person.update({'city': 'New York'}) - Добавляет новую пару ключ-значение 'city': 'New York' в словарь.

  4. Удаление элемента: del person['name'] - Удаляет пару ключ-значение с ключом 'name' из словаря.

Давайте проследим за состоянием словаря person после каждой операции:

  • Начальное состояние: {'name': 'Alice', 'age': 25}

  • После изменения age: {'name': 'Alice', 'age': 26}

  • После добавления city: {'name': 'Alice', 'age': 26, 'city': 'New York'}

  • После удаления name: {'age': 26, 'city': 'New York'}

Пример:

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

В результате:

После выполнения всех операций словарь person будет содержать пары ключ-значение {'age': 26, 'city': 'New York'}. Ключ 'name' будет удален, а значение ключа 'age' будет обновлено.

Таким образом, вариант C является верным.


  • 20. Правильный ответ: A

Объяснение:

Код выполняет итерацию по списку чисел и добавляет строки в список output в зависимости от условных проверок.

  1. Инициализация: numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] создает список чисел, а output = [] создает пустой список для хранения строк.

  2. Цикл for: for number in numbers: перебирает каждое число в списке numbers.

  3. Вложенные условные операторы:

    • if number % 2 == 0:: Проверяет, является ли число четным (делится на 2 без остатка).

    • Если число четное: if number % 4 == 0:: Проверяет, делится ли число на 4.

      • Если число делится на 4, в output добавляется строка вида "{number} is divisible by 4".

      • Если число четное, но не делится на 4, в output добавляется строка вида "{number} is even".

  4. Вывод: print(output) выводит список строк.

Теперь проследим как работает код для каждого числа:

  • 1: Нечетное, внутренние проверки пропускаются.

  • 2: Четное, не делится на 4, добавляется "2 is even".

  • 3: Нечетное, внутренние проверки пропускаются.

  • 4: Четное, делится на 4, добавляется "4 is divisible by 4".

  • 5: Нечетное, внутренние проверки пропускаются.

  • 6: Четное, не делится на 4, добавляется "6 is even".

  • 7: Нечетное, внутренние проверки пропускаются.

  • 8: Четное, делится на 4, добавляется "8 is divisible by 4".

  • 9: Нечетное, внутренние проверки пропускаются.

  • 10: Четное, не делится на 4, добавляется "10 is even".

Таким образом, список output будет содержать строки, основанные на этих условиях.

  • Вариант А: ['2 is even', '4 is divisible by 4', '6 is even', '8 is divisible by 4', '10 is even'] - является правильным ответом, точно отражающим работу кода

  • Вариант B не верен: Этот вариант добавляет сообщения для всех чисел, а не только четных.

  • Вариант C не верен: Этот вариант добавляет только "is even" для всех четных, и не проверяет делимость на 4.

  • Вариант D не верен: Этот вариант добавляет "is divisible by 4" для всех четных, что не правильно.

Пример:

101 игра на python. Вопросы собеседований. 11 - 20 Гайд, Программирование, Python, Собеседование, Длиннопост

В результате:

Код выведет список строк, как в варианте A: ['2 is even', '4 is divisible by 4', '6 is even', '8 is divisible by 4', '10 is even'].

Таким образом, вариант A является правильным.


Продолжение следует ... Подпишись, чтобы не пропустить

Удачи!

Показать полностью 19
6

101 игра на python. Вопросы собеседований. 21 - 30

Вопросы 👉 1 - 10

Вопросы 👉 11 - 20

Вопрос 21.

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

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

B. Метод __init__ предоставляет строковое представление объекта, в основном для целей отладки, и может быть вызван напрямую для просмотра отформатированной строки.

C. Метод __init__ используется для определения того, как экземпляры класса должны быть выведены в удобочитаемом формате в консоль, обычно вызывается при использовании print() или str().

D. Метод __init__ — это метод, автоматически вызываемый после выполнения любой функции внутри класса, предоставляющий механизм очистки неиспользуемых переменных.

Вопрос 22.

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

- A. *args позволяет передавать несколько ключевых аргументов, в то время как **kwargs обрабатывает несколько позиционных аргументов, что упрощает вызовы функций.

- B. *args используется для передачи переменного числа позиционных аргументов в виде кортежа, а **kwargs используется для переменных ключевых аргументов в виде словаря, что позволяет гибко вводить аргументы.

- C. *args можно использовать для передачи всех аргументов в виде списка, в то время как **kwargs работает только с аргументами на основе строк. Порядок синтаксиса не важен.

- D. *args требует, чтобы все аргументы были одного и того же типа данных, а **kwargs принуждает передавать только целые значения в качестве ключевых аргументов для обеспечения безопасности типов.

Вопрос 23.

В Python, списковое включение (list comprehension) — это краткий способ создания списков. Рассмотрим следующий код: squared_numbers = [x**2 for x in range(10) if x % 2 == 0]. Как списковое включение в этом примере сравнивается с традиционным созданием списка на основе цикла for, и каковы преимущества использования спискового включения в программировании на Python при работе с большими наборами данных или сложными преобразованиями?

- A. Списковое включение предоставляет менее эффективный способ создания списков по сравнению с традиционными циклами, часто приводя к увеличению временной сложности.

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

C. Списковое включение не может обрабатывать условия типа if и его основная выгода заключается лишь в преобразовании одного списка в другой той же длины без изменений.

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

Вопрос 25.

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

- A. Ключевое слово global используется для изменения переменных во вложенных функциях, в то время как nonlocal можно использовать для доступа к глобальным переменным напрямую из любой вложенной области видимости.

B. Ключевое слово global позволяет изменять переменную на уровне модуля внутри функции, в то время как nonlocal обеспечивает доступ к ближайшей включающей области видимости, не являющейся глобальной, помогая управлять вложенными переменными функции.

C. Ключевое слово global в основном предназначено для объявления констант в нескольких функциях, а nonlocal используется исключительно для изменения переменных уровня класса изнутри методов.

D. Ключевые слова global и nonlocal взаимозаменяемы в Python, позволяя изменять любую переменную независимо от ее исходной области видимости.

Вопрос 26.

Каково значение ключевого слова None в Python?

- A. Оно указывает на отсутствие значения или нулевое значение в переменной.

- B. Это специальный тип данных, который может быть присвоен только строковым переменным.

- C. Он представляет нулевое числовое значение в числовых вычислениях.

- D. Он используется для определения бесконечного цикла в программировании Python.

Вопрос 27.

Каков будет вывод следующего фрагмента кода Python?

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

- A. Yes

- B. No

- C. True

- D. Error

Вопрос 28.

В Python, что делает метод append() при применении к списку?

- A. Он сливает другой список с текущим списком в указанной позиции.

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

- C. Он вычисляет общую сумму всех числовых элементов в списке.

- D. Он удаляет последний элемент списка и возвращает его.

Вопрос 29. Дан следующий словарь Python, как вы получите доступ к значению, связанному с ключом 'color'?

car = {"brand": "Ford", "model": "Mustang", "year": 1964, "color": "red"}

- A. car[1]

- B. car.get("color")

- C. car[color]

- D. car['color']

Вопрос 30.

Что делает метод split() в Python строках?

- A. Разделяет строку на подстроки в местах, где встречается указанный разделитель, и возвращает эти подстроки в виде списка.

- B. Объединяет несколько строк в одну строку, разделенную указанным символом.

- C. Выполняет поиск указанной подстроки в строке и возвращает ее позицию.

- D. Заменяет указанные элементы строки новой строкой.


Ответы


21, Правильный ответ: A

Объяснение:

Метод __init__ — это специальный метод (также известный как "конструктор") в Python, который автоматически вызывается при создании нового экземпляра класса. Он играет ключевую роль в процессе инициализации объекта, устанавливая его начальное состояние и значения его атрибутов.

Давайте разберем каждый из вариантов:

  • Вариант A: Утверждает, что __init__ отвечает за инициализацию объекта как конструктор. Это верное утверждение. Он задает начальное состояние нового экземпляра.

  • Вариант B: Описывает роль метода __init__ как метода предоставляющего строковое представление объекта. Это неправильно, так как строковое представление объекта предоставляет метод __str__, а не __init__.

  • Вариант C: Описывает функцию метода __init__, как вывод экземпляров класса в удобочитаемом формате. Это неверно. За это ответственны методы __str__ и __repr__.

  • Вариант D: Утверждает, что __init__ вызывается после выполнения любой функции внутри класса как механизм очистки неиспользуемых переменных. Это тоже неверно. Метод __init__ вызывается только при создании нового объекта класса.

Сравнение с другими методами:

  • __str__() является другим специальным методом в Python, который предназначен для получения "человеко-читаемого" строкового представления объекта. Он вызывается функциями print() или str(). В отличие от __init__(), __str__() не используется для инициализации, а для отображения объекта.

  • Пользовательские методы (определенные пользователем) — это обычные методы класса, которые могут выполнять любые действия, но их нужно вызывать явно. В отличие от __init__(), они не вызываются автоматически при создании объекта.

Пример:

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

В результате:

  • __init__() вызывается при создании obj1 и инициализирует его атрибуты name и age.

  • __str__() используется функцией print, чтобы получить строковое представление объекта.

  • Метод some_method() вызывается явно через obj1.some_method().

Таким образом, вариант A является единственным правильным, так как он точно описывает роль и поведение метода __init__.


22, Правильный ответ: B

Объяснение:

В Python *args и **kwargs являются мощными инструментами для создания гибких функций, которые могут принимать переменное количество аргументов.

  • *args:

    • Собирает позиционные аргументы (аргументы, переданные в функцию без указания имени параметра) в кортеж.

    • Позволяет функции принимать любое количество позиционных аргументов.

    • Внутри функции args это обычная переменная-кортеж, с которой можно работать.

  • **kwargs:

    • Собирает именованные аргументы или ключевые аргументы (аргументы, переданные в функцию в формате имя=значение) в словарь.

    • Позволяет функции принимать любое количество ключевых аргументов.

    • Внутри функции kwargs это обычная переменная-словарь, с которой можно работать.

Теперь посмотрим на варианты ответов:

  • Вариант A неверный: Он путает роли *args и **kwargs.

  • Вариант B верен: Это описание точно отражает предназначение *args и **kwargs.

  • Вариант C не верен: *args не передает аргументы в виде списка, а **kwargs не работает только со строковыми аргументами. Порядок синтаксиса важен, *args должен быть перед **kwargs.

  • Вариант D не верен: *args и **kwargs не накладывают ограничений на типы передаваемых данных.

Пример:

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

В результате:

В этом примере функция my_function принимает один обязательный позиционный аргумент arg1, а затем использует *args для сбора позиционных аргументов в кортеж и **kwargs для сбора ключевых аргументов в словарь.

Таким образом, вариант B является верным и точно описывает роли *args и **kwargs для гибкого ввода аргументов.


23, Правильный ответ: B

Объяснение:

Списковое включение в Python – это краткий и выразительный способ создания новых списков на основе существующих итерируемых объектов. Это альтернатива традиционным циклам for, и часто более эффективная и читаемая.

  • Вариант A не верен: списковое включение обычно более эффективно, чем традиционные циклы.

  • Вариант B верен: списковое включение предлагает более лаконичный, читабельный и эффективный способ создания списков, что часто приводит к повышению производительности.

  • Вариант C не верен: списковое включение поддерживает условные выражения, такие как if.

  • Вариант D не верен: списковое включение подходит для различных типов данных и сложных преобразований, а не только числовых списков.

Сравнение с традиционным циклом for:

Вот как можно было бы создать список squared_numbers традиционным способом:

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

И вот как это делается с помощью спискового включения:

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

Преимущества спискового включения:

  1. Краткость: Списковое включение позволяет создавать списки в одну строку, уменьшая объем кода.

  2. Читаемость: Списковое включение делает код более лаконичным и выразительным.

  3. Производительность: Списковое включение часто более эффективно по производительности, чем использование традиционных циклов for, особенно при работе с большими наборами данных, так как Python выполняет итерацию и создание списка внутри себя более оптимальным образом.

  4. Гибкость: Списковые включения позволяют включать условные выражения и выполнять преобразования элементов, что делает их мощным инструментом для работы со списками.

В результате:

  • Списковое включение обеспечивает более лаконичный и эффективный способ создания списка, чем традиционные циклы for.

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

Таким образом, вариант B является правильным ответом, который верно описывает преимущества спискового включения.


24, Правильный ответ: A

Объяснение:

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

  • try блок: Этот блок содержит код, который потенциально может вызвать исключение. Исключение может возникнуть в результате ошибки во время выполнения программы (например, деление на ноль или попытка открыть несуществующий файл).

  • except блок: Этот блок содержит код, который выполняется, когда возникает исключение в блоке try. Он перехватывает исключение и обрабатывает его, предотвращая аварийное завершение программы. Вы можете указать тип исключения, которое хотите обработать, чтобы конкретизировать, какие ошибки будут отловлены.

Иерархия исключений Python:

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

  • Exception является базовым классом для всех исключений.

  • ZeroDivisionError и FileNotFoundError являются более конкретными исключениями, которые наследуются от Exception.

Благодаря этой иерархии, можно перехватывать общие исключения Exception, а можно перехватывать более конкретные исключения, например ZeroDivisionError или FileNotFoundError, которые наследуются от Exception.

Теперь рассмотрим варианты ответа:

  • Вариант A является правильным, поскольку точно описывает, как try и except работают, и как иерархия исключений позволяет обрабатывать ошибки более точно.

  • Вариант B не верен: try и except используются для корректной обработки ошибок, а не для их игнорирования.

  • Вариант C не верен: Блок try может перехватывать и синтаксические ошибки, блок except предназначен для вывода сообщений и не занимается логированием.

  • Вариант D не верен: try и except перехватывают ошибки в коде, который может упасть, а не игнорируют его.

Пример:

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

В результате:

  • Первый блок try приведет к возникновению ZeroDivisionError, которое будет перехвачено в блоке except ZeroDivisionError и программа выведет сообщение "Ошибка: Деление на ноль!".

  • Второй блок try вызовет ошибку FileNotFoundError, поскольку файл "not_existing_file.txt" не существует. except FileNotFoundError отловит это исключение и программа выведет "Ошибка: Файл не найден!".

Таким образом, вариант A является правильным, так как он точно описывает, как работает механизм try-except с иерархией исключений.


25, Правильный ответ: B

Объяснение:

Ключевые слова global и nonlocal в Python предназначены для управления видимостью и модификацией переменных в различных областях видимости.

  • global:

    • Используется внутри функции для указания, что переменная, к которой обращается функция, объявлена в глобальной области видимости (т.е. на уровне модуля).

    • Позволяет изменять глобальные переменные изнутри функции.

    • Без global любая переменная, которой присваивается значение внутри функции, автоматически считается локальной переменной этой функции, даже если переменная с таким же именем существует в глобальной области видимости.

  • nonlocal:

    • Используется внутри вложенной функции для указания, что переменная, к которой обращается функция, объявлена в ближайшей включающей области видимости, не являющейся глобальной (обычно это область видимости внешней функции).

    • Позволяет изменять переменные из области видимости внешней функции изнутри внутренней функции.

    • nonlocal не ищет переменные в глобальной области видимости, если они не объявлены в области внешней функции.

Давайте разберем варианты ответов:

  • Вариант A не верен: Он описывает обратное предназначение global и nonlocal.

  • Вариант B верен: Оно точно отражает роли global и nonlocal при работе с областями видимости в функциях.

  • Вариант C не верен: Ключевое слово global не используется для объявления констант.

  • Вариант D не верен: global и nonlocal не взаимозаменяемы, и имеют разное предназначение.

Пример:

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

В результате:

  • В примере global переменная global_var была объявлена на уровне модуля, затем функция modify_global_var изменила ее и это изменение отразилось во вне функции.

  • В примере nonlocal переменная outer_var была объявлена во внешней функции, затем изменена во внутренней функции, и это изменение также отразилось во внешней функции.

Таким образом, вариант B является верным, точно описывая предназначение global и nonlocal.


26, Правильный ответ: A

Объяснение:

Ключевое слово None в Python обозначает отсутствие значения или нулевое значение. Это специальная константа, представляющая собой объект типа NoneType.

  • Вариант A верен: None используется для представления отсутствия значения, подобно null в других языках.

  • Вариант B не верен: None является отдельным типом данных NoneType и может присваиваться переменным любого типа.

  • Вариант C не верен: None не представляет числовое значение 0.

  • Вариант D не верен: None не используется для определения бесконечных циклов.

Примеры:

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

В результате:

  • Переменной my_variable можно присвоить None как значение, и это не вызовет ошибки.

  • None является отдельным типом данных (NoneType).

  • Функция my_function обрабатывает случай, когда ей не передают значение, возвращая None.

Таким образом, вариант A является верным.


27, Правильный ответ: B

Объяснение:

В этом коде используется условный оператор if...else для проверки двух условий и вывода соответствующего сообщения.

  1. Инициализация переменных: x = 10 и y = 50.

  2. Условный оператор:

    • if x ** 2 > 100 and y < 100:: Это условие проверяет, верно ли, что x в квадрате больше 100, И y меньше 100. Оператор and требует истинности обоих условий для выполнения блока if.

    • else:: Если условие if ложно (хотя бы одно из условий не выполнится), будет выполнен блок else.

Разберем условия:

  • x ** 2 > 100

    • x равно 10, поэтому x ** 2 равно 10 * 10 = 100.

    • Условие 100 > 100 ложно.

  • y < 100

    • y равно 50, поэтому 50 < 100 истинно.

Так как одно из условий x ** 2 > 100 ложно, то все составное условие x ** 2 > 100 and y < 100 будет ложным, и поэтому выполнится блок else.

  • Вариант A не верен: Блок if выполнится только если оба условия будут True, а не False.

  • Вариант B верен: блок else выведет "No", так как одно из условий if не выполнилось.

  • Вариант C не верен: Условие if возвращает False, а не True, поэтому "True" выведено не будет.

  • Вариант D не верен: Код является синтаксически верным, поэтому не возникнет ошибки.

Пример:

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

В результате:

Так как условие x ** 2 > 100 and y < 100 не выполняется, поскольку 10 ** 2 = 100, то на экран выведется "No".

Таким образом, вариант B является правильным ответом.


28, Правильный ответ: B

Объяснение:

Метод append() в Python используется для добавления одного элемента в конец списка. При этом размер списка увеличивается на единицу.

  • Вариант A не верен: Для слияния списков используется метод extend() или оператор +, а не append().

  • Вариант B верен: append() именно добавляет элемент в конец списка, увеличивая его размер.

  • Вариант C не верен: append() не выполняет никаких арифметических операций.

  • Вариант D не верен: Для удаления последнего элемента списка с возвратом его значения используется метод pop(), а не append().

Пример:

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

В результате:

В примере видно, что append() добавляет новый элемент в конец списка, а также добавляет другой список как единый элемент.

Таким образом, вариант B является правильным ответом.


19, Правильный ответ: D

Объяснение:

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

  • Вариант A не верен: car[1] - попытается получить доступ к элементу по числовому индексу 1, а не по ключу 'color'. Это приведет к ошибке, поскольку словари не поддерживают числовую индексацию.

  • Вариант B верен: car.get("color") - это правильный способ доступа к значению по ключу с помощью метода get(), который также позволяет вернуть значение по умолчанию в случае отсутствия ключа.

  • Вариант C не верен: car[color] - попытается использовать переменную color, а не строковый ключ "color". Это приведет к ошибке, если переменная color не объявлена.

  • Вариант D верен: car['color'] - это прямой и наиболее распространенный способ доступа к значению по ключу, заключенному в кавычки.

Пример:

101 игра на python. Вопросы собеседований. 21 - 30 Гайд, Инструкция, Python, IT, Длиннопост

В результате:

  • Варианты B и D дают правильный результат и позволяют получить значение ключа 'color', выводя на экран строку "red".

  • Вариант A вызывает исключение KeyError, так как в словаре нет числовых ключей.

  • Вариант C вызывает исключение NameError, если переменная color не объявлена.

Таким образом, вариант D является наиболее распространенным и прямым способом доступа к значению по ключу в словаре, а вариант B является корректным, хотя и немного более многословным.


Чтобы не пропустить следующие выпуски - подпишись!

Показать полностью 11
4

101 игра на python. Вопросы собеседований. 31 - 40

Вопросы 👉 1 - 10

Вопросы 👉 11 - 20

Вопросы 👉 21 - 30

Вопрос 31.

Какое из следующих утверждений точно описывает роль и применение декораторов Python в усилении или изменении поведения функций или методов в программе?

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

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

  • C. Декораторы Python служат для увеличения использования памяти функциями, поскольку они вводят новые слои и структуры, тем самым замедляя общий процесс выполнения.

  • D. Декораторы в Python могут применяться только к методам объектно-ориентированного программирования, в частности к взаимодействиям методов класса, а не к автономным функциям.


Вопрос 32.

Каковы последствия и типичные применения ключевого слова yield в реализации генераторов Python, учитывая его полезность в управлении памятью и контроле потока в больших наборах данных?

  • A. Ключевое слово yield заставляет функцию возвращать генератор, который может быть итерирован, позволяя Python лениво генерировать элементы по одному и только по мере необходимости, тем самым сохраняя память.

  • B. Это вызывает немедленное завершение выполнения функции генератора, высвобождая все ресурсы, которые она приобрела во время своей работы.

  • C. Yield преобразует любую Python функцию в многопоточную подпрограмму, способную выполняться параллельно с другими функциями.

  • D. Он служит инструментом отладки в Python, позволяющим разработчикам отслеживать значения, возвращаемые из функций во время выполнения, не влияя на выполнение функции.


Вопрос 33.

Учитывая динамическую систему типизации Python, как обработка типов данных без явного объявления влияет на присваивание переменных и манипуляции ими внутри скрипта?

  • A. Динамическая система типизации Python означает, что переменные могут быть переназначены значениям разных типов без ошибок, обеспечивая гибкие и быстрые циклы разработки.

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

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

  • D. Отсутствие явного объявления типа позволяет Python автоматически оптимизировать скорость выполнения кода, выводя типы и компилируя оптимизированный байт-код на лету.


Вопрос 34.

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

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

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

  • C. Неизменяемые аргументы по умолчанию, в отличие от изменяемых, значительно замедляют выполнение функций, заставляя Python воссоздавать значение по умолчанию при каждом вызове функции.

  • D. Изменяемые аргументы по умолчанию предотвращают утечку памяти за счет автоматического сброса состояния функции после каждого вызова, гарантируя, что никакие остаточные данные не сохраняются.


Вопрос 35.

Как списковое включение в Python обеспечивает более эффективную и читаемую альтернативу традиционным циклам для создания списков, особенно при обработке и преобразовании больших объемов данных?

  • A. Списковые включения позволяют кратко создавать списки, интегрируя логику цикла и условия в одну ясную и выразительную строку кода, что повышает скорость разработки и эффективность выполнения.

  • B. Они предоставляют способ обхода системы сборки мусора Python за счет прямого взаимодействия с базовым C API, что ускоряет задачи обработки данных.

  • C. Эта функция является чисто синтаксическим сахаром, не влияющим на производительность, но улучшает читаемость кода, позволяя записывать циклы в более многословной форме.

  • D. Списковые включения требуют предварительного объявления всех переменных, используемых в них, тем самым обеспечивая безопасность типов и предотвращая ошибки времени выполнения, связанные с неопределенными переменными.


Вопрос 36.

Рассматривая использование метода __init__ в определениях классов Python, как он функционирует в жизненном цикле объекта для инициализации состояния или настройки необходимых свойств сразу после создания экземпляра?

  • A. Метод __init__ вызывается автоматически каждый раз, когда класс наследуется, чтобы гарантировать, что производный класс наследует все свойства и методы родительского класса без явного объявления.

  • B. Он действует как конструктор для класса, автоматически вызывается при создании нового экземпляра объекта для инициализации атрибутов экземпляра или выполнения любой другой необходимой начальной настройки.

  • C. Этот метод служит деструктором для экземпляров класса, отвечающим за освобождение ресурсов, которые объект мог получить в течение своей жизни.

  • D. Метод __init__ в Python вызывается каждый раз при копировании объекта, гарантируя, что новый экземпляр получает отдельную копию начального состояния объекта.


Вопрос 37.

Как обработка исключений в Python с помощью блоков try-except помогает в надежной разработке программ, особенно с точки зрения непрерывности работы и управления ошибками?

  • A. Блоки try-except в Python предназначены только для перехвата синтаксических ошибок в коде, позволяя программам быть синтаксически правильными и безошибочными.

  • B. Эти блоки используются для тестирования блока кода на наличие ошибок, перехвата возникающих исключений и обработки их в блоке except, что предотвращает внезапное завершение программы.

  • C. Структура try-except автоматически исправляет логические ошибки в коде, гарантируя выполнение намеченных операций без ручного вмешательства.

  • D. Эта конструкция используется для повышения скорости выполнения кода путем игнорирования исключений, которые не являются критическими для основной функциональности приложения.


Вопрос 38.

Какую роль играет ключевое слово global в функциях Python при работе с переменными, определенными за пределами области видимости функции, особенно при изменении этих переменных в локальном контексте?

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

  • B. Оно позволяет функции изменять значение переменной глобально, а не только в локальной области видимости, путем объявления переменной внутри функции как идентичной той, что определена вне функции.

  • C. Python использует ключевое слово global для защиты внешних переменных от случайного изменения внутри функций, обеспечивая неизменяемое поведение.

  • D. Ключевое слово global автоматически инициализирует внешние переменные внутри каждой области видимости функции, чтобы обеспечить единообразные значения на протяжении всей программы.


Вопрос 39.

В программировании на Python, как использование функции enumerate улучшает функциональность циклов, особенно при итерации по последовательностям, которые требуют доступа как к индексу, так и к значению элемента?

  • A. Enumerate предоставляет автоматический механизм для выхода из циклов при выполнении указанного условия, оптимизируя производительность цикла и стратегию выхода.

  • B. Она упрощает процесс получения индекса элементов по мере их итерации, возвращая итерируемый объект, который создает пары индекса и соответствующего элемента из последовательности.

  • C. Функция enumerate шифрует каждый элемент последовательности во время итерации для безопасной обработки и хранения.

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


Вопрос 40.

Обсудите последствия использования оператора pass в Python в условных и циклических структурах, особенно с точки зрения разработки кода и использования в качестве заполнителя.

  • A. Оператор pass в Python действует как инструмент разработки, который временно увеличивает скорость выполнения циклов, пропуская вычислительные шаги, которые еще не реализованы.

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

  • C. Оператор pass в Python автоматически обрабатывает управление памятью, освобождая неиспользуемые ресурсы внутри циклов и условий, повышая производительность.

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


Ответы


31, Правильный ответ: A

Объяснение:

Декораторы в Python — это мощный инструмент, который позволяет модифицировать поведение функций или методов без прямого изменения их кода. Они работают как обертки, которые добавляют дополнительную функциональность до или после вызова исходной функции.

  • Вариант A верен: Декораторы позволяют обернуть функцию и добавить к ней дополнительный функционал, не изменяя саму функцию.

  • Вариант B не верен: Декораторы не предназначены для уменьшения скорости выполнения функций. Наоборот, они могут использоваться для оптимизации, например, с помощью мемоизации.

  • Вариант C не верен: Декораторы не обязательно увеличивают использование памяти и могут улучшить производительность.

  • Вариант D не верен: Декораторы могут применяться как к методам класса, так и к обычным функциям.

Пример:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

В результате:

  • Декоратор timer обертывает функцию my_function и измеряет время ее выполнения.

  • При вызове my_function, декоратор добавляет функциональность измерения времени, а затем выводит результат.

  • При использовании обертки без @, функция test_function будет обернута в декоратор, но это не изменит само определение функции.

Таким образом, вариант A является верным, так как он точно описывает назначение и применение декораторов в Python.


32, Правильный ответ: A

Объяснение:

Ключевое слово yield играет важную роль в определении генераторов в Python. Генераторы - это особый вид функций, которые возвращают итераторы. Они позволяют создавать последовательность значений ленивым образом, то есть значения генерируются только по запросу (когда к ним обращаются), а не заранее.

  • Вариант A верен: yield превращает функцию в генератор, который лениво возвращает значения по одному, сохраняя память.

  • Вариант B не верен: yield не завершает выполнение функции, а приостанавливает её и сохраняет состояние, возвращая значение.

  • Вариант C не верен: yield не делает функцию многопоточной.

  • Вариант D не верен: yield не является инструментом для отладки.

Основные отличия от return:

  • return: Завершает выполнение функции и возвращает одно значение. После return функция прекращает свою работу.

  • yield: Приостанавливает выполнение функции, возвращает текущее значение и сохраняет состояние функции. При следующем запросе следующего элемента, функция возобновляет свое выполнение с места, где она остановилась на yield.

Преимущества генераторов:

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

  • Ленивые вычисления: Значения генерируются только тогда, когда они действительно нужны.

  • Удобство итерации: Генераторы возвращают итераторы, которые могут быть использованы в циклах for.

Пример:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

В результате:

Функция my_generator использует yield, чтобы генерировать значения одно за другим. При каждом запросе следующего значения с помощью for цикла, функция возобновляет своё выполнение и возвращает очередное значение. При этом все значения не хранятся в памяти, экономя место.

Таким образом, вариант A является правильным ответом.


33, Правильный ответ: A

Объяснение:

Динамическая типизация является одной из ключевых особенностей Python, которая влияет на то, как переменные обрабатываются во время выполнения программы.

  • Вариант A верен: Динамическая типизация в Python действительно позволяет переменным менять свой тип в процессе выполнения программы. Это обеспечивает гибкость и ускоряет процесс разработки, позволяя разработчикам быстро прототипировать и менять код без необходимости беспокоиться о строгих типах.

  • Вариант B не верен: Динамическая типизация не требует от разработчиков ручного управления памятью. Память выделяется и освобождается автоматически Python.

  • Вариант C не верен: В динамической типизации типы переменных могут меняться в процессе выполнения.

  • Вариант D не верен: Python не оптимизирует код, компилируя его на лету на основе типов.

Подробности о динамической типизации:

  • Отсутствие явного объявления типа: В Python не нужно указывать тип данных переменной при ее создании. Тип данных определяется автоматически в зависимости от присваиваемого значения.

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

  • Типы проверяются во время выполнения: Проверка типов происходит во время выполнения программы, а не при компиляции. Это называется "динамической проверкой типов".

Пример:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

В результате: В этом примере одна и та же переменная x успешно меняет свой тип с int на str, а затем на list без каких-либо ошибок, наглядно демонстрируя динамическую типизацию.

Таким образом, вариант A является верным.


34, Правильный ответ: B

Объяснение:

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

  • Вариант A не верен: Изменения в изменяемых значениях по умолчанию сохраняются между вызовами, а не обновляются. Это причина проблем, а не преимущества.

  • Вариант B верен: Это верное описание проблемы: изменения в значениях по умолчанию сохраняются при будущих вызовах функции, что может привести к ошибкам.

  • Вариант C не верен: Неизменяемые значения по умолчанию (например, числа, строки, кортежи) не вызывают проблем с сохранением состояния.

  • Вариант D не верен: Изменяемые значения по умолчанию как раз таки могут привести к утечкам памяти.

Пример:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

В результате:

  • При первом вызове функции append_to_list(1), создается список [], и 1 добавляется в него, выводя [1].

  • При втором вызове append_to_list(2), используется тот же самый список, который был создан ранее, поэтому 2 добавляется к нему, и выводится [1, 2].

  • При вызове append_to_list(3, []), в функцию передается новый список, а значение по умолчанию не используется, вывод [3].

  • При последнем вызове, снова используется старый список из первых двух вызовов, и в него добавится 4.

Чтобы избежать такой проблемы, часто используется значение None в качестве значения по умолчанию и выполняется проверка на None в функции:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

Таким образом, вариант B является верным, так как точно описывает проблему и её последствия.


35, Правильный ответ: A

Объяснение:

Списковые включения (list comprehensions) в Python являются мощным инструментом для создания списков в более компактной и выразительной форме. Они объединяют в себе функциональность цикла for и условных выражений в одну строку кода.

  • Вариант A верен: Списковые включения действительно повышают скорость разработки, за счет краткости и читаемости кода, а также они более эффективны, чем традиционные циклы.

  • Вариант B не верен: Списковые включения не обходят систему сборки мусора Python.

  • Вариант C не верен: Списковые включения влияют на производительность кода, они обычно выполняются быстрее, чем аналогичные циклы for.

  • Вариант D не верен: Списковые включения не требуют предварительного объявления переменных.

Преимущества списковых включений:

  1. Краткость: Они позволяют создавать списки в одну строку кода, что делает код более компактным.

  2. Читаемость: Они делают код более выразительным и легким для понимания, особенно при простых операциях.

  3. Производительность: Они часто более эффективны, чем эквивалентные циклы for, так как Python оптимизирует их внутреннюю работу.

  4. Гибкость: Они позволяют использовать условные выражения (if) и выполнять преобразование элементов непосредственно при создании списка.

Пример:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

В результате:

Оба примера создают один и тот же список [4, 16], но списковое включение делает это более кратко и выразительно.

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


36, Правильный ответ: B

Объяснение:

Метод __init__ в Python является конструктором класса. Он автоматически вызывается при создании нового экземпляра (объекта) класса.

  • Вариант A не верен: __init__ не имеет отношения к наследованию. Он вызывается для инициализации созданного объекта.

  • Вариант B верен: __init__ является конструктором, который инициализирует объект, предоставляя начальное состояние или необходимые атрибуты.

  • Вариант C не верен: Деструкторы в Python обрабатываются методом __del__, а не __init__.

  • Вариант D не верен: Метод __init__ не вызывается при копировании объекта, он вызывается при создании объекта.

Ключевые моменты о __init__:

  • Автоматический вызов: Он автоматически вызывается интерпретатором Python при создании нового экземпляра класса.

  • Инициализация: Основная цель — инициализировать атрибуты объекта с начальными значениями.

  • Настройка: Внутри этого метода можно выполнить любую необходимую настройку или предварительную обработку данных, требуемых для работы объекта.

  • Параметры: Он принимает аргумент self, который ссылается на создаваемый объект, а также любые дополнительные параметры, которые нужно передать при создании экземпляра.

Пример:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

В результате:

  • Когда мы создаем объект person1, метод __init__ вызывается автоматически.

  • Внутри метода __init__, мы можем инициализировать self.name и self.age

  • Затем объект можно использовать, вызывая метод greet().

Таким образом, вариант B является правильным, поскольку он точно описывает роль метода __init__ как конструктора для класса.


37, Правильный ответ: B

Объяснение:

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

  • try блок: Содержит код, в котором может возникнуть исключение (ошибка времени выполнения).

  • except блок: Содержит код, который выполняется, если в блоке try возникает исключение. В блоке except можно определить, как именно обрабатывать исключение, чтобы предотвратить аварийное завершение программы.

Теперь рассмотрим варианты ответов:

  • Вариант A не верен: try-except предназначены для перехвата ошибок времени выполнения, а не синтаксических.

  • Вариант B верен: Блоки try-except действительно позволяют перехватывать исключения и корректно их обрабатывать, что препятствует внезапному завершению программы.

  • Вариант C не верен: try-except не исправляют логические ошибки автоматически, они перехватывают исключения.

  • Вариант D не верен: try-except не игнорируют исключения, а обрабатывают их.

Как try-except помогают в надежной разработке:

  1. Предотвращение сбоев: try-except позволяет перехватывать исключения и продолжать выполнение программы, а не завершать ее аварийно.

  2. Обработка ошибок: except блок позволяет разработчику обрабатывать исключение, например, вывести сообщение об ошибке, выполнить какие-то действия по восстановлению, или корректно завершить работу программы.

  3. Контроль потока выполнения: позволяет продолжать выполнение программы, когда происходит ошибка, перенаправляя ход выполнения в блок except.

  4. Улучшение опыта пользователя: Блоки try-except позволяют показывать пользователям более информативные сообщения об ошибках, а не просто наблюдать аварийное завершение программы.

Пример:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

В результате:

  • В примере выше функция divide() корректно делит число x на y.

  • Если y будет равен 0, то будет перехвачено исключение ZeroDivisionError, и программа выведет сообщение "Ошибка: Деление на ноль!" и вернёт None, а не завершит работу аварийно.

Таким образом, вариант B является верным ответом.


38, Правильный ответ: B

Объяснение:

Ключевое слово global в Python используется внутри функции для явного указания, что переменная, к которой происходит обращение в функции, является глобальной, то есть объявленной вне локальной области видимости этой функции.

  • Вариант A не верен: Ключевое слово global не ограничивает доступ только для чтения, оно позволяет изменять глобальные переменные.

  • Вариант B верен: Именно global позволяет функции изменять значения переменных, объявленных вне ее локальной области видимости.

  • Вариант C не верен: global не используется для защиты от изменения, а наоборот, позволяет его.

  • Вариант D не верен: global не инициализирует автоматически переменные, а дает доступ к объявленным.

Подробное объяснение:

  1. Локальная область видимости: По умолчанию, когда вы определяете переменную внутри функции, она является локальной для этой функции. Это означает, что она существует и может использоваться только внутри этой функции.

  2. Глобальная область видимости: Переменные, объявленные вне любой функции, существуют в глобальной области видимости и доступны из любой точки модуля.

  3. Изменение глобальных переменных: Если вы хотите изменить глобальную переменную внутри функции, вы должны использовать ключевое слово global для ее объявления внутри функции. Без global, Python считает, что вы хотите создать новую, локальную переменную с тем же именем, и изменения не будут влиять на глобальную переменную.

Пример:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

В результате:

  • Функция modify_global_variable использует ключевое слово global, чтобы сообщить, что она работает с глобальной переменной global_var.

  • Изменение global_var внутри функции повлияло на переменную в глобальной области видимости.

Таким образом, вариант B является правильным, точно описывая роль и действие global.


39, Правильный ответ: B

Объяснение:

Функция enumerate() в Python является мощным инструментом для итерации по последовательностям (например, спискам, кортежам, строкам) с одновременным доступом к индексу и значению элемента.

  • Вариант A не верен: enumerate не обеспечивает механизма для прерывания цикла.

  • Вариант B верен: Функция enumerate возвращает итерируемый объект, который генерирует пары (индекс, значение) для каждого элемента последовательности.

  • Вариант C не верен: enumerate не выполняет шифрование данных.

  • Вариант D не верен: enumerate не влияет на скорость выполнения, оно лишь облегчает доступ к индексам.

Как работает enumerate():

  • enumerate() принимает в качестве аргумента итерируемый объект (последовательность).

  • Он возвращает итератор, который генерирует кортежи вида (индекс, элемент).

  • Первый индекс равен 0 по умолчанию, но это можно изменить, передав второй аргумент start.

Пример:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

Преимущества использования enumerate():

  • Упрощение доступа к индексу: Он упрощает получение индекса элементов при итерации, делая код более чистым и понятным.

  • Уменьшение ошибок: Позволяет избежать ошибок, связанных с ручным управлением индексами.

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

В результате:

  • enumerate позволяет упростить получение индекса и элемента в цикле

  • Возвращает итерируемый объект, который генерирует пару индекс-значение.

Таким образом, вариант B является правильным ответом.


40, Правильный ответ: B

Объяснение:

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

  • Вариант A не верен: pass не влияет на скорость выполнения, так как он не выполняет никаких действий.

  • Вариант B верен: pass используется как заполнитель в случаях, когда синтаксис Python требует наличия кода, но разработчик ещё не определил, что нужно выполнить.

  • Вариант C не верен: pass не имеет отношения к управлению памятью.

  • Вариант D не верен: pass не является инструментом отладки и не имеет никаких специальных возможностей вывода информации.

Области применения pass:

  1. Заполнитель в функциях: Когда вы только начинаете писать функцию и еще не знаете, какой именно код там должен быть, можно использовать pass.

  2. Заполнитель в классах: В классах, где вы ещё не определили все методы, pass можно использовать для создания пустых методов.

  3. Заполнитель в циклах: В циклах, где требуется условный оператор (например, if), но не нужно выполнять никаких действий, можно использовать pass в блоке else.

  4. Условные операторы: В условных блоках (например, if) можно использовать pass для пропуска каких-либо действий при определенных условиях.

Пример:

101 игра на python. Вопросы собеседований. 31 - 40 Python, Собеседование, Гайд, IT, Длиннопост

В результате:

  • В примере с функцией my_function, pass позволяет создать функцию, которая ничего не делает.

  • В примере с классом MyClass pass позволяет создать методы, которые ничего не делают.

  • В примере с циклом for pass позволяет пропустить действия для четных чисел.

Таким образом, вариант B является верным, так как он точно описывает роль pass в качестве оператора-заполнителя.


Продолжение следует. Подпишись, чтобы не пропустить.

Удачи!

Показать полностью 11
6

101 игра на python. Вопросы собеседований. 41 - 50

Вопросы 👉 1 - 10

Вопросы 👉 11 - 20

Вопросы 👉 21 - 30

Вопросы 👉 31 - 40


Вопрос 41.

Какова основная цель и функциональность декоратора @staticmethod в классах Python, и как он влияет на взаимодействие метода с атрибутами класса и экземпляра?

  • A. Декоратор @staticmethod преобразует метод в метод только для класса, который может изменять только атрибуты класса и не может получать доступ или изменять данные, специфичные для экземпляра.

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

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

  • D. Декоратор @staticmethod ограничивает метод возможностью вызова только во время создания объекта класса, в первую очередь используется для инициализации статических атрибутов класса.


Вопрос 42.

Учитывая значительные особенности типа данных "список" в Python, каковы последствия использования списков для операций, включающих частое вставление и удаление элементов, особенно в начале списка?

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

  • B. Списки Python реализованы как массивы, а это означает, что вставки и удаления в начале списка могут быть медленными, поскольку они требуют сдвига всех последующих элементов в памяти.

  • C. Тип данных "список" автоматически сортирует свои элементы для поддержания порядка после каждой вставки или удаления, что значительно повышает производительность при частом добавлении или удалении элементов.

  • D. Списки в Python — это связанные списки, гарантирующие, что вставка или удаление элементов в любой позиции, включая начало, выполняется стабильно быстро.


Вопрос 43.

Как оператор with в Python повышает читаемость кода и управление ресурсами, особенно в контексте обработки файлов и других ресурсоемких операций?

  • A. Оператор with ограничивает блок выполнения доступом только к внешним ресурсам, гарантируя, что все ресурсоемкие операции будут централизованы.

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

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

  • D. Оператор with ускоряет выполнение кода внутри своего блока, оптимизируя использование памяти и циклы ЦП.


Вопрос 44.

В Python, как функция zip облегчает обработку нескольких итерируемых объектов, и каков ее типичный случай использования в задачах манипулирования и агрегации данных?

  • A. Функция zip объединяет несколько списков в один список кортежей, где каждый кортеж содержит элементы из всех списков по определенному индексу, оптимизируя использование памяти за счет сжатия данных.

  • B. Она итерирует по нескольким итерируемым объектам одновременно, возвращая итератор кортежей, где каждый кортеж содержит элементы итерируемых объектов с тем же индексом, что полезно для параллельной обработки данных.

  • C. Функция zip в Python шифрует данные из нескольких итерируемых объектов для защиты их содержимого перед обработкой, в основном используется в приложениях, работающих с конфиденциальными данными.

  • D. Эта функция транслирует наименьший итерируемый объект в более крупные, автоматически заполняя пропущенные значения для синхронизации.


Вопрос 45.

Каково назначение и типичное применение оператора assert в Python, особенно в контексте отладки и разработки более надежного кода?

  • A. Оператор assert в Python в основном используется для определения главной функции программы, гарантируя, что она является первой частью исполняемого кода.

  • B. Он используется для проверки корректности условий в программе; если условие истинно, программа продолжается, но если ложно, программа выдает AssertionError, помогая в отладке.

  • C. Python использует оператор assert для шифрования утверждений в коде, предотвращая несанкционированный доступ к отладочным выражениям и конфиденциальным проверкам.

  • D. Оператор assert служит инструментом документирования, который автоматически генерирует руководства пользователя на основе утверждений, определенных во всем коде.


Вопрос 46.

Какова функциональность функции super() в Python, особенно в контексте объектно-ориентированного программирования и иерархий наследования?

  • A. Функция super() используется для возврата прокси-объекта, который делегирует вызовы методов родительскому или братскому классу, позволяя получить доступ к унаследованным методам, которые могли быть переопределены в классе.

  • B. Она служит механизмом для обхода переопределения методов в подклассах, гарантируя, что метод из родительского класса не может быть переопределен ни в каких классах-потомках.

  • C. Python использует super(), чтобы автоматически обнаруживать и вызывать конструктор базового класса, независимо от того, какой метод или атрибут используется.

  • D. Функция инициализирует все переменные в родительском классе значениями по умолчанию, независимо от того, как они были инициализированы в подклассе.


Вопрос 48.

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

  • A. Переменная __name__ используется для определения имени класса объекта, позволяя динамически ссылаться на тип класса во всем приложении.

  • B. Это встроенная переменная, которая содержит имя модуля, в котором она используется; если модуль запускается как основная программа, то он содержит строку "__main__".

  • C. Эта переменная действует как идентификатор для адресов памяти, помогая в прямом управлении местоположением объектов внутри приложений Python.

  • D. __name__ — это инструмент отладки Python, который выводит путь выполнения текущей функции, помогая в трассировке и ведении журнала.


Вопрос 49.

Как Python управляет памятью, особенно в отношении создания и уничтожения объектов?

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

  • B. Он реализует автоматизированную систему с использованием комбинации подсчета ссылок и сборщика мусора для управления памятью, которая динамически управляет выделением и освобождением объектов.

  • C. Управление памятью в Python осуществляется посредством обязательного файлового обмена, где данные временно хранятся на диске во время выполнения.

  • D. Python позволяет программистам настраивать алгоритм выделения памяти в режиме реального времени, оптимизируя производительность для определенных типов структур данных.


Вопрос 50.

Каковы последствия использования оператора import в скриптах Python, особенно при управлении зависимостями и модульном программировании?

  • A. Оператор import увеличивает время выполнения скриптов, загружая все доступные библиотечные модули в начале, независимо от того, используются ли они в скрипте.

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

  • C. Используя import, Python компилирует каждый импортированный модуль в отдельный байт-код, чтобы предотвратить перекомпиляцию при будущих выполнениях, снижая гибкость.

  • D. Оператор используется для шифрования и защиты кода модулей для предотвращения несанкционированного доступа и изменения кодовой базы.



Ответы:

41, Правильный ответ: B

Объяснение:

Декоратор @staticmethod в Python используется для определения методов, которые логически связаны с классом, но не требуют доступа к данным конкретного экземпляра или самого класса.

  • Вариант A не верен: Статические методы не могут изменять атрибуты класса напрямую, как это делают методы класса.

  • Вариант B верен: @staticmethod позволяет вызывать метод как у экземпляра, так и у класса, он не привязан к конкретному экземпляру класса, поэтому не требует аргумента self или cls.

  • Вариант C не верен: @staticmethod не оптимизирует метод для работы в параллельных потоках.

  • Вариант D не верен: @staticmethod не ограничивает вызов метода только во время создания объекта.

Основные характеристики статических методов:

  1. Нет доступа к экземпляру: Статические методы не принимают неявный первый аргумент self, как это делают методы экземпляра. Они не имеют доступа к данным конкретного экземпляра класса.

  2. Нет доступа к классу: Статические методы также не принимают cls в качестве первого аргумента, что означает, что они не могут напрямую обращаться к атрибутам класса.

  3. Работают как обычные функции: Статические методы похожи на обычные функции, но они определены внутри класса и связаны с ним логически.

  4. Вызываются без объекта: Статический метод может вызываться как у экземпляра объекта (instance.method()), так и непосредственно у самого класса (ClassName.method()).

  5. Используются для утилит: Обычно статические методы используются для создания утилитных функций, связанных с классом, но не требующих доступа к конкретным данным экземпляра или класса.

Пример:

101 игра на python. Вопросы собеседований. 41 - 50 Гайд, Программирование, Python, Собеседование, Junior, Длиннопост

В результате:

  • add_numbers не требует доступа к экземпляру класса, поэтому может быть вызван как у класса, так и у экземпляра.

  • modify_class_variable модифицирует атрибут класса class_var.

Таким образом, вариант B является правильным ответом.


42, Правильный ответ: B

Объяснение:

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

  • Вариант A не верен: Списки не оптимизированы для быстрых вставок и удалений в начале списка.

  • Вариант B верен: Вставка или удаление элементов в начале списка требует сдвига всех последующих элементов в памяти, что является медленной операцией для больших списков.

  • Вариант C не верен: Списки не сортируют элементы после вставок или удалений. Сортировку нужно делать явно.

  • Вариант D не верен: Списки в Python не являются связанными списками.

Почему вставка и удаление в начале списка медленные:

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

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

Производительность операций:

  • Доступ по индексу: O(1) – постоянное время, не зависит от размера списка.

  • Вставка/удаление в конце списка: O(1) – вставка или удаление последнего элемента не требует сдвигов.

  • Вставка/удаление в начале/середине списка: O(n) – время выполнения зависит от количества элементов в списке, потому что нужно сдвигать все последующие элементы.

  • Поиск элемента по значению: O(n) - время выполнения зависит от количества элементов, нужно последовательно перебирать все элементы пока не найдется нужный.

Пример:

101 игра на python. Вопросы собеседований. 41 - 50 Гайд, Программирование, Python, Собеседование, Junior, Длиннопост

43, Правильный ответ: B

Объяснение:

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

  • Вариант A не верен: with не ограничивает доступ к внешним ресурсам, а помогает их корректно использовать.

  • Вариант B верен: with гарантирует, что ресурсы будут правильно закрыты, что упрощает управление и обработку ошибок.

  • Вариант C не верен: with не является циклом проверки ошибок и не предотвращает сбои программы.

  • Вариант D не верен: with не влияет на скорость выполнения, его основная цель - управлять ресурсами.

Как работает with:

  1. Вход в контекст: Когда выполняется оператор with, вызывается метод __enter__ менеджера контекста. Обычно этот метод подготавливает ресурс (например, открывает файл).

  2. Выполнение кода: Выполняется блок кода, находящийся внутри with.

  3. Выход из контекста: После выполнения блока кода вызывается метод __exit__ менеджера контекста, гарантируя корректное закрытие или освобождение ресурса, даже если в блоке try возникло исключение.

Преимущества использования with:

  • Автоматическое управление ресурсами: with автоматически закрывает файлы, освобождает соединения, и т.д. после использования, что снижает риск утечки ресурсов.

  • Чистый код: with делает код более чистым, так как он явно указывает, где ресурс используется и управляется.

  • Безопасность: Он обеспечивает корректное освобождение ресурсов даже в случае возникновения ошибок, что делает код более надежным.

  • Улучшение читаемости: with явно показывает границы работы с ресурсом, что улучшает читаемость кода.

Пример:

101 игра на python. Вопросы собеседований. 41 - 50 Гайд, Программирование, Python, Собеседование, Junior, Длиннопост

В результате:

  • Файл my_file.txt откроется автоматически при входе в блок with.

  • После выполнения кода внутри блока with, файл закроется автоматически (даже если возникнет исключение).

  • Если файла не существует, то обработается исключение FileNotFoundError, если произойдет любая другая ошибка, то сработает общее исключение Exception.

Таким образом, вариант B является правильным.


44, Правильный ответ: B

Объяснение:

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

  • Вариант A не верен: zip не объединяет в один список, а создает итератор кортежей. Также она не занимается сжатием данных.

  • Вариант B верен: zip действительно итерирует по нескольким итерируемым объектам одновременно, возвращая итератор кортежей.

  • Вариант C не верен: zip не шифрует данные.

  • Вариант D не верен: zip не дополняет списки до одной длины. Итерирование прекращается, когда один из итерируемых объектов закончится.

Как работает zip():

  1. zip() принимает на вход несколько итерируемых объектов (списки, кортежи, строки и др.).

  2. Он возвращает итератор, который производит кортежи.

  3. Каждый кортеж содержит элементы с одинаковыми индексами из соответствующих итерируемых объектов.

  4. Итерация продолжается до тех пор, пока не закончится самый короткий итерируемый объект.

Типичные случаи использования zip():

  1. Параллельная обработка данных: zip() позволяет обрабатывать данные из нескольких списков, кортежей или других итерируемых объектов одновременно.

  2. Создание словарей: zip() может использоваться для создания словарей из пар ключей и значений.

  3. Транспонирование матриц: zip() может быть использована для транспонирования матриц, меняя местами строки и столбцы.

Пример:

101 игра на python. Вопросы собеседований. 41 - 50 Гайд, Программирование, Python, Собеседование, Junior, Длиннопост

В результате:

  • Первый пример объединяет списки имен и оценок в список кортежей.

  • Второй пример создаёт словарь с именами в качестве ключей и оценками в качестве значений.

Таким образом, вариант B является верным, точно описывая функцию zip() и ее применение.


45, Правильный ответ: B

Объяснение:

Оператор assert в Python является инструментом для отладки, который используется для проверки корректности условий во время выполнения программы.

  • Вариант A не верен: assert не определяет главную функцию программы.

  • Вариант B верен: assert проверяет условие и если оно ложно, то выводит исключение AssertionError, помогая в отладке.

  • Вариант C не верен: assert не шифрует код.

  • Вариант D не верен: assert не генерирует документацию.

Как работает assert:

  1. assert принимает в качестве аргумента условие, которое должно быть истинным.

  2. Если условие истинно (возвращает True), программа продолжает выполнение без каких-либо действий.

  3. Если условие ложно (возвращает False), Python вызывает исключение AssertionError. Это прерывает выполнение программы и выводит сообщение об ошибке, которое можно использовать для отладки.

Когда использовать assert:

  • Проверка предположений: Используйте assert для проверки предположений о состоянии вашей программы, которые должны быть верными. Например, если вы ожидаете, что переменная всегда должна быть положительной, добавьте assert variable > 0.

  • Отладка: Используйте assert как инструмент для выявления ошибок на ранних этапах разработки. Это помогает быстро находить и исправлять логические ошибки.

  • Контракты: В некоторых случаях assert можно использовать для проверки контрактов между функциями и модулями, гарантируя правильное использование API.

Пример:

101 игра на python. Вопросы собеседований. 41 - 50 Гайд, Программирование, Python, Собеседование, Junior, Длиннопост

В результате:

  • При вызове calculate_area(5, 10), оба assert условия выполняются, и программа продолжает работу и выводит "Площадь: 50".

  • При вызове calculate_area(-5, 10), первое assert условие не выполняется, и выводится ошибка AssertionError: Ширина должна быть положительной.

Таким образом, вариант B является правильным, поскольку он точно описывает роль assert в проверке условий и отладке.


46, Правильный ответ: A

Объяснение:

Функция super() в Python является важным инструментом в объектно-ориентированном программировании, особенно при работе с иерархией классов и множественным наследованием.

  • Вариант A верен: super() создает прокси-объект, который перенаправляет вызовы методов к родительскому классу.

  • Вариант B не верен: super() не обходит переопределение методов, а наоборот, используется для вызова переопределенных методов родительского класса.

  • Вариант C не верен: super() не используется для автоматического вызова конструктора базового класса, это вызывается при наследовании через вызов super().__init__()

  • Вариант D не верен: super() не инициализирует переменные в родительском классе значениями по умолчанию, а вызывает методы базового класса.

Как работает super():

  1. Доступ к родительскому классу: super() позволяет подклассу вызывать методы родительского класса. Это особенно полезно, когда подкласс переопределяет метод родителя, но при этом нужно выполнить оригинальную версию родительского метода.

  2. Множественное наследование: В случае множественного наследования, super() помогает управлять вызовами методов в правильном порядке (Method Resolution Order - MRO).

  3. Инициализация родительского класса: Часто используется в конструкторах __init__(), чтобы вызвать конструктор родительского класса и выполнить его инициализацию.

Пример:

101 игра на python. Вопросы собеседований. 41 - 50 Гайд, Программирование, Python, Собеседование, Junior, Длиннопост

В результате:

  • super().__init__(name) в дочернем классе позволяет вызвать метод __init__() из родительского класса.

  • super().speak() в дочернем классе вызывает метод speak из родительского класса, а затем печатает что то своё.

Таким образом, вариант A является правильным ответом.


47, Правильный ответ: B

Объяснение:

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

  • Вариант A не верен: Лямбда-функции не предназначены для постоянного использования и имеют ограниченные возможности по сравнению с обычными функциями, созданными с помощью def.

  • Вариант B верен: Лямбда-функции - это анонимные функции, определяемые в одну строку, и они обычно используются, когда нужна простая функция для кратковременного использования (например, при передаче в map(), filter(), sort()).

  • Вариант C не верен: Лямбда-функции не управляют памятью автоматически. Они работают так же, как обычные функции с точки зрения управления памятью.

  • Вариант D не верен: Лямбда-функции не связаны с управлением глобальными переменными.

Ключевые характеристики лямбда-функций:

  1. Анонимность: Лямбда-функции не имеют имени, в отличие от обычных функций, определенных с помощью def.

  2. Компактность: Они записываются в одну строку и могут содержать только одно выражение.

  3. Область применения: Лямбда-функции часто используются в качестве аргументов для функций высшего порядка, таких как map(), filter(), sorted() и т.д., где нужно передать простую функцию для обработки данных.

  4. Ограничения: Лямбда-функции не могут содержать множественные выражения или сложные конструкции, например циклы и условные операторы.

Пример:

101 игра на python. Вопросы собеседований. 41 - 50 Гайд, Программирование, Python, Собеседование, Junior, Длиннопост

В результате:

  • Лямбда-функция используется для возведения в квадрат каждого элемента списка numbers с помощью map().

  • Лямбда-функция используется для фильтрации четных чисел из списка numbers c помощью filter().

  • Лямбда-функция используется для сортировки списка кортежей points по второму элементу.

Таким образом, вариант B является правильным ответом.


48, Правильный ответ: B

Объяснение:

Переменная __name__ — это специальная встроенная переменная в Python, которая автоматически устанавливается интерпретатором Python. Она используется для определения того, запущен ли модуль как основной скрипт или импортируется в другой модуль.

  • Вариант A не верен: __name__ не связана с именами классов или динамической типизацией.

  • Вариант B верен: Когда модуль запускается как основная программа, Python устанавливает __name__ в "__main__". Если модуль импортируется в другой скрипт, __name__ устанавливается в имя модуля.

  • Вариант C не верен: __name__ не связана с управлением адресами памяти.

  • Вариант D не верен: __name__ не предназначена для отладки, а для определения контекста запуска модуля.

Как используется __name__:

Часто используется для определения, является ли скрипт основным исполняемым файлом или импортирован как модуль. Это позволяет выполнять определенный код, например вызывать функцию main(), только если скрипт запущен напрямую.

Пример:

101 игра на python. Вопросы собеседований. 41 - 50 Гайд, Программирование, Python, Собеседование, Junior, Длиннопост

В результате:

  1. Если запустить my_module.py непосредственно:

    • print(f"Имя модуля: {__name__}") выведет Имя модуля: __main__.

    • Условие if __name__ == "__main__": будет выполнено, так как модуль запущен напрямую.

    • Выведет "Этот код выполняется, если скрипт запущен напрямую." и "Вызов my_function".

  2. Если запустить main.py:

    • print(f"Имя модуля: {__name__}") выведет Имя модуля из main.py: __main__ (так как main.py является основным скриптом).

    • print(f"Имя модуля: {__name__}") в my_module.py выведет Имя модуля: my_module, так как модуль my_module был импортирован в main.py.

    • my_module.my_function() выведет "Вызов my_function"

Таким образом, вариант B является правильным ответом.


49, Правильный ответ: B

Объяснение:

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

  1. Подсчет ссылок: Python автоматически отслеживает количество ссылок на каждый объект в памяти. Когда количество ссылок на объект падает до нуля, объект считается неиспользуемым и готов к удалению.

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

  • Вариант A не верен: Python не использует ручное управление памятью, как в C или C++.

  • Вариант B верен: Python действительно использует автоматизированную систему с подсчетом ссылок и сборщиком мусора.

  • Вариант C не верен: Python не использует файловый обмен для управления памятью.

  • Вариант D не верен: Python не позволяет программистам настраивать алгоритм выделения памяти в реальном времени.

Подробное объяснение:

  • Подсчет ссылок:

    • Когда создается объект, счетчик ссылок устанавливается в 1.

    • При присвоении объекта новой переменной или передаче в функцию, счетчик ссылок увеличивается.

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

    • Когда счетчик ссылок достигает нуля, Python автоматически освобождает память, занимаемую объектом.

  • Сборщик мусора:

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

    • Сборщик мусора периодически сканирует память в поисках таких циклических ссылок и удаляет объекты, вовлеченные в эти циклы, когда они больше не используются.

Преимущества автоматического управления памятью:

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

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

  3. Эффективность: Автоматическое управление памятью в Python достаточно эффективно в большинстве случаев, так как позволяет сэкономить память.

Таким образом, вариант B является верным ответом.


50, Правильный ответ: B

Объяснение:

Оператор import в Python является фундаментальным для организации кода в модули и повторного использования кода из других файлов или библиотек.

  • Вариант A не верен: Оператор import не загружает все доступные модули, а только те, которые явно указаны в import-запросе.

  • Вариант B верен: Именно оператор import делает доступным код из других модулей, позволяя повторно использовать код и организовывать программу в виде модулей.

  • Вариант C не верен: Python действительно компилирует импортированный модуль в байт-код (файл .pyc), но это делается для ускорения будущих импортов, а не для снижения гибкости.

  • Вариант D не верен: Оператор import не шифрует код.

Подробное объяснение:

  • Модули: В Python модулем является любой файл с расширением .py. Он может содержать функции, классы и переменные, которые могут быть использованы в других программах.

  • import: Ключевое слово import загружает модуль в текущее пространство имен, позволяя использовать его код. Вы можете импортировать модуль целиком (например, import math) или импортировать конкретные элементы модуля (например, from math import sqrt).

  • Цель импорта: Позволяет разработчикам включать функциональность из одного модуля в другой.

  • Повторное использование кода: Программисты могут повторно использовать код в разных частях программы или в разных программах.

  • Модульность: Программа может быть разделена на логические блоки (модули), каждый из которых выполняет свою определенную функцию.

Пример:

101 игра на python. Вопросы собеседований. 41 - 50 Гайд, Программирование, Python, Собеседование, Junior, Длиннопост

В результате:

  • Скрипт main.py успешно импортирует модуль my_module и использует его функцию my_function().

  • Скрипт main.py импортирует функцию sqrt из модуля math и использует её.

Таким образом, вариант B является правильным, точно описывая назначение и использование оператора import.


Продолжение следует. Подпишись, чтобы не пропустить.

Удачи!

Показать полностью 9
7

101 игра на python. Вопросы собеседований. 51 - 60

Вопросы 👉 1 - 10
Вопросы 👉 11 - 20
Вопросы 👉 21 - 30
Вопросы 👉 31 - 40
Вопросы 👉 41 - 50


Вопросы

Вопрос 51.
Какова цель функции dir() в Python, особенно при изучении свойств и методов объектов во время выполнения?

  • A. Функция dir() используется для установки направления выполнения в сложных приложениях, определяя управление потоком на основе зависимостей модуля.

  • B. Она динамически изменяет доступность методов и свойств в объектах для управления видимостью из внешних модулей.

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

  • D. Функция dir() шифрует имена всех методов и атрибутов в объекте, чтобы защитить код от интроспекции и несанкционированного доступа.

Вопрос 52.
Как оператор continue в Python влияет на поток управления внутри циклов, и каково его типичное применение?

  • A. Оператор continue вызывает немедленное завершение текущей итерации и принудительно завершает цикл, обычно используемый для остановки чрезмерной обработки во вложенных циклах.

  • B. Он пропускает остальную часть кода внутри цикла для текущей итерации и возвращается к условию цикла или следующей итерации, обычно используется для пропуска части цикла при выполнении условия.

  • C. Оператор continue в Python удваивает скорость итерации, пропуская проверку выполнения на каждом шаге цикла.

  • D. Оператор позволяет циклу пропустить все предстоящие итерации и возобновить выполнение с точки, непосредственно следующей за структурой цикла.

Вопрос 53.
Каково влияние использования оператора del на структуры данных Python и как это влияет на управление памятью и поведение программы?

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

  • B. Он помечает элементы для удаления и планирует сборщик мусора для их удаления во время следующего простоя системы, сводя к минимуму влияние на производительность программы.

  • C. Оператор del Python переименовывает переменные и элементы структуры данных, делая их недоступными под их исходными идентификаторами в качестве меры безопасности.

  • D. Оператор del удаляет ссылки на объекты, что потенциально приводит к сборке мусора, если все ссылки удалены, тем самым освобождая память.

Вопрос 54.
В Python, каково назначение и эффект использования оператора break в циклических конструкциях?

  • A. Оператор break используется внутри циклов для немедленного выхода из всей структуры цикла, полностью завершая выполнение цикла при его вызове.

  • B. Он заставляет цикл приостановить выполнение и ожидать ввода пользователя перед продолжением следующей итерации.

  • C. Оператор break в Python удваивает скорость выполнения цикла, разделяя цикл на параллельные задачи с момента вызова.

  • D. Оператор отправляет сигнал прерывания во внешние системы, указывая, что в цикле достигнут предел обработки данных.

Вопрос 55.
Учитывая следующий фрагмент кода Python, каково ожидаемое поведение программы?

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост
  • A. Программа печатает числа от 0 до 4 без прерывания.

  • B. Она печатает числа от 0 до 2, а затем останавливается перед печатью 3.

  • C. Программа выдает ошибку, потому что оператор break неправильно используется вне цикла.

  • D. Она непрерывно печатает число 3 в бесконечном цикле.

Вопрос 57.
В программировании на Python для чего используется ключевое слово global?

  • A. Чтобы объявить, что переменная внутри функции является глобальной и изменяет переменную на уровне модуля.

  • B. Чтобы повысить видимость переменной в разных модулях, импортированных в скрипт.

  • C. Чтобы защитить переменную внутри функции от изменения внешними функциями.

  • D. Чтобы объявить переменную, к которой можно получить доступ в любом месте программы, независимо от области видимости.

Вопрос 58.
Что вычисляет ключевое слово in в Python в контексте контейнеров данных, таких как списки или строки?

  • A. Оно проверяет, существует ли файл в каталоге.

  • B. Оно подтверждает, содержится ли указанный элемент в итерируемом объекте или последовательности справа от оператора.

  • C. Оно используется исключительно внутри циклов для итерации по каждому элементу последовательности.

  • D. Оно изменяет элементы внутри контейнера данных для обеспечения целостности данных.

Вопрос 59.
Какую встроенную функцию Python вы бы использовали, чтобы найти наибольшее число в списке целых чисел?

  • A. max()

  • B. sum()

  • C. len()

  • D. high()

Вопрос 60.
Каково основное назначение оператора assert в Python?

  • A. Определить начальное состояние переменных в начале программы.

  • B. Прервать выполнение программы, если не выполнено указанное условие.

  • C. Гарантировать, что условие в коде остается истинным, вызывая AssertionError, если условие оказывается ложным.

  • D. Зашифровать конфиденциальные данные в приложении для предотвращения утечки данных.


Ответы

51, Правильный ответ: C

Объяснение:

Функция dir() в Python - это встроенная функция, предназначенная для интроспекции, то есть для изучения внутренней структуры объектов во время выполнения программы.

  • Вариант A не верен: dir() не устанавливает направление выполнения кода.

  • Вариант B не верен: dir() не изменяет доступность методов или свойств объекта.

  • Вариант C верен: dir() возвращает список всех атрибутов и методов объекта. Это делает ее полезной для изучения и отладки.

  • Вариант D не верен: dir() не шифрует данные, а помогает их увидеть.

Как работает dir():

  • dir() принимает в качестве аргумента объект (например, строку, число, список, класс, модуль или даже пользовательский объект).

  • Она возвращает отсортированный список строк, представляющих все атрибуты и методы объекта, включая встроенные, унаследованные и собственные.

  • Этот список позволяет проанализировать доступные свойства и методы объекта.

Применение dir():

  • Отладка: При отладке кода dir() позволяет изучить свойства объекта и понять, какие методы и атрибуты доступны.

  • Изучение библиотек: dir() позволяет изучить содержимое модулей и библиотек, чтобы узнать, какие функции и классы они предоставляют.

  • Исследование объектов: dir() позволяет анализировать пользовательские объекты, чтобы понять, какие у них есть атрибуты и методы.

Пример:

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост

В результате:

  • В примере видно, что dir(my_list) возвращает список всех атрибутов и методов списка, включая как магические методы __add__, так и пользовательские методы append и sort.

  • dir(my_string) возвращает список атрибутов и методов для объекта строки.

Таким образом, вариант C является верным, так как точно описывает функцию dir() и ее применение в отладке и разработке.

52, Правильный ответ: B

Объяснение:

Оператор continue в Python используется внутри циклов (for и while) для пропуска текущей итерации и перехода к следующей.

  • Вариант A не верен: continue не завершает цикл, а только текущую итерацию.

  • Вариант B верен: continue пропускает оставшийся код в текущей итерации цикла и переходит к следующей.

  • Вариант C не верен: continue не удваивает скорость выполнения циклов.

  • Вариант D не верен: continue переходит к следующей итерации текущего цикла, а не к концу цикла.

Как работает continue:

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

  2. В цикле for это означает переход к следующему элементу в последовательности.

  3. В цикле while это означает повторную проверку условия цикла.

Типичные применения continue:

  1. Пропуск итераций: Пропуск итерации на основе определенного условия.

  2. Фильтрация данных: Игнорирование определенных элементов последовательности в цикле.

  3. Обработка исключительных ситуаций: Игнорирование текущей итерации, когда возникает ошибка, и переход к следующей.

Пример:

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост

В результате:

  • В примере с циклом for выводятся только нечетные числа из списка, поскольку четные пропускаются.

  • В примере с циклом while выводятся все числа, за исключением тех, что делятся на 3.

Таким образом, вариант B является верным.

53, Правильный ответ: D

Объяснение:

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

  • Вариант A не верен: Оператор del удаляет ссылки, а не саму память немедленно.

  • Вариант B не верен: Сборщик мусора Python не имеет расписания.

  • Вариант C не верен: del не переименовывает переменные.

  • Вариант D верен: del удаляет ссылки на объекты, и если объект больше не имеет ссылок, то он становится кандидатом на сборку мусора.

Как работает del:

  1. Удаление ссылки: Оператор del удаляет ссылку на объект из текущей области видимости.

  2. Уменьшение счетчика ссылок: При удалении ссылки, счетчик ссылок объекта уменьшается.

  3. Сборка мусора: Если счетчик ссылок объекта становится равен нулю (то есть, нет других ссылок на этот объект), объект помечается как недостижимый и становится кандидатом на сборку мусора (Garbage Collection - GC).

  4. Освобождение памяти: Сборщик мусора (GC) освобождает память, занимаемую объектом, в автоматическом режиме.

Влияние на управление памятью и поведение программы:

  • del не гарантирует немедленного освобождения памяти. Сборка мусора выполняется автоматически Python, когда это необходимо.

  • Если удаляется последняя ссылка на объект, то он становится кандидатом на сборку мусора.

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

Примеры:

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост

В результате:

  • del my_list[0] удаляет элемент из списка по индексу, сдвигая остальные элементы.

  • После del my_list ссылка my_list удалена, но данные всё ещё доступны через ссылку my_list_2

Таким образом, вариант D является правильным.

Правильный ответ: A

Объяснение:

Оператор break в Python используется для немедленного выхода из цикла, в котором он находится.

  • Вариант A верен: break завершает выполнение цикла полностью, независимо от оставшихся итераций.

  • Вариант B не верен: break не приостанавливает выполнение и не ждет ввода пользователя.

  • Вариант C не верен: break не удваивает скорость выполнения циклов.

  • Вариант D не верен: break не отправляет сигналы во внешние системы.

Как работает break:

  1. Когда Python встречает оператор break внутри цикла (for или while), цикл немедленно прерывается.

  2. Управление передается на первый оператор, следующий за циклом.

  3. Все оставшиеся итерации цикла пропускаются.

Использование break:

  1. Ранний выход: Когда необходимо выйти из цикла до его полного завершения при выполнении определенного условия.

  2. Поиск элементов: При поиске элемента в списке можно использовать break для завершения цикла, как только элемент найден.

  3. Управление бесконечными циклами: break может использоваться для выхода из бесконечного цикла (while True) при наступлении определенного условия.

Пример:

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост

В результате:

  • В цикле for выводится только числа до тех пор, пока не встретится число больше 5, после чего цикл завершается.

  • В цикле while True цикл прерывается, когда x становится больше 5.

Таким образом, вариант A является правильным, так как он точно описывает функцию оператора break.

55, Правильный ответ: B

Объяснение:

В данном коде используется цикл for и оператор break. Давайте разберем работу кода по шагам.

  1. Цикл for: for i in range(5): - Этот цикл итерируется по числам в диапазоне от 0 до 4 включительно (range(5) создает последовательность 0, 1, 2, 3, 4).

  2. Условие: if i == 3: - на каждой итерации проверяется, равно ли текущее значение переменной цикла i числу 3.

  3. Оператор break: Если условие i == 3 выполняется, то вызывается оператор break, который немедленно завершает цикл.

  4. Вывод: print(i) - выводится значение переменной i перед проверкой условия.

  • Вариант A не верен: Цикл не будет выполняться до конца, так как есть оператор break.

  • Вариант B верен: Цикл будет итерироваться с 0 по 4, но при i == 3 цикл прервется, поэтому будут выведены значения от 0 до 2 включительно.

  • Вариант C не верен: Оператор break используется корректно внутри цикла.

  • Вариант D не верен: Цикл не будет бесконечным, так как break прекращает его выполнение.

Пример:

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост

В результате:

Цикл начнет итерации с i = 0. Будут выведены числа 0, 1, 2. Когда i станет равно 3, выполнится break, и цикл завершится, а число 3 выведено не будет.

Таким образом, вариант B является правильным ответом.

56, Правильный ответ: A

Объяснение:

В Python списки (list) и кортежи (tuple) являются последовательностями, но они отличаются по своей мутабельности (изменяемости).

  • Вариант A верен: Списки являются изменяемыми (mutable), а кортежи — неизменяемыми (immutable).

  • Вариант B не верен: И списки и кортежи могут хранить элементы различных типов.

  • Вариант C не верен: И списки и кортежи можно перебирать.

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

Подробное объяснение:

  • Списки (list):

    • Мутабельность: Списки являются изменяемыми, то есть после их создания можно добавлять, удалять или изменять элементы в списке.

    • Синтаксис: Списки создаются с использованием квадратных скобок [].

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

  • Кортежи (tuple):

    • Неизменяемость: Кортежи являются неизменяемыми, то есть после их создания нельзя добавлять, удалять или изменять элементы.

    • Синтаксис: Кортежи создаются с использованием круглых скобок ().

    • Применение: Используются для представления фиксированных коллекций элементов, где не требуется изменение содержимого (например, координаты, записи). Кортежи могут быть использованы как ключи словаря, чего нельзя сделать со списками.

Пример:

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост

В результате:

  • Списки можно изменять (мутировать) как мы и сделали в примере, добавив и изменив элемент.

  • Кортежи после создания нельзя изменить.

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

57, Правильный ответ: A

Объяснение:

Ключевое слово global в Python используется внутри функции для того, чтобы указать, что переменная, которая используется в функции, является глобальной переменной, объявленной на уровне модуля, а не локальной переменной внутри функции.

  • Вариант A верен: Именно global позволяет функции модифицировать глобальную переменную, объявленную на уровне модуля.

  • Вариант B не верен: Для использования переменной в разных модулях, нужно использовать import.

  • Вариант C не верен: global не защищает от изменения переменной внутри функции, а наоборот, позволяет ее изменять.

  • Вариант D не верен: global объявляет переменную глобальной только внутри функции, а не делает ее автоматически доступной из любой точки кода, в первую очередь используется для изменения переменных, объявленных на уровне модуля.

Как работает global:

  1. Глобальная область видимости: Переменные, объявленные вне функций, находятся в глобальной области видимости.

  2. Локальная область видимости: По умолчанию, переменные, определенные внутри функции, являются локальными, то есть существуют и доступны только внутри этой функции.

  3. Изменение глобальных переменных: Чтобы изменить глобальную переменную внутри функции, нужно использовать ключевое слово global, чтобы явно указать, что вы работаете с глобальной переменной, а не создаете новую локальную.

Пример:

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост

В результате:

  • Переменная global_var объявляется глобальной на уровне модуля.

  • В функции modify_global() при объявлении global global_var Python понимает, что нужно изменять значение переменной, объявленной на уровне модуля.

  • И значения global_var меняются, что видно при выводе. Таким образом, вариант A является правильным ответом.

58, Правильный ответ: B

Объяснение:

Ключевое слово in в Python используется для проверки наличия элемента в итерируемом объекте (списке, кортеже, строке, словаре и т.д.).

  • Вариант A не верен: in не проверяет наличие файлов.

  • Вариант B верен: Оператор in проверяет, присутствует ли элемент в итерируемом объекте справа от него.

  • Вариант C не верен: Хотя in часто используется в циклах for, это не его единственное применение.

  • Вариант D не верен: Оператор in не изменяет элементы в контейнере.

Как работает оператор in:

  1. in принимает два операнда:

    • левый операнд - это элемент, который проверяется на наличие

    • правый операнд - это итерируемый объект, в котором выполняется поиск.

  2. Возвращает True, если левый операнд найден в правом, в противном случае возвращает False.

  3. Работает со списками, кортежами, строками, словарями и множествами.

  4. Для словарей проверяет наличие ключа, а не значения.

  5. Для строк проверяет наличие подстроки.

Примеры:

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост

В результате:

  • Оператор in проверяет, есть ли заданный элемент в итерируемом объекте.

  • Для списка проверяется наличие элемента в списке.

  • Для строк проверяется наличие подстроки.

  • Для словарей проверяется наличие ключа, а не значения.

Таким образом, вариант B является верным ответом.

59, Правильный ответ: A

Объяснение:

В Python для поиска наибольшего значения в последовательности (например, списке, кортеже, строке, множестве или другом итерируемом объекте) используется встроенная функция max().

  • Вариант A верен: max() возвращает наибольший элемент в итерируемом объекте.

  • Вариант B не верен: sum() возвращает сумму всех элементов.

  • Вариант C не верен: len() возвращает длину (количество элементов) последовательности.

  • Вариант D не верен: high() не является встроенной функцией Python.

Как работает max():

  1. max() принимает итерируемый объект в качестве аргумента (или несколько аргументов).

  2. Он возвращает наибольший элемент в итерируемом объекте (или наибольшее значение среди переданных аргументов).

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

Пример:

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост

В результате:

  • max(my_numbers) возвращает наибольшее число из списка my_numbers.

  • max(5, 10, 2, 15) возвращает наибольшее из переданных чисел.

Таким образом, вариант A является правильным ответом.

60, Правильный ответ: C

Объяснение:

Оператор assert в Python - это инструмент для отладки и тестирования, который позволяет проверить истинность определенного условия.

  • Вариант A не верен: assert не используется для определения начального состояния переменных.

  • Вариант B не верен: assert не просто прерывает выполнение, он делает это, если условие ложно и выводит AssertionError.

  • Вариант C верен: assert гарантирует, что условие, которое должно выполняться на определенном этапе, остается верным, и вызывает ошибку если нет.

  • Вариант D не верен: assert не связан с шифрованием данных.

Как работает оператор assert:

  1. assert принимает на вход условие (логическое выражение), которое проверяется на истинность.

  2. Если условие истинно (True), то программа продолжает выполняться в штатном режиме.

  3. Если условие ложно (False), то Python генерирует исключение AssertionError , и выполнение программы останавливается.

  4. Можно передать опциональное сообщение, которое будет выведено вместе с исключением.

Цель использования assert:

  • Отладка: Используется как средство отладки, позволяющее быстро выявить ошибки в логике программы.

  • Тестирование: Помогает гарантировать, что код работает правильно, путем добавления проверок в ключевых местах.

  • Обнаружение ошибок на ранних этапах: Позволяет обнаружить проблемы, связанные с некорректным состоянием данных или логикой работы, на ранних этапах разработки.

Пример:

101 игра на python. Вопросы собеседований. 51 - 60 Собеседование, Питон, Python, Вопрос, Программирование, Длиннопост

В результате:

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

  • Во втором вызове, discount больше 1, и условие 0 <= discount <= 1 не выполняется, что приводит к выбросу AssertionError.

Таким образом, вариант C является правильным.


Продолжение следует... Подпишись, чтобы не пропустить.

Удачи!

Показать полностью 11
10

Вопросы собеседований. 61 - 70

Вопросы 👉 1 - 10
Вопросы 👉 11 - 20
Вопросы 👉 21 - 30
Вопросы 👉 31 - 40
Вопросы 👉 41 - 50
Вопросы 👉 51 - 60


Вопросы

Вопрос 61.
Что произойдет при добавлении нового узла со значением 25 в бинарное дерево поиска (BST), представленное на изображении ниже?

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост
  • A. Узел 25 будет добавлен как левый потомок узла 40.

  • B. Узел 25 будет добавлен как правый потомок узла 20.

  • C. Узел 25 будет добавлен как правый потомок узла 40.

  • D. Узел 25 не будет добавлен, так как такой узел уже существует в дереве.


Вопрос 62.
Как функция enumerate() улучшает функциональность цикла в Python при работе со списком?

  • A. Она переворачивает список для перебора в обратном порядке.

  • B. Функция добавляет счетчик к каждой итерации цикла, предоставляя текущую позицию индекса наряду со значением.

  • C. Она умножает каждый элемент на его номер индекса для получения нового списка.

  • D. Enumerate блокирует список для предотвращения изменений во время итерации.


Вопрос 63.
Что такое функциональный паттерн проектирования "Map" (отображение) и как он используется в Python? Приведите пример использования этого паттерна для преобразования элементов коллекции.

  • A. Паттерн "Map" - это способ сортировки элементов в коллекции, используя заданную функцию.

  • B. Паттерн "Map" - это способ фильтрации элементов в коллекции, используя заданное условие.

  • C. Паттерн "Map" - это способ объединения элементов коллекции в одно значение, используя заданную функцию.

  • D. Паттерн "Map" - это способ применения функции к каждому элементу коллекции и создания новой коллекции из полученных результатов.



Вопрос 64. Какой результат выведет на экран следующий код Python?

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост
  • A. 7

  • B. 6

  • C. 5

  • D. 4


Вопрос 65.
Какой будет результат выполнения следующего кода?

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост
  • A. [1, 2, 3] [1, 2, 3, 4, 5]

  • B. [1, 2, 3, 4] [1, 2, 3, 4, 5]

  • C. [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]

  • D. [1, 2, 3] [1, 2, 3, 5]


Вопрос 66.
Какой тип данных был бы наиболее подходящим для хранения уникальных идентификаторов пользователей (user IDs) в Python?

  • A. Список (List)

  • B. Словарь (Dictionary)

  • C. Множество (Set)

  • D. Кортеж (Tuple)


Вопрос 67.
В Python, каков результат преобразования типов, если вы используете функцию int() для числа с плавающей точкой, такого как 7.7?

  • A. Она округляет число до ближайшего целого числа.

  • B. Она отбрасывает десятичную часть и возвращает целое число.

  • C. Она возвращает ближайшее меньшее целое число, если десятичная дробь ниже .5, и верхнее, если выше.

  • D. Это вызывает ValueError, если явно не обработано исключение.


Вопрос 67.
Дан массив целых чисел nums, содержащий n элементов, и целое число k. Разработайте алгоритм для поиска непрерывного подмассива (subarray) длины k в массиве nums, который имеет максимальное среднее значение. Возвратите это максимальное среднее значение.

Примеры:

Ввод: nums = [1,12,-5,-6,50,3], k = 4
Вывод: 12.75000

Ввод: nums = [5], k = 1
Вывод: 5.00000

  • A. Для решения задачи нужно использовать жадный алгоритм и выбирать на каждом шаге самый большой элемент из списка.

  • B. Для решения задачи нужно использовать алгоритм поиска в ширину (BFS).

  • C. Для решения задачи нужно использовать метод "скользящего окна" для эффективного поиска максимального среднего.

  • D. Для решения задачи, необходимо использовать рекурсивный обход всех вариантов.


Вопрос 69.
Что такое "Immutability" (иммутабельность) в контексте функционального программирования, и какие преимущества она предоставляет? Приведите примеры изменяемых и неизменяемых объектов в Python и объясните, как использование иммутабельности может упростить код.

  • A. Иммутабельность - это концепция, которая означает, что объекты можно изменять только в одном месте, при их создании, но не после.

  • B. Иммутабельность - это использование объектов только для чтения.

  • C. Иммутабельность - это концепция, которая заключается в избегании изменяемых данных и использовании только неизменяемых, что упрощает код и уменьшает вероятность побочных эффектов.

  • D. Иммутабельность - это паттерн проектирования для создания только одного объекта определенного типа, без возможности изменения его состояния.


Вопрос 70.
Что такое композиция функций, и как ее можно реализовать в Python? Приведите пример кода, демонстрирующий композицию функций, где результат одной функции передается в качестве аргумента другой.

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

  • B. Композиция функций - это процесс, когда функция вызывает себя несколько раз.

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

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


Ответы

61. Правильный ответ: B

Объяснение:

Бинарное дерево поиска (BST, Binary Search Tree) - это древовидная структура данных, где для каждого узла выполняются следующие свойства:

  • Значение всех узлов в левом поддереве меньше значения узла.

  • Значение всех узлов в правом поддереве больше значения узла.

  • Оба левое и правое поддерево тоже являются BST.

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

  • Процесс добавления узла со значением 25:

    1. Начало с корня: Начинаем поиск места для добавления нового узла с корня (30).

    2. Сравнение с корнем: Так как 25 меньше 30, переходим в левое поддерево.

    3. Сравнение с узлом 20: Так как 25 больше 20, то переходим в правое поддерево от узла 20.

    4. Правый потомок 20: Узел 20 не имеет правого потомка, поэтому узел со значением 25 будет добавлен как правый потомок узла 20.

Разбор вариантов:

  • A. Узел 25 будет добавлен как левый потомок узла 40.: Неправильно, так как 25 меньше 40.

  • B. Узел 25 будет добавлен как правый потомок узла 20.: Правильно.

  • C. Узел 25 будет добавлен как правый потомок узла 40.: Неправильно.

  • D. Узел 25 не будет добавлен, так как такой узел уже существует в дереве.: Неправильно. В данном случае узла 25 нет, так как это дерево поиска и одинаковых элементов не может быть.

В результате:

  • При добавлении нового узла в BST необходимо соблюдать свойства бинарного дерева поиска.

  • Правильная вставка узлов обеспечивает возможность быстрого поиска в BST.

Таким образом, правильным ответом является B. Узел 25 будет добавлен как правый потомок узла 20.


62. Правильный ответ: B

Объяснение:

Функция enumerate() в Python предназначена для упрощения итерации по последовательности (например, списку) с одновременным доступом к индексу и значению каждого элемента.

  • Вариант A не верен: enumerate() не переворачивает список. Для этого используется метод reverse().

  • Вариант B верен: enumerate() добавляет счетчик (индекс) к каждому элементу, предоставляя кортеж (индекс, значение) на каждой итерации.

  • Вариант C не верен: enumerate() не меняет значения элементов и не создает новый список.

  • Вариант D не верен: enumerate() не блокирует список и не предотвращает изменения во время итерации.

Как работает enumerate():

  1. Функция enumerate() принимает в качестве аргумента итерируемый объект (список, кортеж, строку и т. д.).

  2. Она возвращает объект-итератор, который выдаёт кортежи, состоящие из двух элементов: индекса и значения элемента.

  3. Индексы начинаются с 0 по умолчанию, но можно изменить стартовый индекс, передав необязательный параметр start.

Преимущества использования enumerate():

  • Доступ к индексу: Упрощает доступ к индексу элемента в цикле, что полезно, когда нужно обрабатывать элемент, зная его положение.

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

  • Эффективность: enumerate часто более эффективен, чем ручное отслеживание индекса, поскольку Python автоматически оптимизирует этот процесс.

Пример:

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост

В результате:

  • При использовании enumerate(), цикл автоматически предоставляет индекс и значение каждого элемента списка.

  • При использовании enumerate(my_list, start=1) индексы начинаются с 1.

Таким образом, вариант B является правильным ответом.


63. Правильный ответ: D

Объяснение:

Паттерн "Map" (отображение) — это распространенный функциональный паттерн, который применяется для преобразования каждого элемента в коллекции (например, список, кортеж) в новый элемент с использованием определенной функции. Результатом является новая коллекция, содержащая преобразованные элементы.

  • Основные концепции паттерна "Map":

    • Применение функции: Функция "отображения" применяется к каждому элементу входной коллекции.

    • Новая коллекция: Результаты применения функции сохраняются в новой коллекции.

    • Сохранение порядка: Обычно сохраняется порядок элементов (если это применимо к структуре данных).

    • Использование с функциями высшего порядка: Часто реализуется с помощью функций высшего порядка, таких как map() в Python.

  • Как работает паттерн "Map":

    1. Принимает входную коллекцию элементов.

    2. Принимает функцию преобразования.

    3. Применяет функцию к каждому элементу коллекции.

    4. Собирает результаты преобразования в новую коллекцию.

    5. Возвращает новую коллекцию с преобразованными значениями.

Примеры:

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост

Разбор примеров:

  1. Использование с обычной функцией square:

    • Функция square(x) возводит число в квадрат.

    • Функция map(square, numbers) применяет функцию square к каждому элементу списка numbers и возвращает итератор. Затем итератор преобразовывается в список.

    • Выводит исходный и новый списки.

  2. Использование с лямбда функцией:

    • Лямбда-функция lambda x: x ** 3 вычисляет куб числа.

    • Функция map(lambda x: x ** 3, numbers) применяет лямбду к каждому элементу списка numbers и возвращает итератор. Затем итератор преобразовывается в список.

    • Выводит исходный и новый списки.

  3. Использование map с преобразованием строк:

    • Лямбда-функция lambda x: x.upper() переводит строку в верхний регистр.

    • Функция map(lambda x: x.upper(), strings) применяет лямбда-функцию к каждой строке в списке strings.

    • Выводит исходный и новый списки.

  4. Использование map с несколькими коллекциями:

    • Лямбда-функция lambda x,y: x+y суммирует два числа.

    • Функция map(lambda x,y: x+y, list1, list2) применяет лямбда-функцию к каждому элементу в списках list1 и list2 (берет элементы с одинаковым индексом).

    • Выводит исходные списки и список сумм.

  5. Использование map c функцией, которая возвращает кортеж:

    • Лямбда функция lambda s, i: (i, s) создает пару (индекс, значение) для каждой строки в списке.

    • функция map создает список кортежей.

    • Выводит исходный список и список с проиндексированными строками.

  6. Использование map с различными типами данных:

    • Лямбда функция lambda x: type(x) возвращает тип объекта.

    • Функция map применяет эту функцию к каждому элементу в списке, что приводит к созданию списка типов.

    • Выводит исходный список и список типов.

Разбор вариантов:

  • A. Паттерн "Map" - это способ сортировки элементов в коллекции, используя заданную функцию.: Неправильно. Сортировка - это другая операция.

  • B. Паттерн "Map" - это способ фильтрации элементов в коллекции, используя заданное условие.: Неправильно. Фильтрация используется для выборки элементов по условию.

  • C. Паттерн "Map" - это способ объединения элементов коллекции в одно значение, используя заданную функцию.: Неправильно. Это описание паттерна Reduce.

  • D. Паттерн "Map" - это способ применения функции к каждому элементу коллекции и создания новой коллекции из полученных результатов.: Правильно.

В результате:

  • Паттерн "Map" позволяет создавать новый список путем преобразования элементов исходного списка с помощью функции преобразования.

  • Используя функцию map и лямбда-функции можно легко реализовать паттерн Map.

  • Функция map позволяет применять функцию к нескольким спискам одновременно.

  • Функция map может использоваться с функциями, которые возвращают любое значение (в том числе и кортежи), и может принимать любые типы данных.

Таким образом, правильным ответом является D. Паттерн "Map" - это способ применения функции к каждому элементу коллекции и создания новой коллекции из полученных результатов.


64. Правильный ответ: B

Объяснение:

Этот код демонстрирует работу замыканий (closures) и областей видимости переменных в Python.

  1. Функция outer_func(y):

    • Принимает аргумент y (в примере равен 3).

    • Инициализирует локальную переменную x значением 2.

    • Определяет вложенную функцию inner_func().

      • inner_func() "замыкается" над переменными из области видимости outer_func и возвращает сумму x + y.

    • Изменяет x на x + 2, то есть x теперь равен 4.

    • Изменяет y на 2.

    • Возвращает функцию inner_func как результат.

  2. Вызов outer_func(3):

    • Вызывает outer_func с аргументом 3.

    • Возвращаемая функция inner_func присваивается переменной results.

    • Важно отметить, что вложенная функция inner_func запоминает не значения переменных x и y в момент определения, а сами переменные, и они подставятся в момент вызова inner_func.

  3. Вызов results():

    • Вызывает функцию inner_func, которая была возвращена из outer_func и присвоена results.

    • Внутри inner_func:

      • x имеет значение 4, которое было вычислено в outer_func перед ее возвращением.

      • y имеет значение 2, которое было присвоено в outer_func перед ее возвращением.

    • Возвращается значение x + y = 4 + 2 = 6.

  4. Вывод: print(results()) выводит результат вызова inner_func ,то есть 6.

Разбор вариантов:

  • A. 7: Неправильно.

  • B. 6: Правильно.

  • C. 5: Неправильно.

  • D. 4: Неправильно.

В результате:

  • Вложенные функции могут захватывать переменные из области видимости родительской функции - это называется замыканием.

  • Захват переменной происходит по ссылке, а не по значению. В момент вызова inner_func переменные x и y будут иметь последнее присвоенное значение.

Таким образом, правильным ответом является B. 6.


65. Правильный ответ: B

Объяснение:

Этот код демонстрирует разницу между мутированием списка и созданием нового списка, а также то, как это влияет на переменные в Python.

  1. Изначальный список: my_list инициализируется как [1, 2, 3].

  2. Функция modify_list:

    • Принимает список lst в качестве аргумента.

    • lst.append(4): Метод append мутирует список, добавляя 4 в конец. Теперь lst (изначально my_list) стал [1, 2, 3, 4].

    • lst = lst + [5]: Операция + создает новый список, объединяя lst c [5]. Результат присваивается локальной переменной lst внутри функции. Это не изменяет my_list в глобальной области видимости.

    • Возвращается новый список lst.

  3. Вызов modify_list: Функция вызывается с my_list как аргументом. Возвращаемый новый список присваивается переменной new_list.

  4. Вывод:

    • print(my_list) выведет [1, 2, 3, 4], так как my_list был мутирован внутри функции.

    • print(new_list) выведет [1, 2, 3, 4, 5], который является новым списком, созданным в функции и возвращенным.

Дополнительные замечания:

  • Метод append изменяет исходный список (мутирует его).

  • Оператор + создает новый список, не изменяя исходные.

  • Присваивание внутри функции создает локальную переменную, которая никак не влияет на переменную с тем же именем, объявленную за пределами этой функции.

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


66. Правильный ответ: C

Объяснение:

В Python для хранения уникальных элементов наиболее подходит тип данных set (множество).

  • Вариант A не верен: Списки могут содержать повторяющиеся элементы и сохраняют порядок элементов.

  • Вариант B не верен: Словари хранят пары ключ-значение, и хотя ключи должны быть уникальными, для хранения просто уникальных идентификаторов пользователей это неэффективно.

  • Вариант C верен: Множества хранят только уникальные элементы в произвольном порядке и не поддерживают дубликаты.

  • Вариант D не верен: Кортежи являются неизменяемыми и могут хранить повторяющиеся элементы.

Почему множество (set) подходит для хранения уникальных идентификаторов:

  1. Уникальность элементов: Множества автоматически удаляют дубликаты, что идеально подходит для хранения уникальных идентификаторов.

  2. Быстрая проверка наличия: Проверка наличия элемента в множестве выполняется очень быстро (в среднем O(1)), благодаря реализации на основе хеш-таблицы.

  3. Неупорядоченность: Множества не гарантируют сохранение порядка элементов, что является приемлемым для идентификаторов пользователей.

  4. Изменяемость: Множества могут быть изменены (добавлять или удалять элементы).

Пример:

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост

В результате:

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

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

  • Операция in проверки наличия элемента в множестве выполняется быстро.

Таким образом, вариант C является верным.


67. Правильный ответ: B

Объяснение:

Функция int() в Python используется для преобразования значения к целому числу. При преобразовании числа с плавающей точкой (float) в целое число (int), функция int() отбрасывает десятичную часть, а не округляет.

  • Вариант A не верен: int() не выполняет округление, а отбрасывает десятичную часть.

  • Вариант B верен: int() именно отбрасывает десятичную часть и возвращает целое число.

  • Вариант C не верен: int() не выполняет округление по правилам "меньше .5 в меньшую сторону, больше - в большую".

  • Вариант D не верен: Функция int() может конвертировать строку, представляющую целое число, к integer типу, но не строку с плавающей точкой (например "7.7") и не вызовет ValueError при конвертации числа float в int

Пример:

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост

В результате:

  • При преобразовании 7.7 с помощью int(), возвращается 7, десятичная часть отброшена.

  • При преобразовании -7.7, возвращается -7.

  • При преобразовании 7.2, возвращается 7.

Таким образом, вариант B является правильным ответом.


68. Правильный ответ: C

Объяснение:

Для решения задачи поиска подмассива с максимальным средним значением и фиксированной длиной k в массиве чисел, оптимальным является применение метода "скользящего окна". Этот метод обеспечивает линейную временную сложность O(n), позволяя обойти массив только один раз.

  • Алгоритм (скользящее окно):

    1. Инициализация:

      • Вычисляем сумму первых k элементов массива, и сохраняем их в переменной current_sum.

      • Максимальная сумма max_sum инициализируется значением current_sum.

    2. Скользящее окно:

      • Начиная с k-го элемента до конца массива (для индекса i), поддерживаем окно размера k:

        • Из current_sum вычитаем элемент из начала окна (nums[i-k]). * К current_sum добавляем новый элемент в конце окна nums[i].

      • Сравниваем current_sum с max_sum и если больше то max_sum = current_sum

    3. Возвращаем результат: После перебора всех элементов, возвращаем max_sum / k, что соответствует максимальному среднему значению подмассива.

  • Преимущества алгоритма:

    • Линейная сложность: Обеспечивает временную сложность O(n).

    • Постоянная память: Использует постоянное количество дополнительной памяти.

    • Простота: Легок в реализации.

Пример:

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост

Разбор вариантов:

  • A. Для решения задачи нужно сначала отсортировать массив capacity, затем последовательно заполнять сумки, пока не закончатся камни.: Неправильно.

  • B. Для решения задачи нужно использовать алгоритм поиска в ширину (BFS).: Неправильно. BFS не является подходящим для этой задачи.

  • C. Для решения задачи нужно использовать метод "скользящего окна" для эффективного поиска максимального среднего.: Правильно.

  • D. Для решения задачи нужно использовать только рекурсивный алгоритм.: Неправильно. Рекурсивный алгоритм не подходит.

В результате:

  • Алгоритм скользящего окна позволяет эффективно находить подмассив с максимальным средним значением.

  • Итерируясь по массиву только один раз достигается сложность O(n)

  • Результирующее среднее значение будет получено с помощью деления максимальной суммы на размер подмассива k

Таким образом, правильным ответом является C. Для решения задачи нужно использовать метод "скользящего окна" для эффективного поиска максимального среднего.


69. Правильный ответ: C

Объяснение:

Иммутабельность (immutability) — это концепция в программировании, особенно в функциональном программировании, которая заключается в избегании изменяемых данных. Иммутабельные объекты — это объекты, которые не могут быть изменены после создания. При изменении такого объекта фактически создаётся новый объект с измененным значением, а старый остается неизменным.

  • Основные принципы иммутабельности:

    • Неизменяемость: Объекты не могут быть изменены после создания.

    • Новый объект при изменении: Любая операция, которая кажется изменяет объект, на самом деле создаёт новый объект с измененными значениями.

    • Отсутствие побочных эффектов: Функции, работающие с иммутабельными объектами, не изменяют состояние существующих данных и не создают побочных эффектов, если не создавать новые переменные.

    • Простота и предсказуемость: Код становится более простым и предсказуемым, так как не происходит нежелательного изменения объектов.

  • Преимущества иммутабельности:

  • Безопасность: Исключение побочных эффектов, снижение вероятности ошибок, связанных с одновременным изменением объектов из разных частей программы. * Упрощение отладки: Код, который не изменяет данные, намного проще отлаживать. * Многопоточность: Легче работать с иммутабельными объектами в многопоточной среде, поскольку не нужно беспокоиться о гонках данных.

  • Иммутабельные и изменяемые объекты в Python:

    • Иммутабельные объекты: * Числа (int, float, complex). * Строки (str). * Кортежи (tuple). * frozenset - не изменяемые множества. * Булевы значения (bool).

    • Изменяемые объекты:

      • Списки (list).

      • Словари (dict).

      • Множества (set).

Примеры:

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост

Разбор примеров:

  1. Пример иммутабельных объектов:

    • string2 = string1.upper() создает новую строку string2 в верхнем регистре, а string1 не меняется.

    • tuple2 = tuple1 + (4,5) создает новый кортеж tuple2, а tuple1 не меняется.

  2. Пример изменяемых объектов:

    • list2 = list1 присваивает list2 ссылку на список, который хранится в list1, то есть, не создается новый список. * list1[0] = 10 изменяет оригинальный список, и поэтому все переменные, которые ссылаются на него, изменятся тоже.

    • list2 = list1.copy() создает новый список, и он не будет изменен после изменения list1

Разбор вариантов:

  • A. Иммутабельность - это концепция, которая означает, что объекты можно изменять только в одном месте, при их создании, но не после.: Неправильно.

  • B. Иммутабельность - это использование объектов только для чтения.: Неправильно. Иммутабельные объекты не могут быть изменены совсем, а не только для чтения.

  • C. Иммутабельность - это концепция, которая заключается в избегании изменяемых данных и использовании только неизменяемых, что упрощает код и уменьшает вероятность побочных эффектов.: Правильно.

  • D. Иммутабельность - это паттерн проектирования для создания только одного объекта определенного типа, без возможности изменения его состояния.: Неправильно.

В результате:

  • Иммутабельность способствует созданию более безопасного, предсказуемого и простого кода.

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

Таким образом, правильным ответом является C. Иммутабельность - это концепция, которая заключается в избегании изменяемых данных и использовании только неизменяемых, что упрощает код и уменьшает вероятность побочных эффектов.


70. Правильный ответ: C

Объяснение:

Композиция функций (function composition) — это функциональный паттерн, который позволяет объединять две или более функции таким образом, что результат одной функции передается в качестве аргумента другой функции. Это позволяет создавать новые, более сложные функции, из простых и переиспользуемых.

  • Основные концепции композиции функций:

    • Цепочка вычислений: Результат одной функции становится входным значением для следующей функции.

    • Последовательное применение: Функции применяются друг за другом в определенном порядке.

    • Новая функция из простых: Композиция позволяет создавать сложные функции из более простых.

    • Возможность повторного использования: Композиция позволяет переиспользовать ранее созданные функции.

  • Реализация композиции в Python:

    • В Python композицию можно реализовать вручную с помощью вложенных вызовов функций или с помощью оператора | (начиная с Python 3.9), или с помощью использования лямбда-функций.

Пример (из текста вопроса):

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост

Описание примера:

  1. double(x): Функция, которая умножает число x на 2.

  2. square(x): Функция, которая возводит число x в квадрат.

  3. compose(f, g): Функция, реализующая композицию.

    • Принимает функции f и g в качестве аргументов.

    • Возвращает лямбда-функцию lambda x: f(g(x)), которая сначала применяет функцию g к аргументу x, а затем применяет функцию f к результату g(x).

  4. composed = compose(square, double): Создается новая функция composed, которая является композицией square и double. Она эквивалента lambda x : square(double(x)).

  5. composed(5): Принимает аргумент 5 и выполняет функции в порядке (5*2)**2, т.е. double(5) (что равно 10) и затем square(10) (что равно 100).

Другие примеры:

Вопросы собеседований. 61 - 70 Гайд, Программирование, Python, Длиннопост

Разбор вариантов:

  • A. Композиция функций - это процесс создания объектов из классов, использующих значения, полученные из других объектов.: Неправильно. Композиция функций не связана с созданием объектов из классов.

  • B. Композиция функций - это процесс, когда функция вызывает себя несколько раз.: Неправильно. Это описание рекурсии.

  • C. Композиция функций - это комбинация двух или более функций, при которой результат выполнения одной функции передается в качестве аргумента другой функции.: Правильно.

  • D. Композиция функций - это способ создания функций, которые могут выполняться в отдельных потоках.: Неправильно.

В результате:

  • Композиция функций позволяет создавать более сложные операции из простых.

  • Использование композиции способствует модульности и переиспользованию кода.

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

Показать полностью 10
11

Вопросы собеседований. 71 - 80

Вопросы 👉 1 - 10
Вопросы 👉 11 - 20
Вопросы 👉 21 - 30
Вопросы 👉 31 - 40
Вопросы 👉 41 - 50
Вопросы 👉 51 - 60
Вопросы 👉 61 - 70


Вопросы

Вопрос 71. Что делает метод split() при применении к строке в Python?

  • A. Он разделяет строку на список подстрок везде, где находит пробельный символ, и возвращает список.

  • B. Он удаляет пробелы в начале и конце строки.

  • C. Он объединяет две строки в одну.

  • D. Он переворачивает строку.

Вопрос 72. Что такое монады в Python, и как они используются? Приведите пример использования монады Maybe для обработки возможных ошибок или отсутствия значений.

  • A. Монады — это встроенные типы данных в Python для хранения последовательностей чисел.

  • B. Монады — это способ организации кода, чтобы использовать больше переменных, не изменяя производительность программы.

  • C. Монады — это абстрактная конструкция, используемая в функциональном программировании для построения цепочек вычислений, а Maybe монада используется для обработки возможных ошибок или отсутствия значений.

  • D. Монады - это объекты, которые используются для описания иерархии классов в Python.

Вопрос 73. Как вы можете получить количество вхождений значения в списке Python?

  • A. count()

  • B. length()

  • C. size()

  • D. number()

Вопрос 74. В Python, что делает оператор with при работе с ресурсами, такими как файлы?

  • A. Он гарантирует, что файл остается открытым на протяжении всего выполнения программы.

  • B. Он автоматически закрывает файл после выполнения блока кода, даже если произошли ошибки.

  • C. Он используется для принудительного открытия файла в режиме записи.

  • D. Он используется для переименования файла.

Вопрос 75. Что такое ленивая оценка (lazy evaluation) в Python, и как она работает? Приведите пример, демонстрирующий использование ленивых вычислений.

  • A. Ленивая оценка - это метод оценки, при котором выражения вычисляются сразу после их определения.

  • B. Ленивая оценка - это стратегия вычислений, при которой выражение вычисляется только тогда, когда его значение необходимо. В Python это может быть реализовано с помощью генераторов и итераторов.

  • C. Ленивая оценка - это когда используются только те переменные, к которым есть обращение.

  • D. Ленивая оценка - это метод ускорения вычислений путем выполнения их параллельно.

Вопрос 76. Что делает следующий код Python, реализующий алгоритм сортировки?

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост
  • A. Сортирует массив в обратном порядке.

  • B. Сортирует массив в порядке возрастания с помощью алгоритма пузырьковой сортировки.

  • C. Сортирует массив в порядке убывания с помощью алгоритма сортировки вставками.

  • D. Удаляет дубликаты из массива и сортирует его.

Вопрос 77. Какие существуют основные способы копирования списков в Python, и в чем разница между поверхностным и глубоким копированием? Приведите примеры, демонстрирующие различные способы копирования и их эффект.

  • A. В Python есть только один способ копирования списков - с использованием метода copy(), все остальные способы создают ссылки на исходный список.

  • B. Существуют способы поверхностного копирования ([:], list(), copy()) и глубокого копирования (deepcopy()). Поверхностное копирование создает новый список, но элементы вложенных списков остаются ссылками на оригинальный список. Глубокое копирование создает полностью независимые копии списков, включая все вложенные объекты.

  • C. Существуют три способа копирования списков: [:], list() и copy(), которые выполняют глубокое копирование.

  • D. В Python списки не могут быть скопированы, их можно только переименовать.

Вопрос 78. Каково основное назначение функции zip() в Python?

  • A. Для сжатия файлов.

  • B. Для одновременного итерирования по двум и более последовательностям.

  • C. Для извлечения файлов.

  • D. Для кодирования данных.

Вопрос 79. Что делает оператор is в Python?

  • A. Проверяет, указывают ли обе переменные на один и тот же объект.

  • B. Сравнивает значения двух переменных.

  • C. Гарантирует, что типы переменных идентичны.

  • D. Преобразует тип объекта в целое число.

Вопрос 80. В Python, что возвращает функция globals()?

  • A. Список всех глобальных символов.

  • B. Словарь, представляющий текущую глобальную таблицу символов.

  • C. Значение последнего выражения, вычисленного интерпретатором.

  • D. Список всех локальных символов.


Ответы

71, Правильный ответ: A

Объяснение:

Метод split() в Python используется для разделения строки на подстроки на основе разделителя, который по умолчанию является пробельным символом.

  • Вариант A верен: split() делит строку на список подстрок.

  • Вариант B не верен: strip() используется для удаления пробелов в начале и конце строки.

  • Вариант C не верен: Объединение строк выполняется с помощью оператора + или join().

  • Вариант D не верен: Для переворота строки используется метод reversed(), либо срезы [::-1].

Как работает split():

  1. Метод split() применяется к строке.

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

  3. Он разделяет строку на подстроки в местах разделителя.

  4. Он возвращает список, содержащий эти подстроки.

  5. Если разделитель не указан, split() будет использовать все пробельные символы как разделители.

Примеры:

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

В результате:

  • Строка "apple banana orange" была разделена на список из трех слов ['apple', 'banana', 'orange'], с помощью разделителя "пробел"

  • Строка "apple,banana,orange" была разделена на три части по запятой ,.

Таким образом, вариант A является правильным ответом.

72 . Правильный ответ: C

Объяснение:

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

  • Ключевые концепции монад:

    • Контейнеры: Монады обычно представляют собой контейнеры для значений.

    • Композиция: Монады позволяют объединять (композировать) функции в цепочки, так что выход одной функции становится входом для следующей.

    • Управление побочными эффектами: Монады помогают изолировать и управлять побочными эффектами (например, ошибки, ввод/вывод) внутри цепочки вычислений.

  • Монада Maybe (или Option):

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

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

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

Пример (из текста вопроса):

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

Разбор примера:

  1. class Maybe: Создаем класс, который реализует Maybe монаду.

  2. __init__: конструктор класса.

  3. bind(self, func): метод, который связывает Maybe с другой функцией. Если текущее значение Maybe это None, то возвращает Maybe() (а значит None). В противном случае - вызовет функцию func c текущим значением.

  4. safe_divide(x, y): Функция, которая безопасно делит x на y, возвращая Maybe(), если y равен нулю.

  5. result: Инициализируется с Maybe(10) , и затем выполняется цепочка операций, где каждый bind связывает результат предыдущего шага со следующим вычислением.

  6. Так как деление на 0 в результате вернет None , и все последующие значения bind вернут None, то в итоге result.value будет равен None.

Разбор вариантов:

  • A. Монады — это встроенные типы данных в Python для хранения последовательностей чисел: Неправильно. Монады - это абстрактная концепция, а не встроенный тип данных.

  • B. Монады — это способ организации кода, чтобы использовать больше переменных, не изменяя производительность программы.: Неправильно. Монады не для управления количеством переменных.

  • C. Монады — это абстрактная конструкция, используемая в функциональном программировании для построения цепочек вычислений, а Maybe монада используется для обработки возможных ошибок или отсутствия значений.: Правильно.

  • D. Монады - это объекты, которые используются для описания иерархии классов в Python.: Неправильно.

В результате:

  • Монады предоставляют способ структурирования вычислений и управления побочными эффектами.

  • Монада Maybe помогает обрабатывать возможные ошибки или отсутствие значений, обеспечивая более безопасный код.

Таким образом, правильным ответом является C. Монады — это абстрактная конструкция, используемая в функциональном программировании для построения цепочек вычислений, а Maybe монада используется для обработки возможных ошибок или отсутствия значений.

73, Правильный ответ: A

Объяснение:

Для подсчета количества вхождений определенного значения в списке Python используется метод count().

  • Вариант A верен: Метод count() возвращает количество вхождений указанного значения в списке.

  • Вариант B не верен: length() или len() используется для получения общей длины (количества элементов) списка, а не количества вхождений конкретного значения.

  • Вариант C не верен: size() не является методом для списков в Python.

  • Вариант D не верен: number() не является методом для списков в Python.

Как работает count():

  1. Метод count() вызывается у списка.

  2. Он принимает один аргумент - значение, количество вхождений которого нужно подсчитать.

  3. Он возвращает целое число, представляющее количество раз, которое указанное значение встречается в списке.

Пример:

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

В результате:

  • my_list.count(2) возвращает 3, так как число 2 встречается три раза в списке.

  • my_list.count(6) возвращает 0, так как число 6 не встречается в списке.

Таким образом, вариант A является правильным.

74, Правильный ответ: B

Объяснение:

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

  • Вариант A не верен: with гарантирует закрытие файла, а не его постоянное открытие.

  • Вариант B верен: with автоматически закрывает файл после использования.

  • Вариант C не верен: with не используется для открытия файлов в режиме записи, эта операция выполняется при помощи параметра mode="w" в функции open().

  • Вариант D не верен: with не используется для переименования файлов, для этого применяют модуль os.

Как работает with:

  1. with работает с "менеджером контекста" (context manager), который гарантирует корректное управление ресурсами.

  2. Когда выполнение достигает оператора with, вызывается метод __enter__ объекта менеджера контекста (например, файл открывается).

  3. После выполнения кода внутри with блока, вызывается метод __exit__, гарантируя закрытие файла, независимо от того, возникли ли ошибки в блоке with.

Пример:

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

В результате:

  • Файл будет автоматически открыт при входе в блок with.

  • После выполнения кода внутри блока with файл будет автоматически закрыт даже при возникновении исключений.

Таким образом, вариант B является правильным.

75, Правильный ответ: B

Объяснение:

Ленивая оценка (lazy evaluation) — это стратегия вычислений, при которой выражение не вычисляется немедленно, а откладывается до момента, когда его значение действительно необходимо. Эта стратегия позволяет экономить вычислительные ресурсы, поскольку вычисления не выполняются до тех пор, пока их результат действительно не потребуется.

  • Основные концепции ленивой оценки:

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

    • Экономия ресурсов: Позволяет экономить память и процессорное время за счет того, что вычисляются только нужные значения.

    • Бесконечные последовательности: Позволяет представлять бесконечные последовательности данных, поскольку значения вычисляются по запросу.

    • Использование генераторов и итераторов: Python позволяет реализовать ленивые вычисления с помощью генераторов и итераторов.

  • Генераторы и ленивые вычисления:

    • Генераторы — это специальные функции, которые используют yield для возвращения значений по одному за раз.

    • Генераторы вычисляют следующее значение только когда вызывается функция next или происходит итерация в цикле for, а не вычисляют все значение сразу.

Пример (из текста вопроса):

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

Описание примера:

  • fibonacci(): Генераторная функция, которая генерирует бесконечную последовательность чисел Фибоначчи.

    • while True: бесконечный цикл

    • yield a: возвращает следующее число Фибоначчи и приостанавливает выполнение функции.

  • fib_gen = fibonacci(): Создает объект-генератор.

  • for i in range(10): Цикл, который выполнится 10 раз.

  • next(fib_gen): Вызывает генератор, заставляя его вычислить и вернуть следующее значение Фибоначчи.

  • Генератор генерирует значения по запросу и только когда они нужны циклу.

Другие примеры:

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

Разбор вариантов:

  • A. Ленивая оценка - это метод оценки, при котором выражения вычисляются сразу после их определения.: Неправильно. Это противоположность ленивой оценки.

  • B. Ленивая оценка - это стратегия вычислений, при которой выражение вычисляется только тогда, когда его значение необходимо. В Python это может быть реализовано с помощью генераторов и итераторов.: Правильно.

  • C. Ленивая оценка - это когда используются только те переменные, к которым есть обращение.: Неправильно. Это связано не с ленивыми вычислениями, а с областью видимости переменных.

  • D. Ленивая оценка - это метод ускорения вычислений путем выполнения их параллельно.: Неправильно.

В результате:

  • Ленивая оценка позволяет экономить ресурсы за счет отложенных вычислений.

  • Генераторы и итераторы позволяют реализовывать ленивую оценку в Python.

Таким образом, правильным ответом является B. Ленивая оценка - это стратегия вычислений, при которой выражение вычисляется только тогда, когда его значение необходимо. В Python это может быть реализовано с помощью генераторов и итераторов.

76, Правильный ответ: B

Объяснение:

Предоставленный код реализует алгоритм пузырьковой сортировки (bubble sort).

  • Алгоритм пузырьковой сортировки:

    • Сравнивает соседние элементы массива.

    • Если текущий элемент больше следующего, то они меняются местами.

    • В результате каждого прохода самый большой элемент "всплывает" в конец массива.

    • Проходы повторяются, уменьшая на каждом шаге границу рассматриваемой части массива.

  • Описание кода:

    • bubble_sort(arr): Функция, которая принимает массив arr в качестве аргумента.

    • n = len(arr): Определяет длину массива.

    • for i in range(n): Внешний цикл проходит по массиву n раз.

    • for j in range(0, n-i-1): внутренний цикл проходит до границы отсортированной части массива.

    • if arr[j] > arr[j+1]: проверяет, нужно ли менять соседние элементы местами.

    • arr[j], arr[j+1] = arr[j+1], arr[j]: меняет соседние элементы местами.

    • return arr: возвращает отсортированный массив.

Разбор вариантов:

  • A. Сортирует массив в обратном порядке: Неправильно.

  • B. Сортирует массив в порядке возрастания с помощью алгоритма пузырьковой сортировки: Правильно.

  • C. Сортирует массив в порядке убывания с помощью алгоритма сортировки вставками: Неправильно.

  • D. Удаляет дубликаты из массива и сортирует его: Неправильно.

В результате:

  • Код правильно реализует алгоритм пузырьковой сортировки для сортировки массива в порядке возрастания.

  • Пузырьковая сортировка является простым, но не самым эффективным алгоритмом сортировки.

Таким образом, правильным ответом является B. Сортирует массив в порядке возрастания с помощью алгоритма пузырьковой сортировки.

77, Правильный ответ: B

Объяснение:

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

  1. Поверхностное копирование (Shallow Copy):

    • Создает новый объект списка, но не рекурсивно копирует объекты, содержащиеся в исходном списке.

    • Если элементы исходного списка сами являются изменяемыми объектами (например, вложенные списки), то в скопированном списке будут храниться ссылки на эти объекты, а не их копии.

    • Способы создания поверхностной копии:

      • Срез ([:]): new_list = old_list[:]

      • Функция list(): new_list = list(old_list)

      • Метод copy(): new_list = old_list.copy()

  2. Глубокое копирование (Deep Copy):

    • Создает новый объект списка и рекурсивно копирует все объекты, содержащиеся в исходном списке, включая вложенные изменяемые объекты.

    • Изменения в глубоко скопированном списке не повлияют на исходный список и наоборот.

    • Используется функция deepcopy() из модуля copy.

      • import copy; new_list = copy.deepcopy(old_list)

Примеры кода (поверхностное копирование):

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

Вывод:

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

Примеры кода (глубокое копирование):

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

Вывод:

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

Разбор вариантов:

  • A. В Python есть только один способ копирования списков - с использованием метода copy(), все остальные способы создают ссылки на исходный список: Неправильно.

  • B. Существуют способы поверхностного копирования ([:], list(), copy()) и глубокого копирования (deepcopy()). Поверхностное копирование создает новый список, но элементы вложенных списков остаются ссылками на оригинальный список. Глубокое копирование создает полностью независимые копии списков, включая все вложенные объекты: Правильно.

  • C. Существуют три способа копирования списков: [:], list() и copy(), которые выполняют глубокое копирование: Неправильно, эти способы выполняют только поверхностное копирование.

  • D. В Python списки не могут быть скопированы, их можно только переименовать: Неправильно.

В результате:

  • Поверхностное копирование создает новый список, но не создает новые объекты для вложенных изменяемых элементов (их ID не меняется).

  • Глубокое копирование создает полностью независимую копию списка, включая все вложенные объекты.

Таким образом, правильным ответом является B. Существуют способы поверхностного копирования ([:], list(), copy()) и глубокого копирования (deepcopy()). Поверхностное копирование создает новый список, но элементы вложенных списков остаются ссылками на оригинальный список. Глубокое копирование создает полностью независимые копии списков, включая все вложенные объекты.

78, Правильный ответ: B

Объяснение:

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

  • Вариант A не верен: Функция zip() не занимается сжатием файлов.

  • Вариант B верен: zip() позволяет итерировать по нескольким последовательностям одновременно.

  • Вариант C не верен: zip() не предназначена для извлечения файлов.

  • Вариант D не верен: zip() не занимается кодированием данных.

Как работает zip():

  1. Функция zip() принимает в качестве аргументов два или более итерируемых объекта.

  2. Она возвращает итератор, который генерирует кортежи.

  3. Каждый кортеж содержит элементы из соответствующих позиций входных итерируемых объектов.

  4. Итерация продолжается до тех пор, пока один из входных итерируемых объектов не закончится.

Типичные случаи использования zip():

  1. Параллельная итерация: Когда нужно перебрать несколько последовательностей одновременно, имея доступ к элементам с одинаковым индексом.

  2. Создание словарей: Для создания словаря из двух списков, один из которых является ключами, а другой - значениями.

  3. Транспонирование матриц: zip() используется при транспонировании матриц (замена строк на столбцы и наоборот).

  4. Объединение данных: Соединение данных из разных списков в пары или кортежи для дальнейшей обработки.

Пример:

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

В результате:

  • При итерировании с помощью zip() , пары элементов из names и ages выдаются на каждой итерации.

  • zip(names, ages) вернет пары только до тех пор пока не закончится наименьший итерабельный объект.

  • В словаре каждый ключ будет из списка names, а значение из списка ages

Таким образом, вариант B является верным ответом.

79, Правильный ответ: A

Объяснение:

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

  • Вариант A верен: Оператор is проверяет идентичность объектов, а не их значения.

  • Вариант B не верен: Для сравнения значений используется оператор ==.

  • Вариант C не верен: is не проверяет типы, а только идентичность объектов.

  • Вариант D не верен: is не занимается преобразованием типов.

Как работает оператор is:

  1. Он сравнивает два объекта (переменные) по их идентичности (то есть, по их расположению в памяти), а не по их значениям.

  2. Возвращает True, если оба операнда ссылаются на один и тот же объект в памяти.

  3. Возвращает False в противном случае.

Важные отличия от ==:

  • ==: Проверяет равенство значений объектов. Возвращает True, если значения объектов равны.

  • is: Проверяет идентичность объектов. Возвращает True, если обе переменные указывают на один и тот же объект в памяти.

Пример:

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

В результате:

  • a и b имеют одинаковые значения, но являются разными объектами в памяти, поэтому == возвращает True, а is возвращает False.

  • a и c указывают на один и тот же объект, поэтому и == и is возвращают True

  • Python, для оптимизации работы с небольшими числами, создает один объект для них в памяти. Поэтому в примере с num3 и num4 , обе переменные будут ссылаться на один и тот же объект.

Таким образом, вариант A является правильным ответом.

80, Правильный ответ: B

Объяснение:

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

  • Вариант A не верен: globals() возвращает словарь, а не список.

  • Вариант B верен: globals() возвращает словарь с информацией о глобальных символах.

  • Вариант C не верен: Для получения значения последнего выражения используется _

  • Вариант D не верен: Для локальных переменных используется locals()

Что такое глобальная таблица символов:

Глобальная таблица символов — это словарь, который содержит все переменные, функции, классы и другие объекты, определенные на уровне модуля (то есть, в глобальной области видимости). Ключами в этом словаре являются имена объектов, а значениями являются сами объекты.

Как использовать globals():

Функция globals() может быть полезна для:

  • Интроспекции: Для получения информации о глобальных переменных, функций и классов.

  • Динамическое управление переменными: Можно использовать для доступа к глобальным переменным и их значениям динамически.

Пример:

Вопросы собеседований. 71 - 80 Гайд, Инструкция, Python, Рекомендации, Программирование, Длиннопост

В результате:

  • При вызове globals() вне функции, словарь содержит все глобальные переменные, определенные в скрипте, включая global_var и my_function.

  • При вызове globals() внутри my_function(), словарь покажет те же глобальные переменные.

  • Словарь locals() внутри my_function() покажет локальные переменные. Таким образом, вариант B является верным.


Удачи! Подпишись, чтобы не пропустить

Показать полностью 14
Отличная работа, все прочитано!