Python вопросы к экзамену

Вопросы для подготовки к экзамену

«Языки программирования» (Python)

Группы 503б, 503в, 503г.

  1. Встроенный тип str. Методы объекта str.
  2. print() и форматирование вывода.
  3. Работа с файловой системой средствами Python.
  4. Работа с файлами. Методы open(), close(), read(), write().
  5. Модуль re. Синтаксис регулярных выражений, метасимволы. Методы compile(), match(),search(),findall(),split(),sub(),subn(). Нумерованные и именованные группы в шаблонах поиска.
  6. Unicode строки, типы bytes и bytearray.
  7. Встроенные типы последовательностей list, tuple, range и их методы.
  8. Встроенный объект dict и его методы.
  9. Встроенные типы чисел — int, float, complex. Машинное представление чисел с плавающей точкой и целых. Преобразование типов при сравнении чисел.
  10. Рациональные числа. Модуль fractions.
  11. Двоичное представление чисел. Неассоциативность операций в арифметике с плавающей запятой. Целые числа с произвольной точностью.
  12. Множества. Встроенные типы set и frozenset.
  13. Инструкции и синтаксис. Составные конструкции и обработка исключений
  14. Инструкции if/else/elif, логические операторы и выражения сравнения
  15. Циклы while и for в Python
  16. Функции в Python. Основные понятия
  17. Области видимости и пространство имен в Python.
  18. Передача аргументов в функцию. Специальные режимы сопоставления аргументов.
  19. Парадигма объектно-ориентированного программирования. Поддержка в Python функционального программирования.
  20. Объекты. Динамическая типизация. Инкапсуляция.
  21. Генерация объекта class. Новое пространство имен. Объект экземпляр класса.
  22. Атрибуты класса. Атрибуты данных. Атрибуты-методы. Параметр self. Добавление атрибутов к классу во время исполнения программы.
  23. Специальные методы и атрибуты классов. Методы __init__() и ___del__() в Python. Декораторы функций и декораторы классов. Инструменты интроспекции в Python. Метаклассы.
  24. Абстрактные методы в Python. Классические классы и классы нового стиля.
  25. Наследование. Базовый и производный класс. Построение производного класса.
  26. Порождающие функции (функции-фабрики). Множественное наследование. Примеси (Mix-in)
  27. Агрегация. Контейнеры. Иерархия наследования.
  28. Полиморфизм. Подмена методов в производном классе. Доступ к методам базового класса.
  29. Обработка исключений. Инструкция try… exept… else… finaly. Объект Менеджер контекста и конструкция with…as. Классы встроенных исключений. Пользовательские исключения. Генерация заданного исключения с помощью Отладочные проверки assert и возбуждение исключения AssertionError.raise. Поиск ошибок программирования на стадиях разработки и тестирования.
  30. Генераторы Python. Специальный тип функций – generator function. Объект-итератор. Итерация и потоки данных. (Data Flow Programming). Объект-функтор. Анонимная генератор-функция.
  31. Асинхронный код. Event Loop. Сопрограммы. Событийно-ориентированное программирование без функций обратного вызова и кооперативная многозадачность, асинхронный ввод-вывод.
  32. Устойчивость объектов. Время жизни объектов. Их сохранение для следующего запуска программы и/или передачи на другой компьютер. Модуль pickle для хранения представлений объектов в виде байтовых последовательностей и их последующего восстановления (сериализация и десериализация). Модуль shelve – БД для объектов. Независимая от языка программирования сериализация и XML. Создание документов XML и обработка готовых документов средствами Python
  33. Работа в реальном времени с большими объемами XML данных (больше ОЗУ). Высокопроизводительная XML-библиотека lxml для Python, с поддержкой XPath, XSLT, метода iterparse (расширение ElementTree API), класса целевого анализатора. Обработка XML документа с ошибками. Парсер с параметром recovery.
  34. Модули и пакеты. Библиотеки сторонних разработчиков (Django, Flask, Pygame, PyQt, twisted).
  35. Модули и пакеты. Графический интерфейс.
  36. Взаимодействие Python с Интернетом. Структура и функционирование сети Интернет. Архитектура клиент-сервер. Пакетная передача данных
  37. Взаимодействие Python с Интернетом. Unicode и строки байтов. Разбор URL-адреса. Кодирование и декодирование строки запроса. Преобразование относительного URL-адреса в абсолютный
  38. Разбор HTML-эквивалентов. Обмен данными по протоколу HTTP с помощью модуля urllib.request. Обработка cookies.
  39. Обработка данных из форм. Определение кодировки.
  40. Взаимодействие Python с базой данных SQLite.
  41. Генерация HTML документа на запрос клиента.
  42. Сжатие и распаковка данных. Работа с датой и временем.

Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.

Отлично

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

Отлично

Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.

Отлично

Отличный сайт
Лично меня всё устраивает — и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.

Отлично

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

Хорошо

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

Отлично

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

Отлично

Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.

Отлично

Отзыв о системе «Студизба»
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.

Хорошо

Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.

Отлично

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

Отлично

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

Отлично

Snake and flowers 2 by pikaole

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

Команда Mail.ru Cloud Solutions перевела статью разработчика, который не раз попадал в такую ситуацию и на основе своего опыта составил список из 53 вопросов и ответов для подготовки к собеседованию. Большинство исследователей данных пишут много кода, поэтому такой список пригодится и дата-сайентистам, и инженерам. Он будет полезен и для соискателей, и для тех, кто проводит собеседования, и для тех, кто просто изучает Python.

Вопросы идут в случайном порядке. Поехали.

1. В чем разница между списком и кортежем?

Мне задавали этот вопрос буквально на каждом собеседовании по Python/data science. Выучите ответ как свои пять пальцев:

  1. Список можно изменить после создания.
  2. Кортеж нельзя изменить после создания.
  3. Список упорядочен. Он представляет собой упорядоченные последовательности объектов, как правило, одного и того же типа. Например, все имена пользователей упорядочены по дате создания: ["Seth", "Ema", "Eli"].
  4. У кортежа есть структура. В каждом индексе могут сосуществовать различные типы данных. Например, такая запись базы данных в памяти: (2, "Ema", "2020–04–16") # id, name, created_at.

2. Как выполняется интерполяция строк?

Без импорта класса Template есть три способа интерполяции строк:

name = 'Chris'

# 1. f strings
print(f'Hello {name}')

# 2. % operator
print('Hey %s %s' % (name, name))

# 3. format
print(
 "My name is {}".format((name))
)

3. В чем разница между is и ==?

Когда я был начинающим разработчиком, то не видел разницы… привет, баги. Так что для протокола: is проверяет идентичность, а == проверяет равенство.

Рассмотрим пример. Создайте несколько списков и назначьте им имена. Обратите внимание, что ниже b указывает на тот же объект, что и a:

a = [1,2,3]
b = a
c = [1,2,3]

Проверьте равенство и обратите внимание, что все объекты равны:

print(a == b)
print(a == c)
#=> True
#=> True

Но являются ли все они идентичными? Нет:

print(a is b)
print(a is c)
#=> True
#=> False

Можем проверить это, распечатав их идентификаторы объектов:

print(id(a))
print(id(b))
print(id(c))
#=> 4369567560
#=> 4369567560
#=> 4369567624

Идентификатор c отличается от идентификатора a и b.

4. Что такое декоратор?

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

Декоратор позволяет добавить новую функциональность к существующей функции. Это делается следующим образом. Функция передается декоратору, а он выполняет и существующий, и дополнительный код.

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

Напишите функцию декоратора. В качестве аргумента он принимает функцию func. Декоратор определяет функцию log_function_called, которая вызывает func() и выполняет некоторый код print(f'{func} called.'). Затем возвращает определенную им функцию:

def logging(func):
 def log_function_called():
   print(f'{func} called.')
   func()
 return log_function_called

Напишем другие функции, к которым добавим декоратор (потом, не сейчас):

def my_name():
  print('chris')
def friends_name():
  print('naruto')
my_name()
friends_name()
#=> chris
#=> naruto

Теперь добавим декоратор к ним обоим:

@logging
def my_name():
 print('chris')

@logging
def friends_name():
 print('naruto')

my_name()
friends_name()
#=> <function my_name at 0x10fca5a60> called.
#=> chris
#=> <function friends_name at 0x10fca5f28> called.
#=> naruto

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

5. Объясните функцию range

Range генерирует список целых чисел. Ее можно использовать тремя способами.

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

range(stop) — генерирует целые числа от 0 до целого числа stop:

[i for i in range(10)]
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range(start, stop) — генерирует целые числа от start до stop:

[i for i in range(2,10)]
#=> [2, 3, 4, 5, 6, 7, 8, 9]

range(start, stop, step) — генерирует целые числа от start до stop с интервалами step:

[i for i in range(2,10,2)]
#=> [2, 4, 6, 8]

Серж Боремчук предложил более подходящий способ:

list(range(2,10,2))
#=> [2, 4, 6, 8]

6. Определите класс car с двумя атрибутами: color и speed. Затем создайте экземпляр и верните speed

Вот как это сделать:

class Car :
    def __init__(self, color, speed):
        self.color = color
        self.speed = speed
car = Car('red','100mph')
car.speed
#=> '100mph'

7. В чем разница между методами экземпляра, класса и статическими методами в Python?

Методы экземпляра: принимают параметр self и относятся к определенному экземпляру класса.

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

Методы класса: принимают параметр cls, можно изменить сам класс.

Проиллюстрируем разницу на вымышленном классе CoffeeShop:

class CoffeeShop:
    specialty = 'espresso'

    def __init__(self, coffee_price):
        self.coffee_price = coffee_price
  
    # instance method
    def make_coffee(self):
        print(f'Making {self.specialty} for ${self.coffee_price}')
 
    # static method    
    @staticmethod
    def check_weather():
        print('Its sunny')

    # class method
    @classmethod
    def change_specialty(cls, specialty):
        cls.specialty = specialty
        print(f'Specialty changed to {specialty}')

У класса CoffeeShop есть атрибут specialty (фирменный напиток), установленный по умолчанию в значение 'espresso'. Каждый экземпляр CoffeeShop инициализируется с атрибутом coffee_price. У него также три метода: метод экземпляра, статический метод и метод класса.

Давайте инициализируем экземпляр с атрибутом coffee_price, равным 5. Затем вызовем метод экземпляра make_coffee:

coffee_shop = CoffeeShop('5')
coffee_shop.make_coffee()
#=> Making espresso for $5

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

coffee_shop.check_weather()
#=> Its sunny

Теперь используем метод класса для изменения фирменного напитка (specialty), а затем сделаем кофе (make_coffee):

coffee_shop.change_specialty('drip coffee')
#=> Specialty changed to drip coffee

coffee_shop.make_coffee()
#=> Making drip coffee for $5

Обратите внимание, что make_coffee раньше делал эспрессо, а теперь заваривает капельную кофеварку (drip coffee).

8. В чем разница между func и func()?

Вопрос должен проверить ваше понимание, что все функции в Python также являются объектами:

def func():
    print('Im a function')

func
#=> function __main__.func>
func()    
#=> Im a function

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

9. Объясните, как работает функция map

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

def add_three(x):
    return x + 3
li = [1,2,3]
list(map(add_three, li))
#=> [4, 5, 6]

Здесь к каждому элементу в списке мы добавляем число 3.

10. Объясните, как работает функция reduce

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

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

from functools import reduce
def add_three(x,y):
    return x + y
li = [1,2,3,5]
reduce(add_three, li)
#=> 11

Возвращается 11, что является суммой 1+2+3+5.

11. Объясните, как работает функция filter

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

Каждый элемент передается функции, которая включает его в последовательность, если по условию получает True, и отбрасывает в случае False:

def add_three(x):
    if x % 2 == 0:
        return True        
    else:
        return False

li = [1,2,3,4,5,6,7,8]

[i for i in filter(add_three, li)]
#=> [2, 4, 6, 8]

Обратите внимание, как удалены все элементы, которые не делятся на 2.

12. Переменные в Python передаются по ссылке или по значению?

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

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

name = 'object'

Давайте посмотрим, как это работает со строками. Создадим экземпляр имени и объекта, на который указывают другие имена. Затем удалим первое:

x = 'some text'
y = x
x is y #=> True

del x # удаляем имя 'a' , но не объект в памяти

z = y
y is z #=> True

Мы видим, что все имена указывают на один и тот же объект в памяти, который остался нетронутым после операции удаления имени del x.

Вот еще один интересный пример с функцией:

name = 'text'
def add_chars(str1):
    print( id(str1) ) #=> 4353702856
    print( id(name) ) #=> 4353702856
  
    # новое имя, тот же объект
    str2 = str1
  
    # создаем новое имя (не отличается от предыдущего) и новый объект
    str1 += 's' 
    print( id(str1) ) #=> 4387143328
    
    # объект не изменился
    print( id(str2) ) #=> 4353702856
     
add_chars(name)
print(name) #=>text

Обратите внимание, что добавление буквы s в строку внутри функции создает новое имя — и новый объект тоже. Даже если у нового объекта то же самое имя, что и у существующего.

13. Как развернуть список?

Обратите внимание, что reverse() вызывается в списке и изменяет его. Сама функция не возвращает измененный список:

li = ['a','b','c']

print(li)
li.reverse()
print(li)
#=> ['a', 'b', 'c']
#=> ['c', 'b', 'a']

14. Как работает умножение строк?

Посмотрим результат умножения строки 'cat' на 3:

'cat' * 3
#=> 'catcatcat'

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

15. Как работает умножение списка?

Посмотрим на результат умножения списка [1,2,3] на 2:

[1,2,3] * 2
#=> [1, 2, 3, 1, 2, 3]

Содержание списка [1,2,3] повторяется дважды.

16. Что означает self в классе?

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

Ниже передача self в __init__() дает возможность установить цвет экземпляра при инициализации:

class Shirt:
    def __init__(self, color):
        self.color = color
    
s = Shirt('yellow')
s.color
#=> 'yellow'

17. Как объединить списки в Python?

Списки объединяются при сложении. Обратите внимание, что с массивами так не получается:

a = [1,2]
b = [3,4,5]

a + b
#=> [1, 2, 3, 4, 5]

18. В чем разница между глубокой и мелкой копиями?

Обсудим это в контексте изменяемого объекта — списка. Для неизменяемых объектов глубокое и мелкое (поверхностное) копирование обычно не отличаются.

Рассмотрим три сценария.

I) Поставьте ссылку на исходный объект. Она отсылает новое имя li2 к тому же месту в памяти, на которое указывает li1. Поэтому любое изменение в li1 также происходит с li2:

li1 = [['a'],['b'],['c']]
li2 = li1

li1.append(['d'])
print(li2)
#=> [['a'], ['b'], ['c'], ['d']]

II) Создайте мелкую копию оригинала. Ее можно создать с помощью конструктора list() или mylist.copy().

Мелкая копия создает новый объект, но заполняет его ссылками на оригинал. Таким образом, добавление нового объекта в исходный список li3 не отразится в li4, а вот изменение объектов в li3 — отразится:

li3 = [['a'],['b'],['c']]
li4 = list(li3)

li3.append([4])
print(li4)
#=> [['a'], ['b'], ['c']]

li3[0][0] = ['X']
print(li4)
#=> [[['X']], ['b'], ['c']]

III) Создайте глубокую копию. Это делается с помощью copy.deepcopy(). Оригинал и копия полностью независимы, а изменения в одном не оказывают никакого влияния на другой:

import copy

li5 = [['a'],['b'],['c']]
li6 = copy.deepcopy(li5)

li5.append([4])
li5[0][0] = ['X']
print(li6)
#=> [['a'], ['b'], ['c']]

19. В чем разница между списками и массивами?

Примечание: в стандартной библиотеке Python есть объект array, но здесь мы специально обсуждаем массив из популярной библиотеки Numpy.

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

Арифметические действия в списках добавляют или удаляют элементы из списка. Арифметические действия на массивах соответствуют функциям линейной алгебры.

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

20. Как объединить два массива?

Помните, что массивы — это не списки. Это библиотека Numpy и здесь работает линейная алгебра.

Для объединения массивов нужно использовать соответствующую функцию Numpy:

import numpy as np

a = np.array([1,2,3])
b = np.array([4,5,6])

np.concatenate((a,b))
#=> array([1, 2, 3, 4, 5, 6])

21. Что вам нравится в Python?

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

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

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

22. Какая ваша любимая библиотека в Python?

Примечание: это тоже субъективно, см. вопрос 21.

При работе с большим количеством данных трудно найти что-то полезнее, чем pandas. С этой библиотекой обработка и визуализация данных становятся проще простого.

23. Назовите изменяемые и неизменяемые объекты

Неизменяемость означает, что состояние нельзя изменить после создания. Примеры: int, float, bool, string и tuple.

Состояние изменяемых объектов можно изменить. Примеры: list, dict и set.

24. Как округлить число до трех десятичных знаков?

Используйте функцию round(value, decimal_places):

a = 5.12345
round(a,3)
#=> 5.123

25. Как разбить список?

Синтаксис функции включает три аргумента: list[start:stop:step], где step — это интервал, через который возвращаются элементы:

a = [0,1,2,3,4,5,6,7,8,9]

print(a[:2])
#=> [0, 1]

print(a[8:])
#=> [8, 9]

print(a[2:8])
#=> [2, 3, 4, 5, 6, 7]

print(a[2:8:2])
#=> [2, 4, 6]

26. Что такое pickle?

Pickle — это модуль сериализации и десериализации объектов в Python.

В примере ниже мы сериализуем и десериализуем список словарей:

import pickle

obj = [
    {'id':1, 'name':'Stuffy'},
    {'id':2, 'name': 'Fluffy'}
]

with open('file.p', 'wb') as f:
    pickle.dump(obj, f)

with open('file.p', 'rb') as f:
    loaded_obj = pickle.load(f)

print(loaded_obj)
#=> [{'id': 1, 'name': 'Stuffy'}, {'id': 2, 'name': 'Fluffy'}]

27. Какая разница между словарями и JSON?

Dict (словарь) — это тип данных Python, представляющий собой набор индексированных, но неупорядоченных пар ключ-значение.

JSON — просто строка, которая следует заданному формату и предназначена для передачи данных.

28. Какие ORM вы использовали в Python?

Технология ORM (object-relational mapping, объектно-реляционное отображение) связывает модели данных (обычно в приложении) с таблицами БД и упрощает транзакции с базой данных.

В контексте Flask обычно используется SQLAlchemy, а у Django собственная ORM.

29. Как работают any() и all()?

Any возвращает true, если хоть один элемент в последовательности соответствует условию, то есть является true.

All возвращает true только в том случае, если условию соответствуют все элементы в последовательности.

a = [False, False, False]
b = [True, False, False]
c = [True, True, True]

print( any(a) )
print( any(b) )
print( any(c) )
#=> False
#=> True
#=> True

print( all(a) )
print( all(b) )
print( all(c) )
#=> False
#=> False
#=> True

30. Где быстрее поиск: в словарях или списках?

Поиск значения в списке занимает O(n) времени, потому что нужно пройти весь список.

Поиск ключа в словаре занимает O(1) времени, потому что это хэш-таблица.

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

31. В чем разница между модулем и пакетом?

Модуль — это файл или набор файлов, которые импортируются вместе:

import sklearn

Пакет — это каталог с модулями:

from sklearn import cross_validation

Таким образом, пакеты — это модули, но не все модули являются пакетами.

32. Как увеличить и уменьшить целое число в Python?

Инкремент и декремент можно сделать с помощью += и -=:

value = 5

value += 1
print(value)
#=> 6

value -= 1
value -= 1
print(value)
#=> 4

33. Как вернуть двоичный код целого числа?

Используйте функцию bin():

bin(5)
#=> '0b101'

34. Как удалить из списка дубликаты?

Это можно сделать путем преобразования списка в набор, а затем обратно в список:

a = [1,1,1,2,3]
a = list(set(a))
print(a)
#=> [1, 2, 3]

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

35. Как проверить, существует ли значение в списке?

Используйте in:

'a' in ['a','b','c']
#=> True

'a' in [1,2,3]
#=> False

36. В чем разница между append и extend?

append добавляет значения в список, а extend добавляет в список значения из другого списка:

a = [1,2,3]
b = [1,2,3]

a.append(6)
print(a)
#=> [1, 2, 3, 6]

b.extend([4,5])
print(b)
#=> [1, 2, 3, 4, 5]

37. Как получить абсолютное значение целого числа?

Это можно сделать с помощью функции abs():

abs(2)
#=> 2

abs(-2)
#=> 2

38. Как объединить два списка в список кортежей?

Для объединения в список кортежей можно использовать функцию zip, причем не только двух, но трех и более списков.

a = ['a','b','c']
b = [1,2,3]

[(k,v) for k,v in zip(a,b)]
#=> [('a', 1), ('b', 2), ('c', 3)]

39. Как отсортировать словарь по ключам, в алфавитном порядке?

Нельзя «отсортировать» словарь, поскольку словари не поддерживают упорядочение, но можно вернуть отсортированный список кортежей с ключами и значениями из словаря:

d = {'c':3, 'd':4, 'b':2, 'a':1}

sorted(d.items())
#=> [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

40. Как реализуется наследование классов в Python?

В приведенном ниже примере класс Audi является наследником Car. И вместе с этим наследуются методы экземпляра родительского класса:

class Car():
    def drive(self):
        print('vroom')
class Audi(Car):
    pass
audi = Audi()
audi.drive()

41. Как удалить все пробелы из строки?

Можно разделить строку в местах пробелов, а затем снова соединить без пробелов:

s = 'A string with white space'

''.join(s.split())
#=> 'Astringwithwhitespace'

Двое читателей рекомендовали более каноничный способ замены, который следует духу Python, что «явное лучше, чем неявное». Он также быстрее работает, потому что здесь не создается новый объект списка:

s = 'A string with white space'
s.replace(' ', '')
#=> 'Astringwithwhitespace'

42. Почему мы используем enumerate() при итерации последовательности?

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

li = ['a','b','c','d','e']

for idx,val in enumerate(li):
print(idx, val)
#=> 0 a
#=> 1 b
#=> 2 c
#=> 3 d
#=> 4 e

43. В чем разница между pass, continue и break?

Заглушка pass означает «ничего не делать». Обычно мы используем эту функцию, потому что Python не позволяет создавать класс, функцию или оператор if без кода внутри.

В приведенном ниже примере вылетит ошибка, если внутри i > 3 не будет кода, поэтому мы используем pass:

a = [1,2,3,4,5]
for i in a:
    if i > 3:
        pass
    print(i)
#=> 1
#=> 2
#=> 3
#=> 4
#=> 5

continue отправляет вас к следующему элементу в цикле, останавливая выполнение для текущего элемента. Таким образом, print(i) никогда не получает значения i < 3:

for i in a:
    if i < 3:
        continue
    print(i)
#=> 3
#=> 4
#=> 5

break прерывает цикл, и последовательность больше не повторяется. Таким образом, на цифре 3 цикл прерывается, а этот и следующие элементы не печатаются:

for i in a:
   if i == 3:
       break
   print(i)   
#=> 1
#=> 2

44. Преобразуйте следующий цикл for в генератор списков (list comprehension)

Дан следующий цикл for:

a = [1,2,3,4,5]

a2 = []
for i in a:
     a2.append(i + 1)
print(a2)
#=> [2, 3, 4, 5, 6]

Результат:

a3 = [i+1 for i in a]

print(a3)
#=> [2, 3, 4, 5, 6]

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

45. Приведите пример тернарного оператора

Тернарный (условный) оператор — это однострочный оператор if/else.

Синтаксис такой: a if condition else b.

x = 5
y = 10

'greater' if x > 6 else 'less'
#=> 'less'

'greater' if y > 6 else 'less'
#=> 'greater'

46. Проверьте, что в строке только числа

Можно использовать isnumeric():

'123a'.isnumeric()
#=> False

'123'.isnumeric()
#=> True

47. Проверьте, что в строке только буквы

Можно использовать isalpha():

'123a'.isalpha()
#=> False

'a'.isalpha()
#=> True

48. Проверьте, что в строке только буквы и цифры

Здесь можно использовать isalnum():

'123abc...'.isalnum()
#=> False

'123abc'.isalnum()
#=> True

49. Получите список ключей из словаря

Это можно сделать через передачу словаря в конструктор list():

d = {'id':7, 'name':'Shiba', 'color':'brown', 'speed':'very slow'}

list(d)
#=> ['id', 'name', 'color', 'speed']

50. Как перевести строку в верхний/нижний регистр?

Можно использовать строковые методы upper() и lower():

small_word = 'potatocake'
big_word = 'FISHCAKE'

small_word.upper()
#=> 'POTATOCAKE'

big_word.lower()
#=> 'fishcake'

51. В чем разница между remove, del и pop?

remove() удаляет первое совпадающее значение:

li = ['a','b','c','d']

li.remove('b')
li
#=> ['a', 'c', 'd']

del удаляет элемент по его индексу:

li = ['a','b','c','d']

del li[0]
li
#=> ['b', 'c', 'd']

pop() удаляет элемент по индексу и возвращает этот элемент:

li = ['a','b','c','d']

li.pop(2)
#=> 'c'

li
#=> ['a', 'b', 'd']

52. Приведите пример генератора словарей (dict comprehension)

Ниже мы создадим словарь с буквами алфавита в качестве ключей и индексами в качестве значений:

# создаем список букв
import string
list(string.ascii_lowercase)
alphabet = list(string.ascii_lowercase)

# генерация словаря
d = {val:idx for idx,val in enumerate(alphabet)}

d
#=> {'a': 0,
#=> 'b': 1,
#=> 'c': 2,
#=> ...
#=> 'x': 23,
#=> 'y': 24,
#=> 'z': 25}

53. Как выполняется обработка исключений в Python?

Для обработки исключений Python предоставляет конструкцию из трех слов: try, except и finally.

Синтаксис выглядит примерно так:

try:
    # попробовать сделать это
except:
    # если блок try не сработал, попробовать это
finally:
    # всегда делать это

Ниже упрощенный пример такой конструкции. Здесь блок try терпит неудачу, поскольку мы не можем складывать целые числа со строками. Блок except устанавливает val = 10, а затем блок finally выводит complete:

try:
    val = 1 + 'A'
except:
    val = 10
finally:
    print('complete')
 
print(val)
#=> complete
#=> 10

Конечно, невозможно на 100% угадать, какие вопросы зададут на собеседовании. Лучший способ подготовиться — программировать и еще раз программировать, накапливая опыт.

Однако приведенный список точно поможет тем, кто готовится к собеседованию на позицию дата-сайентиста или junior/middle-разработчика Python.

Что еще почитать по теме:

  1. Анализ больших данных в облаке: как компании стать дата-ориентированной.
  2. Форматы файлов в больших данных.
  3. Наш телеграм-канал о цифровой трансформации.

1.    
Переменные.
Типы данных в Python.

2.    
Структура
программы.
 Команда
присваивания в 
Python.

3.    
Ввод-вывод
данных. Формат выводимых данных в 
Python.

4.    Стандартные функции , случайные числа. Алгоритм
линейной структуры в 
Python.

5.    
Структура IF,
классификация в 
Python. Примеры.

6.    
Алгоритмы
циклической итерационной структуры. Оператор цикла While в 
Python. Примеры использования использования.

7.    
Алгоритмы
циклической итерационной структуры. Оператор цикла обхода For в 
Python. Примеры использования. Оператор break
и continue в Python. Примеры использования.

8.    
Списки
– изменяемые последовательности в 
Python  и их методы Примеры использования списков для работы
с линейными массивами.

9.    
Списки
– изменяемые последовательности в 
Python  и их методы Примеры использования списков для работы
с матрицами.

10.                      
Встроенные типы последовательностей.

11.                      
Понятие подпрограммы в Python.
Описание подпрограммы.
Формальные
и фактические параметры в 
Python. Функции в Python. Основные понятия. Области
видимости и пространство имен в Python.  Передача
аргументов в функцию.
Функции в Python.Использование функции лямбда.

12.                      
Рекурсивные функции.

13.                      
Строки
как последовательности символов в 
Python. Примеры

14.                      
Множества. Встроенные типы set и frozenset.

15.                      
Словари
в Python. Примеры использования.

16.                      
Работа с файловой системой средствами Python.Работа с файлами. Методы open(),
close(), read(), write().

Вопросы и ответы Python были разработаны с особым намерением помочь студентам и специалистам в подготовке к различным сертификационным экзаменам и собеседованиям . В этом разделе представлена ​​полезная коллекция примеров вопросов для интервью и вопросов с множественным выбором (MCQ) и их ответов с соответствующими пояснениями.

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

В этом разделе представлена ​​большая коллекция вопросов с множественным выбором Python (MCQ) на одной странице, а также их правильные ответы и объяснения. Если вы выберете правильный вариант, он станет зеленым; еще красный.

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

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

Часть вторая: 150 вопросов для собеседования на вакансию Python. Часть 2 (с опытом работы)

В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)?

Возьмем для примера список:

>>> mylist = [0, 1, 2, 3, 4, 5 ,6, 7, 8]

В отличие от положительного индекса отрицательный начинает поиск с конца:

>>> mylist[-3]
6

Еще это помогает при создании срезов с конца:

>>> mylist[-6:-1]
[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».lower()
«ayushi»

Для преобразования в верхний регистр (uppercase) используется метод upper():

>>> «AyuShi».upper()
«AYUSHI»

Еще есть методы isupper() (все символы в верхнем регистре) и islower() (все символы в нижнем регистре), которые проверяют регистр всех символов имени.

>>> «AyuShi».isupper()
False

>>> «AYUSHI».isupper()
True

>>> «ayushi».islower()
True

>>> «@yu$hi».islower()
True

>>> «@YU$HI».isupper()
True

Как видим, символы наподобие @ и $ применимы в обоих случаях.

Еще есть метод istitle(), который проверяет строку на стиль заголовка (все слова должны начинаться с символа в верхнем регистре):

>>> «The Corpse Bride».istitle()
True

В8. Для чего нужен pass (pass statement) в питоне?

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

>>> def func(*args):
pass

Кроме него есть break (break statement), которое разрывает цикл:

>>> for i in range(7):
if i == 3: break
print(i)
0
1
2

Наконец, есть continue (continue statement), которое перешагивает на следующую итерацию:

>>>for i in range(7):
if i==3: continue
print(i)
0
1
2
4
5
6

Часто задаваемые вопросы на собеседовании по Python с ответами (без опыта работы)

В9. Расскажите про функции help() и dir() в питоне.

Функция help() показывает строку документации и справку для ее аргумента:

>>> import copy
>>> 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() возвращает список, содержащий пространство имен в объекте:

>>> dir(copy.copy)
[«__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={«a»:1,»b»:2,»c»:3,»e»:5}
>>> 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».capitalize()
«Ayushi»

В15. Все знают, что сегодня питон в моде. Но истинное принятие новой технологии подразумевает понимание ее недостатков. Что вы можете сказать по этому поводу?

Какие в питоне есть ограничения:
— интерпретируемая природа питона снижает скорость исполнения программы
— его не выгодно использовать для мобильных устройств и браузеров
— будучи языком с динамической типизацией данных, он использует утиную типизацию; в связи с этим появляются ошибки исполнения (runtime errors);
— в нем слабо развиты возможности доступа к базам данных; поэтому питон не идеальный вариант для приложений с очень большими базами данных;
— низкие требования на входе, то есть свои силы в питоне может попробовать каждый; это иногда снижает качество кода;
— у питона индивидуально выраженный стиль.

В16. Как в питоне узнать, в какой мы сейчас директории?

Для этого используется функция getcwd(). Она импортируется из модуля os:

>>> import os
>>> os.getcwd()
«C:\Users\lifei\AppData\Local\Programs\Python\Python36-32»

В17. Как вставить объект, чтобы он оказался под определенным индексом?

Сначала создадим список:

>>> a=[1, 2, 4]

Затем используем метод insert(). В нем первым аргументом будет индекс, под которым вставляется объект, а вторым — значение объекта:

>>> a.insert(2,3)
>>> a
[1, 2, 3, 4]

В18. Как можно обратить (reverse) порядок элементов в списке?

Для этого есть метод reverse():

>>> a.reverse()
>>> a
[4, 3, 2, 1]

В19. Что такое приглашение интерпретатора (interpreter prompt)?

Когда мы заходим в интерпретатор питона, то видим следующую строку:

>>>

В20. Что нужно сделать, чтобы функция возвратила значение?

Для этого используется ключевое слово return:

>>> def add(a, b):
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():

>>> max(«flyiNg»)
«y»

С помощью той же логики можно объяснить следующую строку кода:

>>> max(«fly{}iNg»)
«}»

В25. В каких областях питон имеет преимущество?

Лучше всего питон использовать в следующих областях:
— веб-приложения
— графические интерфейсы пользователя для настольных ПК
— научные и арифметические приложения
— разработка ПО
— разработка программ обучения
— приложения для бизнеса
— сетевые приложения
— игры, 3D-графика

В26. Можете назвать десять встроенных функций питона?

Функция complex() создает комплексное число:

>>> complex(3.5,4)
(3.5+4j)

Функция eval() исполняет строку:

>>> eval(«print(max(22,22.0) — min(2,3))»)
20

Функция filter() отфильтровывает элементы, для которых заданное условие верно.

>>> list(filter(lambda x: x%2 == 0,[1, 2, 0, False]))
[2, 0, False]

Функция format() помогает задать формат строки:

>>> print(«a = {0} but b = {1}».format(a, b))
a = 2 but b = 3

Функция hash() возвращает хэш-значение объекта:

>>> hash(3.7)
644245917

Функция hex() преобразовывает число в шестнадцатеричное число:

>>> hex(14)
«0xe»

Функция input() читает ввод и возвращает строку:

>>> input(«Enter a number»)
Enter a number7
«7»

Функция len() возвращает число, показывающее длину строки:

>>> len(«Ayushi»)
6

Функция locals() возвращает словарь с локальной таблицей имен:

>>> 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() открывает файл:

>>> file = open(«tabs.txt»)

В27. Какой выход у следующего кода:

>>> word = «abcdefghij»
>>> word[:3] + word[3:]

Выход: «abcdefghij».

В28. Как конвертировать список в строку?

Для этого подойдет метод join():

>>> nums=[«one»,»two»,»three»,»four»,»five»,»six»,»seven»]
>>> s=» «.join(nums)
>>> s
«one two three four five six seven»

В29. Как убрать из списка дубликат элемента?

Для этого можно конвертировать список во множество (set):

>>> list = [1, 2, 1, 3, 4, 2]
>>> set(list)
{1, 2, 3, 4}

В30. Можете объяснить жизненный цикл треда?

Общими словами, цикл выглядит так:
— сначала создается класс, который подменяет метод исполнения класса в треде, и создаем экземпляр (instance) для этого класса;
— вызываем start(), который готовит тред к исполнению;
— переводим тред в состояние исполнения;
— можно вызвать разные методы, например sleep() и join(), которые переводят тред в режим ожидания;
— когда режим ожидания или исполнения прекращается, другие ожидающие треды подготавливаются к исполнению;
— после завершения исполнения тред останавливается.

Вопросы для собеседования / интервью о базовых аспектах программирования на питоне с ответами

В31. Что такое словарь (dictionary)?

Словарь содержит пары типа «ключ: значение»:

>>> roots={25: 5, 16: 4, 9: 3, 4: 2, 1: 1}
>>> type(roots)
<class «dict»>

>>> roots[9]
3

Словарь относится к изменяемым (mutable) объектам. Его можно создать помощью:
— литерала (символов {})
— функции dict()
— генератора (comprehension)

В32. Расскажите про арифметические операторы //, %, и **.

Оператор // выполняет целочисленное деление и возвращает целую часть числа, полученного в результате операции:

>>> 7 // 2
3

Оператор ** возводит в степень:

>>> 2**10
1024

Оператор % возвращает результат деления по модулю, то есть остаток после деления:

>>> 13%7
6

В33. Что вам известно про операторы сравнения в питоне?

Данные операторы сравнивают значения между собой.

Оператор «меньше» (<): если значение с левой стороны от оператора меньше, он возвращает True:

>>> «hi»<«Hi»
False

Оператор «больше» (>): если значение с левой стороны от оператора больше, он возвращает True:

>>> 1.1+2.2>3.3
True

Оператор «меньше или равно» (<=): если значение с левой стороны от оператора меньше значения с правой стороны или равно ему, он возвращает True:

>>> 3.0 <= 3
True

Оператор «больше или равно» (>=): если значение с левой стороны от оператора больше значения с правой стороны или равно ему, он возвращает True:

>>> True >= False
True

Оператор равенства (==): если значения равны, он возвращает True:

>>> {1,3,2,2} == {1,2,3}
True

Оператор неравенства (!=): если значения не равны, он возвращает True:

>>> False != 0.1
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__:

>>> sayhi.__doc__
«ntThis function prints Hint»

В отличие от комментария строка документации читается во время исполнения.

В41. Как можно конвертировать строку в число?

Если строка содержит только числовые символы, можно использовать функцию int():

>>> int(«227»)
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. Что такое рекурсия?

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

>>> def facto(n):
if n == 1: return 1
return n * facto(n — 1)
>>> facto(4)
24

В45. Что делает функция zip()?

Возвращает итератор с кортежами:

>>> list(zip([«a», «b», «c»],[1, 2, 3]))
[(«a», 1), («b», 2), («c», 3)]

В данном случае она совмещает элементы двух списков и создает из них кортежи. Работает не только со списками.

В46. Как посчитать длину строки (string)?

Для этого вызываем функцию len():

>>> len(«Ayushi Sharma»)
13

В47. Расскажите про генераторы списков (list comprehension).

Они позволяют создавать списки с помощью одной строки кода:

>>> [i for i in range(1, 11, 2)]
[1, 3, 5, 7, 9]

В48. Как можно получить все значения из словаря?

Для этого используется метод values()

>>> 4 in {«a»:1,»b»:2,»c»:3,»d»:4}.values()
True

В49. Как можно переключить регистр строки?

Можно использовать метод swapcase(), предусмотренный для класса str:

>>> «AyuShi».swapcase()
«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’x02x04x08′

>>> bytes(5)
b’x00x00x00x00x00′

>>> bytes(‘world’,’utf-8′)
b’world’

В54. Что такое оператор контроля последовательности (control flow statement)?

Обычно программа в питоне начинает исполнение с первой строки. После нее программа однократно исполняет каждое предложение. Когда будет исполнено последнее предложение, программа прекращается. Также контроль последовательности помогает усложнить обычный порядок исполнения программы.

В55. Создайте новый лист с помощью конвертации списка числовых строк в список чисел.

>>> nums = [‘22’, ’68’, ’110’, ’89’, ’31’, ’12’]

Теперь возьмем функцию int() и создадим генератор списка, который конвертирует строки в числа и внесет их в список:

>>> [int(i) for i in nums]
[22, 68, 110, 89, 31, 12]

В56. Как лучше всего хранить имена и фамилии наших работников?

Можно создать словарь, содержащий пары «ключ: значение»:

{«имя»: «Ayushi», «фамилия»: «Sharma»}

Топ вопросов по Python с ответами

В57. Как работать с числами, которые не входят в десятичную систему счисления?

В питоне можно вводить бинарные, восьмеричные и шестнадцатеричные числа.

Бинарные. Это числа, составленные из 0 и 1. Для ввода в бинарном формате, используется префикс 0b или 0B:

>>> int(0b1010)
10

Число можно преобразовать в бинарный формат с помощью функции bin():

>>> bin(0xf)
‘0b1111’

Восьмеричные числа могут состоять из цифр от 0 до 7, также используется префикс 0o или 0O:

>>> oct(8)
‘0o10’

Шестнадцатеричные числа могут состоять из цифр от 0 до 15, также используется префикс 0x или 0X:

>>> hex(15)
‘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()?

От одного до трех:

>>> list(range(5))
[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 = 2, 3
>>> a, b = b, a
>>> a, b
(3, 2)

В63. Как можно выполнить несколько операций присвоения в одном предложении?

Первый способ (несколько объектов с уникальными значениями):

>>> a, b, c = 3, 4, 5

Второй способ (несколько объектов с идентичными значениями):

>>> a = b = c = 3

В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) типы объектов.

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

Изменяемые позволяют изменять свое содержание. Примеры: списки, множества и словари. Итерация по ним выполняется медленнее.

Понравилась статья? Поделить с друзьями:
  • Victory day in russia сочинение на английском
  • Pigeon fanciers егэ ответы
  • Up graduate подготовка к егэ
  • Pddrussia com онлайн экзамен
  • Unique nature of kamchatka егэ ответы