Часть вторая: 150 вопросов для собеседования на вакансию Python. Часть 2 (с опытом работы)
Общие вопросы по Python с ответами
В1. Основные фичи питона?
Если питон оказался первым языком в опыте программирования, нужно иметь общее понимание о нем. Какие у него основные признаки:
- это интерпретируемый язык
- в нем динамическая типизация данных
- это объектно-ориентированный язык
- он лаконичный и внешне простой
- распространяется бесплатно
- у него большое сообщество
В2. В чем разница между списками (list) и кортежами (tuple)?
Основная разница в том, что список может изменяться (mutable), а кортеж не может (immutable).
>>> mylist = [1, 3, 3]
>>> mylist[1] = 2
>>> mytuple = (1, 3, 3)
>>> mytuple[1] = 2
Traceback (most recent call last):
File “<pyshell#97>”, line 1, in
mytuple[1] = 2
TypeError: "tuple" object does not support item assignment
В3. Как в питоне работает трёхместный (тернарный) оператор?
В питоне есть такие выражения:
[если верно] if [выражение] else [если неверно]
То есть, когда выражение верное (True), то исполняется код [если верно]. В остальных случаях исполняется код [если неверно]. Например:
>>> a, b = 2, 3
>>> min = a if a < b else b
>>> min
2
>>> print("Hi") if a < b else print("Bye")
Hi
В4. Что такое отрицательный индекс (negative index)?
Возьмем для примера список:
В отличие от положительного индекса отрицательный начинает поиск с конца:
6
Еще это помогает при создании срезов с конца:
[3, 4, 5, 6, 7]
В5. Питон чувствителен к регистру?
Язык считается чувствительным к регистру в случае, если он различает имена "myname" и "Myname". То есть, если он отслеживает разницу регистра (между верхним и нижним). Посмотрим, как с этим в питоне.
>>> myname="Ayushi"
>>> Myname
Traceback (most recent call last):
File “<pyshell#3>”, line 1, in
Myname
NameError: name "Myname" is not defined
Убедились в том, что питон чувствителен к регистру.
В6. Предельно допустимая длина идентификатора в питоне?
В питоне идентификатор может быть любой длины. Помимо этого есть несколько правил для присвоения имен:
- первым символом может быть нижнее подчеркивание (_), символы A-Z или a-z;
- остальная часть имени может состоять из символов A-Z/a-z/_/0-9;
- не забываем, что питон чувствителен к регистру;
- в качестве имени нельзя использовать ключевые слова (keywords):
and, def, False, import, not, True, as, del, finally, in, or, try, assert, elif, for, is, pass, while, break, else, from, lambda, print, with, class, except, global, None, raise, yield, continue, exec, if, nonlocal, return.
В7. Как можно преобразовать строку (string) в нижний регистр (lowercase)?
Для этого используется метод lower():
"ayushi"
Для преобразования в верхний регистр (uppercase) используется метод upper():
"AYUSHI"
Еще есть методы isupper() (все символы в верхнем регистре) и islower() (все символы в нижнем регистре), которые проверяют регистр всех символов имени.
>>> "AyuShi".isupper()
False
>>> "AYUSHI".isupper()
True
>>> "ayushi".islower()
True
>>> "@yu$hi".islower()
True
>>> "@YU$HI".isupper()
True
Как видим, символы наподобие @ и $ применимы в обоих случаях.
Еще есть метод istitle(), который проверяет строку на стиль заголовка (все слова должны начинаться с символа в верхнем регистре):
True
В8. Для чего нужен pass (pass statement) в питоне?
Иногда нужно, чтобы код не давал никакого результата и не показывал ошибку, например, если еще не готово, но нужно иметь синтаксический корректный код. Можно поставить pass:
pass
Кроме него есть break (break statement), которое разрывает цикл:
if i == 3: break
print(i)
0
1
2
Наконец, есть continue (continue statement), которое перешагивает на следующую итерацию:
if i==3: continue
print(i)
0
1
2
4
5
6
Часто задаваемые вопросы на собеседовании по Python с ответами (без опыта работы)
В9. Расскажите про функции help() и dir() в питоне.
Функция help() показывает строку документации и справку для ее аргумента:
>>> help(copy.copy)
Help on function copy in module copy: # справка по функции copy в модуле copy:
copy(x)
Shallow copy operation on arbitrary Python objects. # операция поверхностного копирования для выбранного объекта питона.
See the module"s __doc__ string for more info. № # дополнительную информацию см. в строке __doc__ этого модуля.
Функция dir() возвращает список, содержащий пространство имен в объекте:
["__annotations__", "__call__", "__class__", "__closure__", "__code__", "__defaults__", "__delattr__", "__dict__", "__dir__", "__doc__", "__eq__", "__format__", "__ge__", "__get__", "__getattribute__", "__globals__", "__gt__", "__hash__", "__init__", "__init_subclass__", "__kwdefaults__", "__le__", "__lt__", "__module__", "__name__", "__ne__", "__new__", "__qualname__", "__reduce__", "__reduce_ex__", "__repr__", "__setattr__", "__sizeof__", "__str__", "__subclasshook__"]
В10. Как получить список из всех ключей словаря (dictionary keys)?
На такие вопросы нужно отвечать детально, с примерами. Данная задача выполняется с помощью функции keys():
>>> mydict.keys()
dict_keys(["a", "b", "c", "e"])
В11. Что такое срез?
Срез — это методика, которая позволяет получить часть списка, кортежа или строки.
>>> (1, 2, 3, 4, 5)[2:4]
(3, 4)
>>> [7, 6, 8, 5, 9][2:]
[8, 5, 9]
>>> "Hello"[:-1]
"Hell"
В12. Как пишутся комментарии в питоне?
Для этого используется символ #. Все, что написано на строке после него, считается комментарием и игнорируется. Комментарии используются для объяснения цели написанного кода. Многострочных комментариев в прямом смысле слова в питоне нет.
>>> # первая строка комментария
>>> # вторая строка комментария
В13. Как проверить, что все символы строки относятся к алфавитно-цифровым?
Для этого используется метод isalnum().
В14. Как перевести первый символ строки в верхний регистр?
Для этого есть метод capitalize():
"Ayushi"
В15. Все знают, что сегодня питон в моде. Но истинное принятие новой технологии подразумевает понимание ее недостатков. Что вы можете сказать по этому поводу?
Какие в питоне есть ограничения:
- интерпретируемая природа питона снижает скорость исполнения программы
- его не выгодно использовать для мобильных устройств и браузеров
- будучи языком с динамической типизацией данных, он использует утиную типизацию; в связи с этим появляются ошибки исполнения (runtime errors);
- в нем слабо развиты возможности доступа к базам данных; поэтому питон не идеальный вариант для приложений с очень большими базами данных;
- низкие требования на входе, то есть свои силы в питоне может попробовать каждый; это иногда снижает качество кода;
- у питона индивидуально выраженный стиль.
В16. Как в питоне узнать, в какой мы сейчас директории?
Для этого используется функция getcwd(). Она импортируется из модуля os:
>>> os.getcwd()
"C:\\Users\\lifei\\AppData\\Local\\Programs\\Python\\Python36-32"
В17. Как вставить объект, чтобы он оказался под определенным индексом?
Сначала создадим список:
Затем используем метод insert(). В нем первым аргументом будет индекс, под которым вставляется объект, а вторым — значение объекта:
>>> a
[1, 2, 3, 4]
В18. Как можно обратить (reverse) порядок элементов в списке?
Для этого есть метод reverse():
>>> a
[4, 3, 2, 1]
В19. Что такое приглашение интерпретатора (interpreter prompt)?
Когда мы заходим в интерпретатор питона, то видим следующую строку:
В20. Что нужно сделать, чтобы функция возвратила значение?
Для этого используется ключевое слово return:
return a + b
В21. Что такое блок?
Когда мы пишем предложение (statement), нам нужно завершить первую строку двоеточием, а под ним написать блок кода, который исполняется в рамках этого предложения. Каждая строка блока пишется с одинаковым отступом.
>>> if 3 > 1:
print("Hello")
print("Goodbye")
Hello
Goodbye
В22. Зачем нужны break и continue?
Они используются для управления последовательностью операций: break останавливает исполнение цикла и переводит исполнение на следующий блок кода, continue как бы перепрыгивает на следующую итерацию цикла и не прекращает его исполнение.
В23. Если мы не поставим двоеточие в конце строки для цикла "do-while", он все равно сработает?
В питоне такой цикл не реализован. Это вопрос из тех, которые с подвохом, когда упоминают элементы других языков.
В24. Напишите в одну строку, как можно получить самую позднюю по значению букву в строке.
Значение буквы определяется по ее коду в ASCII. Для этого подойдет функция max():
"y"
С помощью той же логики можно объяснить следующую строку кода:
"}"
В25. В каких областях питон имеет преимущество?
Лучше всего питон использовать в следующих областях:
- веб-приложения
- графические интерфейсы пользователя для настольных ПК
- научные и арифметические приложения
- разработка ПО
- разработка программ обучения
- приложения для бизнеса
- сетевые приложения
- игры, 3D-графика
В26. Можете назвать десять встроенных функций питона?
Функция complex() создает комплексное число:
(3.5+4j)
Функция eval() исполняет строку:
20
Функция filter() отфильтровывает элементы, для которых заданное условие верно.
>>> list(filter(lambda x: x%2 == 0,[1, 2, 0, False]))
[2, 0, False]
Функция format() помогает задать формат строки:
a = 2 but b = 3
Функция hash() возвращает хэш-значение объекта:
644245917
Функция hex() преобразовывает число в шестнадцатеричное число:
"0xe"
Функция input() читает ввод и возвращает строку:
Enter a number7
"7"
Функция len() возвращает число, показывающее длину строки:
6
Функция locals() возвращает словарь с локальной таблицей имен:
{"__name__": "__main__", "__doc__": None, "__package__": None, "__loader__": <class "_frozen_importlib.BuiltinImporter">, "__spec__": None, "__annotations__": {}, "__builtins__": <module "builtins" (built-in)>, "a": 2, "b": 3}
Функция open() открывает файл:
В27. Какой выход у следующего кода:
>>> word = "abcdefghij"
>>> word[:3] + word[3:]
Выход: "abcdefghij".
В28. Как конвертировать список в строку?
Для этого подойдет метод join():
>>> s=" ".join(nums)
>>> s
"one two three four five six seven"
В29. Как убрать из списка дубликат элемента?
Для этого можно конвертировать список во множество (set):
>>> set(list)
{1, 2, 3, 4}
В30. Можете объяснить жизненный цикл треда?
Общими словами, цикл выглядит так:
- сначала создается класс, который подменяет метод исполнения класса в треде, и создаем экземпляр (instance) для этого класса;
- вызываем start(), который готовит тред к исполнению;
- переводим тред в состояние исполнения;
- можно вызвать разные методы, например sleep() и join(), которые переводят тред в режим ожидания;
- когда режим ожидания или исполнения прекращается, другие ожидающие треды подготавливаются к исполнению;
- после завершения исполнения тред останавливается.
Вопросы для собеседования / интервью о базовых аспектах программирования на питоне с ответами
В31. Что такое словарь (dictionary)?
Словарь содержит пары типа "ключ: значение":
>>> type(roots)
<class "dict">
>>> roots[9]
3
Словарь относится к изменяемым (mutable) объектам. Его можно создать помощью:
- литерала (символов {})
- функции dict()
- генератора (comprehension)
В32. Расскажите про арифметические операторы //, %, и **.
Оператор // выполняет целочисленное деление и возвращает целую часть числа, полученного в результате операции:
3
Оператор ** возводит в степень:
1024
Оператор % возвращает результат деления по модулю, то есть остаток после деления:
6
В33. Что вам известно про операторы сравнения в питоне?
Данные операторы сравнивают значения между собой.
Оператор "меньше" (<): если значение с левой стороны от оператора меньше, он возвращает True:
False
Оператор "больше" (>): если значение с левой стороны от оператора больше, он возвращает True:
True
Оператор "меньше или равно" (<=): если значение с левой стороны от оператора меньше значения с правой стороны или равно ему, он возвращает True:
True
Оператор "больше или равно" (>=): если значение с левой стороны от оператора больше значения с правой стороны или равно ему, он возвращает True:
True
Оператор равенства (==): если значения равны, он возвращает True:
True
Оператор неравенства (!=): если значения не равны, он возвращает True:
True
В34. Что такое операторы присвоения в питоне?
Все арифметические операторы можно комбинировать с символом присвоения.
>>> a = 7
>>> a += 1
>>> a
8
>>> a -= 1
>>> a
7
>>> a *= 2
>>> a
14
>>> a /= 2
>>> a
7.0
>>> a **= 2
>>> a
49.0
>>> a // =3
>>> a
16.0
>>> a %= 4
>>> a
0.0
В35. Расскажите про логические операторы в питоне.
Всего их три: and, or, not.
>>> False and True
False
>>> 7 < 7 or True
True
>>> not 2 == 2
False
В36. Что такое оператор принадлежности?
Это операторы in и not in. Они показывают, является ли одно значение частью другого.
>>> "me" in "disappointment"
True
>>> "us" not in "disappointment"
True
В37. Расскажите про операторы тождественности.
Операторы is и is not показывают, являются ли два значения идентичными.
>>> 10 is "10"
False
>>> True is not False
True
В38. Что такое битовые операторы?
Данные операторы выполняют операции в битовом формате.
>>> 0b110 & 0b010
2
>>> 3 | 2
3
>>> 3 ^ 2
1
>>> ~2
-3
>>> 1<<2
4
>>> 4>>2
1
В39. Какие типы данных поддерживаются в питоне?
В питоне используется пять типов данных:
- числа, которые содержат числовые значения;
- строки, который представляют собой последовательность символов; обозначаются одинарными или двойными кавычками.
- списки, который представляют собой коллекцию значений; обозначаются квадратными скобками.
- кортежи, которые похожи на списки, но отличаются тем, что не могут быть изменены.
- словари, которые содержат пары "ключ: значение"; обозначаются фигурными скобками.
В40. Что такое строка документации (docstring)?
Она вносится первой строкой в блок, определяющий содержание функции, класса или метода. Содержит описание их цели и способа исполнения. Обозначается тремя одинарными или двойными кавычками с каждой стороны.
>>> def sayhi():
"""
The function prints Hi
"""
print("Hi")
>>> sayhi()
Hi
Посмотреть ее содержание мы можем с помощью __doc__:
"\n\tThis function prints Hi\n\t"
В отличие от комментария строка документации читается во время исполнения.
В41. Как можно конвертировать строку в число?
Если строка содержит только числовые символы, можно использовать функцию int():
227
В42. Как можно принять результат ввода на клавиатуре?
Если пользователь что-то вводит с помощью клавиатуры, можно использовать функцию input(). В качестве аргумента можно задать данной функции текст запроса на ввод. Результат ввода всегда является строкой.
>>> a = input("Enter a number")
Enter a number7
В43. Что такое функция?
Когда мы хотим исполнить определенную последовательность (sequence of statements), мы можем дать ей имя. Например, определим функцию, которая принимает два числа и возвращает то, которое больше.
>>> def greater(a,b):
return a is a>b else b
>>> greater(3,3.5)
3.5
В44. Что такое рекурсия?
Это когда функция вызывает саму себя. При этом она должна иметь базовое условие, чтобы не создать бесконечный цикл:
if n == 1: return 1
return n * facto(n - 1)
>>> facto(4)
24
В45. Что делает функция zip()?
Возвращает итератор с кортежами:
[("a", 1), ("b", 2), ("c", 3)]
В данном случае она совмещает элементы двух списков и создает из них кортежи. Работает не только со списками.
В46. Как посчитать длину строки (string)?
Для этого вызываем функцию len():
13
В47. Расскажите про генераторы списков (list comprehension).
Они позволяют создавать списки с помощью одной строки кода:
[1, 3, 5, 7, 9]
В48. Как можно получить все значения из словаря?
Для этого используется метод values()
True
В49. Как можно переключить регистр строки?
Можно использовать метод swapcase(), предусмотренный для класса str:
"aYUsHI"
В50. Возьмем строку "I love Python". Напишите код, который выведет символы до буквы "t".
>>> s = "I love Python"
>>> i = 0
>>> while s[i] != "t":
print(s[i], end="")
i += 1
>>> I love Py
В51. Возьмем строку "I love Python". Напишите код, который выведет эту строку без пробелов.
>>> s = "I love Python"
>>> for i in s:
if i == ' ': continue
print(i, end='')
>>> IlovePython
В52. Возьмем строку "I love Python". Напишите код, который выведет эту строку пять раз подряд.
>>> s = "I love Python"
>>> for i in range(6):
print(s)
>>> I love Python
>>> I love Python
>>> I love Python
>>> I love Python
>>> I love Python
В53. Для чего используется bytes()?
Это встроенная функция питона, которая возвращает неизменяемый байтовый объект.
>>> bytes([2,4,8])
b’\x02\x04\x08′
>>> bytes(5)
b’\x00\x00\x00\x00\x00′
>>> bytes('world','utf-8')
b’world’
В54. Что такое оператор контроля последовательности (control flow statement)?
Обычно программа в питоне начинает исполнение с первой строки. После нее программа однократно исполняет каждое предложение. Когда будет исполнено последнее предложение, программа прекращается. Также контроль последовательности помогает усложнить обычный порядок исполнения программы.
В55. Создайте новый лист с помощью конвертации списка числовых строк в список чисел.
>>> nums = [‘22’, ’68’, ’110’, ’89’, ’31’, ’12’]
Теперь возьмем функцию int() и создадим генератор списка, который конвертирует строки в числа и внесет их в список:
[22, 68, 110, 89, 31, 12]
В56. Как лучше всего хранить имена и фамилии наших работников?
Можно создать словарь, содержащий пары "ключ: значение":
Топ вопросов по Python с ответами
В57. Как работать с числами, которые не входят в десятичную систему счисления?
В питоне можно вводить бинарные, восьмеричные и шестнадцатеричные числа.
Бинарные. Это числа, составленные из 0 и 1. Для ввода в бинарном формате, используется префикс 0b или 0B:
10
Число можно преобразовать в бинарный формат с помощью функции bin():
‘0b1111’
Восьмеричные числа могут состоять из цифр от 0 до 7, также используется префикс 0o или 0O:
‘0o10’
Шестнадцатеричные числа могут состоять из цифр от 0 до 15, также используется префикс 0x или 0X:
‘0xf’
В58. Какой результат выводит данный код:
>>> def extendList(val, list=[]):
list.append(val)
return list
>>> list1 = extendList(10)
>>> list2 = extendList(123,[])
>>> list3 = extendList('a')
>>> list1, list2, list3
[10, ‘a’], [123], [10, ‘a’]
Возможный, но неверный ответ: ([10], [123], [‘a’])
В функции есть аргумент list=[], который не запускается в нулевом значении при каждом вызове этой функции. Когда мы первый раз определяем функцию, она создает новый список. Затем, каждый раз, когда мы вызываем данную функцию без аргумента-списка, она использует один и тот же список. Питон исполняет выражения, которые имеют нулевые значения, при определении функции, а не при вызове функции.
В59. Сколько аргументов может принять range()?
От одного до трех:
[0, 1, 2, 3, 4]
>>> list(range(-5))
[]
>>> list(range(2, 7))
[2, 3, 4, 5, 6]
>>> list(range(-3, 4))
[-3, -2, -1, 0, 1, 2, 3]
>>> list(range(2, 9, 2))
[2, 4, 6, 8]
>>> list(range(9, 2, -1))
[9, 8, 7, 6, 5, 4, 3]
В60. Что такое РЕР8?
Это соглашение о программировании в питоне, которое содержит рекомендации для повышения читаемости кода.
В61. Чем Python отличается от Java?
Если сравнивать Python и Java:
- Java быстрее
- Python использует отступы, а Java нужны скобки
- в Python динамическая типизация, а в Java — статическая
- Python — простой и лаконичный, а Java — многословный язык
- Python — интерпретируемый язык
- Java не зависит от используемой платформы
- в Java есть интерфейс JDBC, который улучшает доступ к базам данных
В62. Как лучше всего поменять местами числовые значения объектов?
>>> a, b = b, a
Как выполняется этот код:
>>> a, b = b, a
>>> a, b
(3, 2)
В63. Как можно выполнить несколько операций присвоения в одном предложении?
Первый способ (несколько объектов с уникальными значениями):
Второй способ (несколько объектов с идентичными значениями):
В64. Как выйти из бесконечного цикла?
Можно нажать комбинацию клавиш Ctrl+C, которая прерывает исполнение.
Технические вопросы для собеседования / интервью по Python с ответами
В65. Как исполняется код в питоне?
Файлы питона сначала компилируются в байткод, который затем исполняется.
В66. Расскажите, какой в питоне механизм передачи параметров.
В питоне используется передача параметров по ссылке. Если изменить параметр внутри функции, то это отразится на выводе функции. Однако, если использовать в качестве параметров литералы (строки, числа, кортежа), то они передаются по значению (потому что они не изменяемые).
В67. Что такое with в питоне?
Данная инструкция обеспечивает исполнение кода очистки после исполнения программы. Например, можно использовать ее для открытия файла, совершить с ним какие-то действия и автоматически закрыть файл после завершения работы. Аналогичным образом можно открывать соединение с базой данных и автоматически его закрывать. Код очистки исполняется даже в случае, когда появляется исключение (exception).
>>> with open('data.txt') as data:
# исполняемый блок
В68. Чем файл .pyc отличается от .py?
Оба файла содержат байткод, но .pyc является компилированной версией файла питона. Его байткод не зависит от платформы, поэтому он исполняется на всех платформах, которые поддерживают формат .pyc.
В69. Что делает питон объектно-ориентированным?
Он следует парадигме объектно-ориентированного программирования, которая построена вокруг классов (classes) и их экземпляров (instances). Это позволяет реализовать следующие функции:
- сокрытие внутренней структуры данных
- абстракция
- наследование
- полиморфизм (способность выбирать правильный метод в зависимости от типа данных)
- ограничение доступа к данным
В70. Какие есть типы объектов в питоне?
В питоне поддерживаются изменяемые (mutable) и не изменяемые (immutable) типы объектов.
Не изменяемые не позволяют изменять свое содержание. Примеры: кортежи, булевы, строки, числа. Итерация по ним выполняется быстрее.
Изменяемые позволяют изменять свое содержание. Примеры: списки, множества и словари. Итерация по ним выполняется медленнее.