Предизвикателства > Разбий ни ключалката > Решения > Решението на Йоанна Стоева

Резултати
1 точки от тестове
0 точки от учител

1 точки общо

1 успешни теста
0 неуспешни теста
Код

 1class LockPicker_3MI0600342:
 2    def __init__(self, lock):
 3        self.lock = lock
 4
 5    def unlock(self):
 6        args = []
 7        while True:
 8            try:
 9                if self.lock.pick(*args):
10                    break
11            except Exception as ex:
12                if ex.position is None:
13                    args = [None] * ex.expected
14                elif isinstance(ex.expected, type):
15                    args[ex.position - 1] = ex.expected()
16                else:
17                    args[ex.position - 1] = ex.expected

Резултат от контролното:
18/25 верни отговора.
15 точки.
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

Дискусия
Георги Кунчев
13.11.2024 13:39

Не че ще тестваме с такова нещо, но тъй като ми направи впечатление, ще кажа. Поради факта, че не хващаш конкретен тип изключения, а се осланяш на типа на `ex.expected`, има възможност да сгрешиш. Може някой от аргументите, които ключалката ни очаква, да е от тип `type` Например `str`. В такъв случай `isinstance(ex.expected, type)` би ти дал неочакван резултат. За тази конкретна задача, не можем да си позволим да тестваме с типове, защото би било гадно да ги инстанцирате, така че решението ти е валидно, но бих предпочел да хвана конкретните грешки поотделно, за да е сигурно с какво работя.
История
Това решение има само една версия.