Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810

Задача «Словарь». Корутина

16.02.2025, 03:31. Показов 1454. Ответов 5

Студворк — интернет-сервис помощи студентам
На предыдущем уроке вы решали задачу «Словарь». В ней гарантировалось, что в сопрограмму alphabet будут передаваться только значения, которые являются ключами глобальной переменной DICTIONARY.

Теперь вам необходимо переписать сопрограмму alphabet так, чтобы она могла обрабатывать исключение KeyError. В случае, когда возникнет исключение KeyError, сопрограмма должна генерировать значение «default».

Переменная DICTIONARY вам в редакторе кода по-прежнему не видна, но вы можете обращаться к ней внутри сопрограммы alphabet.

Sample Input 1:

Python
1
2
3
4
5
6
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:

Python
1
2
3
4
5
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:

Python
1
2
3
4
5
6
7
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[/CODE]


задача "Словарь" из предыдущего урока
В вашем распоряжении имеется глобальная переменная DICTIONARY, представляющая собой словарь, где ключами являются английские буквы, а значениями - слова, начинающиеся с буквы ключа. Начальное заполнение DICTIONARY имеет следующий вид:

Python
1
2
3
4
5
6
7
DICTIONARY = {
    'a': 'apple',
    'b': 'banana',
    'c': 'cat',
    'd': 'dog',
    ...
}
Ваша задача — написать сопрограмму alphabet, в которую передаются буквы, а в ответ она генерирует слова, закрепленные переданной буквой из словаря DICTIONARY.

Гарантируется, что в alphabet будут поступать значения, которые имеются в ключах словаря DICTIONARY.

Сама переменная DICTIONARY вам в редакторе кода не видна, но вы можете обращаться к ней внутри сопрограммы alphabet.

Sample Input 1:

Python
1
2
3
4
5
coro = alphabet()
next(coro)
print(coro.send('a'))
print(coro.send('b'))
print(coro.send('c'))
Sample Output 1:

apple
banana
cat

Sample Input 2:

Python
1
2
3
4
coro = alphabet()
next(coro)
for letter in 'qwerty':
    print(coro.send(letter))
Sample Output 2:

quail
walrus
elephant
rabbit
tiger
yak

рабочий код из задания "Словарь"

Python
1
2
3
4
def alphabet():
    a = yield
    while True:
        a = yield DICTIONARY[a]
это весь словарь
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
DICTIONARY = {
    'a': 'apple',
    'b': 'banana',
    'c': 'cat',
    'd': 'dog',
    'e': 'elephant',
    'f': 'fox',
    'g': 'gorilla',
    'h': 'hippo',
    'i': 'iguana',
    'j': 'jaguar',
    'k': 'koala',
    'l': 'llama',
    'm': 'monkey',
    'n': 'newt',
    'o': 'octopus',
    'p': 'parrot',
    'q': 'quail',
    'r': 'rabbit',
    's': 'squirrel',
    't': 'tiger',
    'u': 'unicorn',
    'v': 'viper',
    'w': 'walrus',
    'x': 'xenomorph',
    'y': 'yak',
    'z': 'zebra'
}
это код который я написал
Python
1
2
3
4
5
6
7
def alphabet():
    a = yield
    while True:
        try:
            a = yield = DICTIONARY[a]
        except KeyError:
            yield 'default'
но вывод в нем следующий
apple
banana
default
banana <- вот эта строка лишняя, но я никак не могу от нее избавиться
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2025, 03:31
Ответы с готовыми решениями:

Задача Англо-латинский словарь
Однажды, разбирая старые книги на чердаке, школьник Вася нашёл англо-латинский словарь. Английский он к тому времени знал в совершенстве, и...

Задача «Англо-латинский словарь»
Всем привет, есть задачка, вот её условие. Условие Однажды, разбирая старые книги на чердаке, школьник Вася нашёл англо-латинский...

Создать словарь словарей из строки
Есть словарь dictFullDataParse. Нужно из приходящей строки создать подсловари и положить в самый низ значение. Вложенность может быть...

5
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810
16.02.2025, 10:49  [ТС]
Цитата Сообщение от ujif Посмотреть сообщение
но я никак не могу от нее избавиться
избавился
Python
1
2
3
4
5
6
7
def alphabet():
    word = yield
    while True:
        try:
            word = yield DICTIONARY.get(word, 'default')
        except KeyError:
            word = 'default'
0
 Аватар для ViachaslauK
124 / 183 / 16
Регистрация: 08.10.2024
Сообщений: 664
16.02.2025, 12:33
Твой код неправильный и избыточный. Метод get для словарей сам по себе уже содержит обработку исключения Keyerror - оно никогда не вызовется.
Python
1
2
3
4
def alphabet():
    word = yield
    while True:
            word = yield DICTIONARY.get(word, 'default')
этого достаточно
А вот если ты обращаешься через []
тогда надо делать обработку.
Каждый вызов yield сдвигает счетчик в генераторе, поэтому ты и получаешь не то значение.
2
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810
16.02.2025, 17:52  [ТС]
Цитата Сообщение от ViachaslauK Посмотреть сообщение
этого достаточно
вы проверяли на тестах, которые в условиях, думаю , нет
с этим кодом первый тест покажет:
apple
banana
default
banana <-- вот эту лишнюю банану
cat

вы за асинхронку топите, а в простом коде не разобрались, но все равно , спасибо
а одно из решений я выложил , если есть желание , объясню, почему именно так
0
 Аватар для ViachaslauK
124 / 183 / 16
Регистрация: 08.10.2024
Сообщений: 664
17.02.2025, 11:04
Лучший ответ Сообщение было отмечено ujif как решение

Решение

Цитата Сообщение от ujif Посмотреть сообщение
а одно из решений я выложил , если есть желание , объясню, почему именно так
Ты не видишь ошибки в первом варианте, который легко поправить без get, что ты можешь обьяснить?
У тебя там выводится banana, потому что ты не обновляешь значение word.
достаточно сделать так:
Python
1
2
3
4
5
6
7
def alphabet():
    a = yield
    while True:
        try:
            a = yield DICTIONARY[a]
        except KeyError:
            a = yield 'default'
И все будет работать без get.
Я же написал - счетчик нужно сдвинуть, в твоем варианте А этого не происходит.

Изначально я не обратил на условие-
Python
1
2
3
4
5
6
7
coro = alphabet()
next(coro)
print(coro.send('apple'))
print(coro.send('banana'))
print(coro.throw(KeyError))
print(coro.send('dog'))
print(coro.send('d'))
не заметил что ты искусственно вызываешь исключение. В реальности такого не может произойти - get не даст, поэтому я и написал про избыточность.
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810
17.02.2025, 12:35  [ТС]
Цитата Сообщение от ViachaslauK Посмотреть сообщение
не заметил что ты искусственно вызываешь исключение
понятно, теперь разобрались , спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2025, 12:35
Помогаю со студенческими работами здесь

Добавить операции в словарь
Дан словарь как добавить возможность (без преобразования словаря обратно в список): 1)Увеличить возраст конкретного студента на 1. Поиск...

Словарь: разбить строку на слова и сохранить слова и места, где они встречаются
Доброго времени суток,форумчане. Формулирую задачу. Разбить строку на слова и сохранить слова и места, где они встречаются ...

Словарь!
Помогите с задачей Дано целое число в диапазоне 100 – 999. Вывести строку — словесное описание данного числа, например: 256 —...

Нужна помощь в решении задачи(словарь)
Здравствуйте ув. форумчане, у меня возникла проблемка) вот ее суть: Есть словарь {(First_id, Second_id): , ...} Мне нужно создать...

Включить в словарь несколько поколений
По книге Майкла Доусона, есть задача в которой к имеющимся родственным связям (сын - отец) нужно добавить “деда”, используя все тот же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru