Привет! Мы обожаем квизы, посвященные языкам программирования. В нашем блоге мы разместили уже целых три: первый — по Python, PHP, Golang, DevOps, второй — полностью по Go, третий — только по PHP. Сегодняшний квиз посвящен исключительно Python.
Предлагаем вам размяться в честь конца ещё одной летней недели и в преддверии PyCon Russia 2018. (Кстати, кто едет? Мы там будем).
Под катом — семь вопросов, советы от друга, Чапаев, отрывки из ABBA (что? да!) и крутой мерч.
Призы
Призы распределим между десяткой лучших. Первому, кто правильно ответит на все вопросы Python-викторины, отправим продвинутый набор Авито-мерча: толстовку, носки и холиварные кости — можно будет погадать, на каком бэкенд-языке и фронтенд-фреймворке будет написан ваш новый проект. Второго участника, справившегося с заданиями, наградим холиварными костями, носками и футболкой. Третьему достанется тот же набор, но без футболки/толстовки. Среди оставшихся семи участников разыграем термобутылку с карабином, которую можно взять хоть в поход, хоть на хакатон.
Вопросы
*Во всех случаях речь про 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])
.
Вопрос 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
,- пустота (без Чапаева).
Вопрос 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
.
Вопрос 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
Вопрос 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
Подведение итогов
Ответы на вопросы выложим апдейтом к посту в среду, 25 июля. Если будете решать — кладите ответы под спойлер, чтобы другим участникам было интереснее решать вопросики.
И (!) не забывайте проверять личку Хабра после окончания квиза.
Vadem
Python 3. В пятом вопросе я предположил, что идентация там правильная.
acerikfy
2. оба варианта выше — работающие,
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5. Привет, друг!
6. __init__ A
7. (True, False),
Histiophryne
Swezy_ua
вылетит TypeError, в t будет (1, 2, [30, 40, 50, 60]),
Вопрос 2
оба варианта выше — работающие
Вопрос 3
Some
Вопрос 4
TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
Вопрос 5
Привет, друг!
Вопрос 6
init A
Вопрос 7
(True, False)
SlonPC
вылетит TypeError, в t будет (1, 2, [30, 40, 50, 60]),
Вопрос 2
оба варианта выше — работающие
Вопрос 3
Some
Вопрос 4
TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
Вопрос 5
Привет, друг!
Вопрос 6
init A
Вопрос 7
(True, False)
noth
2. оба варианта выше — работающие,
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5. Привет, друг!
6. __init__ A
7. (True, False)
svam4ik
2 — 4
3 — 3
4 — 3
5 — 4
6 — 3
7 — 2
IIRoadRunnerII
2. оба варианта выше — работающие
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5. Привет, друг!
6. __init__ A
7. (True, False)
term1nal
2 — оба варианта выше — работающие
3 — Some
4 — TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5 — Привет, друг!
6 — __init__ A
7 — (True, False)
alexchromets
2. оба варианта выше — работающие
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5. Привет, друг!
6. __init__ A
7. (True, False)
suharik
2-import sys
sys.path.extend([‘foo_app’, ‘bar_app’])
3-Some,
4-TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5-ModuleReloadedException: method bar() was reloaded,
6-__init__ A
7-(True, False),
Tihon_V
2. оба вариата — работающие
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5. Привет, друг!
6. __init__ A
7. (True, False)
paultsv
2. так нельзя сделать.
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5. Привет, друг!
6. __init__ A.
7. (True, False).
3t3rn1ty
2 — •так нельзя сделать
3 — Some
4 — TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5 — Привет, друг!
6 — __init__ A
7 — (True, False)
nlykl
2. перед запуском скрипта выполнить export PYTHONPATH=foo_
barapp:bar_app3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
5. Привет, друг.
6. __init__ A
7. (True, False)
ddreyman
sunman
shimi_elder
Вопрос 2. 3-й вариант ('оба варианта выше — работающие')
Вопрос 3. 3-й вариант ('Some')
Вопрос 4. 3-й вариант ('TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.')
Вопрос 5. 3-й вариант ('Привет, друг!')
Вопрос 6. 3-й вариант ('__init__ A')
Вопрос 7. 1-й вариант ('(True, True)')
VanVanuch
1 — вылетит TypeError, в t будет (1, 2, [30, 40, 50, 60])
2 — так нельзя сделать(c текущей структурой, необходимы __init__.py в модулях)
3 — Some
4 — TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5 — Привет, друг!
6 — __init__ A
7 — (True, False)
grt_pretender
2. оба варианта выше — работающие
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
5. Привет, друг!
6. __init__ A
7. (True, False)
antoshadcam
2 вариант 2 оба варианта выше — работающие
3 вариант 2 some
4 вариант 2 TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
5 вариант 2 Привет, друг!
6 вариант 2 __init__ A
7 вариант 1 (True, False)
artkra
2.3
3.3
4.3
5.3
6.3
7.2
Zelgadiss
walkingpendulum Автор
Zelgadis пожалуйста уберите ответы под кат
Zelgadiss
У меня кат недоступен среди элементов оформления.
walkingpendulum Автор
попробуйте вручную написать теги
< \spoiler title=«Заголовок спойлера»>
text
</ \spoiler>
только \ уберите перед этим
Zelgadiss
Оно ещё и для редактирования недоступно.
Если есть возможность удалить ответ, я напишу новый.
rafinirovannoe
Да, редактировать на хабре можно только первые несколько минут. Возможно, получится удалить у вас, Zelgadiss, хотя я не уверена. Автор поста точно не может удалить комментарий.
Zelgadiss
Я тоже к сожалению не могу удалить.
rafinirovannoe
Что написано на Хабре — не вырубишь топором :)
martbln
вылетит TypeError, в t будет (1, 2, [30, 40, 50, 60])
Вопрос 2
оба варианта выше — работающие
Вопрос 3
Some
Вопрос 4
TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
Вопрос 5
Привет, друг!
Вопрос 6
__init__ A
Вопрос 7
(True, False)
Vash
walkingpendulum Автор
Vash если есть возможность, пожалуйста, уберите ответы под кат
MindHatter
2. так сделать нельзя (предложенными вариантами)
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
5. Привет, друг!
6. __init__ A
7. (True, False)
samodum
2) оба варианта выше — работающие,
3) Some,
4) TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5) Привет, друг!
6) __init__ A
7) (True, False)
Shpawel
2 — 4
3 — 2
4 — 1
5 — 1
6 — 3
7 — 2
ipatov_dn
2 оба варианта выше — работающие
3 Some
4 TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5 Привет, друг!
6 __init__ A
7 (True, False)
maksimmysak
2. так сделать нельзя (предложенными вариантами)
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
5. Привет, друг!
6. __init__ A
7. (True, False)
Quyxor
2. оба варианта выше — работающие,
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5. Привет, друг!
6. __init__ A
7. (True, False),
Closius
Зачем это все?
atoshin
pashcovich
2) в начало скрипта добавить
3) Some
4) TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5) Привет, друг!
6) __init__ A
7) (True, False)
Ну и вместо символов и
все таки использовать
remkudusov
2. Оба варианта выше — работающие
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5. Привет, друг!
6. init A
7. (True, False)
dimka665
2. в начало скрипта добавить…
3. Some
4. TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
5. Привет, друг!
6. __init__ A
7. (True, False)
hippy_azimov
вылетит TypeError, в t будет (1, 2, [30, 40, 50, 60])
https://github.com/python/cpython/blob/6f0eb93183519024cb360162bdd81b9faec97ba6/Lib/operator.py#L337
в начало скрипта добавить:
import sys
sys.path.extend(['foo_app', 'bar_app'])
Some
TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
Привет, друг!
__init__ A
(True, False)
overcot
2 — так нельзя сделать
3 — Some
4 — TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5 — Привет, друг!,
6 — __init__ A
7 — (True, False)
retd
2 — оба варианта выше — работающие,
3 — Some,
4 — TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.
5 — Привет, друг!,
6 — __init__ A
7 — (True, False),
Alibeksan
2) 2
3) 2
4) 1
5) 3
6) 1
7) 4
JohnMark
(с) «Но я не уверен»
# нельзя редакировать элементы в кортеже
2. 'оба варианта выше — работающие'
# *второй вариант не работает в windows и не стоит менять глобальные параметры
# *третий вариант работает, только апострофы надо поенять на одинарные ковычки
3. 'Some'
# алгоритм линеаризации наследования не находит в методе 'А::get_some()' метод super().get_some()
# поэтому вызывается метод класса 'B'
4. 'TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B.'
5. 'Привет, друг!'
# т.к. метод bar() был проимпортирован отдельно 'from foo import bar'
# если хотим чтобы менялся, надо высызвать метод из модуля 'foo.bar()'
6. '__init__ A'
# опять алгоритм линеаризации
# поиск идёт слево направо
7. '(True, False)'
# для диапазона [0-9] метод not будет возвращать всегда 'True' для '0' и 'False' для остальных
# т.е. всегда будет хотябы одно отличающееся значение в диапазоне
# поэтому условие 'all' вернет 'False'
alinyou
Зачем так просто?
Fian
3/7 вопросов на знание множественного наследования, когда по-хорошему нужно знать, что множественное наследование это bad practice.
walkingpendulum Автор
множественное наследование это нормальная практика, если не доводить до чего-то такого
institoris
2: оба варианта выше — работающие
3: Some
4: TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
5: Привет, друг!
6: __init__ A
7: (True, False)
Leonid72
2 — 4
3 — 2
4 — 1
5 — 1
6 — 3
7 — 2