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

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

1 точки общо

0 успешни теста
1 неуспешни теста
Код (Мерси за feedback-a)

 1class LockPicker_0MI0600397:
 2    def __init__(self, lock):
 3        self._lock = lock
 4        self._concrete_arguments = []
 5
 6    def unlock(self):
 7        try:
 8            self._lock.pick(*self._concrete_arguments)
 9            return True
10        except TypeError as ex:
11            if ex.position:
12                self._concrete_arguments = [None] * ex.expected
13            else:
14                if ex.expected != type(None):
15                    self._concrete_arguments[ex.position - 1] = ex.expected()
16            self.unlock()
17        except ValueError as ex:
18            self._concrete_arguments[ex.position - 1] = ex.expected
19            self.unlock()

Грешка при опит за отключване:
Traceback (most recent call last):
File "/tmp/solution.py", line 8, in unlock
self._lock.pick(*self._concrete_arguments)
File "/tmp/test.py", line 50, in pick
raise LockTypeError("This is a different kind of lock.",
test.LockTypeError: This is a different kind of lock.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/tmp/test.py", line 98, in <module>
test_unlocker(LockPicker(lock))
File "/usr/local/lib/python3.12/dist-packages/timeout_decorator/timeout_decorator.py", line 82, in new_function
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/test.py", line 77, in test_unlocker
unlocker.unlock()
File "/tmp/solution.py", line 15, in unlock
self._concrete_arguments[ex.position - 1] = ex.expected()
^^^^^^^^^^^^^
TypeError: 'int' object is not callable

F
======================================================================
FAIL: test_picking (test.TestLockPicker.test_picking)
Ensure the lock is picked based on already stored boolean var.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 72, in test_picking
self.assertTrue(correct, "Не успя да отключиш.")
AssertionError: False is not true : Не успя да отключиш.

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures=1)

Дискусия
Даниел Стефанов
13.11.2024 21:22

Благодаря!!!!!
Даниел Стефанов
13.11.2024 21:21

Добре 🤣
Виктор Бечев
13.11.2024 21:16

Само че трябваше да размениш условията, решавайки да използваш подходът, който ти предложих (`if ex.position == None` е обратното на `if ex.position`, демек блоковете в `if`-а и `else`-а трябва да се завъртят). Понеже се чувствам сякаш съм те подвел - получаваш точка. На мен да ми е урок да уточнявам, че кодът, който цитирам, не винаги е за директна употреба, а ти ще си видиш точките утре - да ти е за урок, че кодът, който цитирам, не винаги е за директна употреба. :smile:
Виктор Бечев
13.11.2024 15:31

Не, рекурсията не е проблем, стига алгоритъмът да работи за под 1 секунда.
Даниел Стефанов
13.11.2024 12:49

Използването на рекурсия чупи ли тази част от условието, защото метода се извиква повече от веднъж: Класът ви трябва да има публичен метод unlock, който да отключва ключалката при едно извикване, т.е. от първия път.
История

f1class LockPicker_0MI0600397:f1class LockPicker_0MI0600397:
2    def __init__(self, lock):2    def __init__(self, lock):
3        self._lock = lock3        self._lock = lock
4        self._concrete_arguments = []4        self._concrete_arguments = []
55
6    def unlock(self):6    def unlock(self):
7        try:7        try:
8            self._lock.pick(*self._concrete_arguments)8            self._lock.pick(*self._concrete_arguments)
9            return True9            return True
10        except TypeError as ex:10        except TypeError as ex:
n11            if ex.position == None:n11            if ex.position:
12                self._concrete_arguments = [None] * ex.expected12                self._concrete_arguments = [None] * ex.expected
13            else:13            else:
14                if ex.expected != type(None):14                if ex.expected != type(None):
t15                    self._concrete_arguments[ex.position-1] = ex.expected()t15                    self._concrete_arguments[ex.position - 1] = ex.expected()
16            self.unlock()16            self.unlock()
17        except ValueError as ex:17        except ValueError as ex:
18            self._concrete_arguments[ex.position - 1] = ex.expected18            self._concrete_arguments[ex.position - 1] = ex.expected
19            self.unlock()19            self.unlock()
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op