Pull to refresh
149.36
AvitoTech
У нас живут ваши объявления

Разминка для тех, кто умеет в Python

Reading time 3 min
Views 20K

Привет! Мы обожаем квизы, посвященные языкам программирования. В нашем блоге мы разместили уже целых три: первый — по Python, PHP, Golang, DevOps, второй — полностью по Go, третий — только по PHP. Сегодняшний квиз посвящен исключительно Python.


Предлагаем вам размяться в честь конца ещё одной летней недели и в преддверии PyCon Russia 2018. (Кстати, кто едет? Мы там будем).


Под катом — семь вопросов, советы от друга, Чапаев, отрывки из ABBA (что? да!) и крутой мерч.


UPD: Мы закончили принимать ответы. Спасибо всем, кто поучаствовал! Ответы на вопросы — внутри текста, а победители и призеры под спойлером.


Победители и призеры викторины

Победитель


Vadem


Призеры


Второе место: acerikfy
Третье место: Histiophryne
Четвертое — десятое место: Swezy_ua, SlonPC, noth, IIRoadRunnerII, term1nal, alexchromets, Tihon_V .


Бонус


Так много участников дали правильные ответы, что мы решили разыграть случайным образом еще пять пар носков среди них. Крутые носки от Авито получают: sunman, grt_pretender, Vash, ipatov_dn, institoris


Запись розыгрыша




Призы


Призы распределим между десяткой лучших. Первому, кто правильно ответит на все вопросы Python-викторины, отправим продвинутый набор Авито-мерча: толстовку, носки и холиварные кости — можно будет погадать, на каком бэкенд-языке и фронтенд-фреймворке будет написан ваш новый проект. Второго участника, справившегося с заданиями, наградим холиварными костями, носками и футболкой. Третьему достанется тот же набор, но без футболки/толстовки. Среди оставшихся семи участников разыграем термобутылку с карабином, которую можно взять хоть в поход, хоть на хакатон.


image


Вопросы


*Во всех случаях речь про Python 3.


Вопрос 1


Какой результат будет в переменной t:


>>> t = (1, 2, [30,40])
>>> t[2] += [50, 60]

Варианты ответов:


  • вылетит TypeError, в t будет (1, 2, [30, 40, 50, 60]),
  • вылетит TypeError, в t будет (1, 2, [30, 40]),
  • (1, 2, [30, 40, 50, 60]),
  • (1, 2, [30, 40]).

Правильный ответ

вылетит TypeError, в t будет (1, 2, [30, 40, 50, 60])


Вопрос 2


Есть у тебя такая структура модулей:


foo_app/
    snatch/
        qwerty.py
bar_app/
    snatch/
        mamamia.py

Как бы так сделать, чтобы можно было в коде импортировать эти модули таким образом:


from snatch import qwerty, mamamia

Варианты ответов:


  • перед запуском скрипта выполнить export PYTHONPATH=foo_аpp:bаr_аpp,
  • в начало скрипта добавить:
    import sys
    sys.path.extend([‘foo_app’, ‘bar_app’])
  • оба варианта выше — работающие,
  • так нельзя сделать.

Правильный ответ

оба варианта выше — работающие


Вопрос 3


Есть скрипт:


class A:
    def get_some(self):
        super().get_some()

class B:
    def get_some(self):
        print('Some')

class C(A, B):
    def get_some(self):
        super().get_some()

c = C()
c.get_some()

Что будет на выходе?


Варианты ответов:


  • AttributeError: 'C' object has no attribute 'get_some',
  • AttributeError: 'super' object has no attribute 'get_some',
  • Some,
  • пустота (без Чапаева).

Правильный ответ

Some


Вопрос 4


Что будет выведено на экран при запуске такого кода:


class A:
   def foo(self):
       print('foo A')

class B:
   def foo(self):
       print('foo B')

class C(A, B):
   def foo(self):
       super().foo()

class D(B, A):
   def foo(self):
       super().foo()

class E(C, D): pass

e = E()
e.foo()

Варианты ответов


  • foo A,
  • foo B,
  • TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.

Правильный ответ

TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B


Вопрос 5


Представь, у тебя есть модуль foo.py:


def bar():
    print(‘Привет, друг!’)

И ты запускаешь другой скрипт:


import importlib

import foo
from foo import bar

input(‘Друг, нажми ввод’)
importlib.reload(foo)
bar()

Пока он ждет ввода, ты меняешь модуль foo.py:


def bar():
    print(‘Пока, друг!’)

Далее ты жмешь «ввод» в foo.py, чтобы он продолжил работу и видишь...


Варианты ответов:


  • ModuleReloadedException: method bar() was reloaded,
  • Пока, друг!,
  • Привет, друг!,
  • пустоту (и опять нет Чапаева).

Правильный ответ

Привет, друг!


Вопрос 6


Что будет выведено на экран при запуске такого кода:


class A:
   def __init__(self):
       print('__init__ A', end=' ')

class B:
   def __init__(self):
       print('__init__ B', end=' ')

class C(A, B): pass

c = C()

Варианты ответов:


  • __init__ A __init__ B
  • __init__ B __init__ A
  • __init__ A
  • __init__ B

Правильный ответ

__init__ A


Вопрос 7


Что будет в выводе после выполнения следующего кода?


def not_(value): return not value
result = not_(0), all(any([not_(x) for x in range(b)]) for b in range(10))
print(result)

Варианты ответов:


  • (True, True),
  • (True, False),
  • ValueError: need more than 2 values to unpack,
  • def not_(value): return value
                         ^
    SyntaxError: invalid syntax


Правильный ответ

(True, False)


Подведение итогов


Ответы на вопросы выложим апдейтом к посту в среду, 25 июля. Если будете решать — кладите ответы под спойлер, чтобы другим участникам было интереснее решать вопросики.
И (!) не забывайте проверять личку Хабра после окончания квиза.

Tags:
Hubs:
+17
Comments 61
Comments Comments 61

Articles

Information

Website
avito.tech
Registered
Founded
2007
Employees
5,001–10,000 employees
Location
Россия