8.4 Состояния и методы генератора - Вновь словарь
Вновь словарь
На предыдущем уроке вы решали задачу «Словарь». В ней гарантировалось, что в сопрограмму alphabet будут передаваться только значения, которые являются ключами глобальной переменной DICTIONARY.
Теперь вам необходимо переписать сопрограмму alphabet так, чтобы она могла обрабатывать исключение KeyError. В случае, когда возникнет исключение KeyError, сопрограмма должна генерировать значение «default».
Переменная DICTIONARY вам в редакторе кода по-прежнему не видна, но вы можете обращаться к ней внутри сопрограммы alphabet.
Sample Input 1:
coro = alphabet()
next(coro)
print(coro.send('a'))
print(coro.send('b'))
print(coro.throw(KeyError))
print(coro.send('c'))
Sample Output 1:
apple
banana
default
cat
Sample Input 2:
coro = alphabet()
next(coro)
for letter in 'qwerty':
print(coro.send(letter))
print(coro.throw(KeyError))
Sample Output 2:
quail
default
walrus
default
elephant
default
rabbit
default
tiger
default
yak
default
Sample Input 3:
coro = alphabet()
next(coro)
print(coro.send('apple'))
print(coro.send('banana'))
print(coro.throw(KeyError))
print(coro.send('dog'))
print(coro.send('d'))
Sample Output 3:
default
default
default
default
dog
Вот заготовка для решения [не оригинальная]:
def alphabet():
letter = ***
while True:
try:
if ***:
letter = *** (не забываем о методе get и о чудном слове «default»)
else:
# В случае, если буква не найдена в словаре генерируем значение «default»
letter = ***
# В случае возникновения исключения KeyError, корректно возвращается «default»
except KeyError:
letter = ***
Напиши программу!
def alphabet():
letter = yield
while True:
try:
letter = yield DICTIONARY.get(letter, 'default')
except KeyError:
yield 'default'