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

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

16.02.2025, 03:31. Показов 1485. Ответов 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
Сообщений: 815
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
132 / 190 / 17
Регистрация: 08.10.2024
Сообщений: 718
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
Сообщений: 815
16.02.2025, 17:52  [ТС]
Цитата Сообщение от ViachaslauK Посмотреть сообщение
этого достаточно
вы проверяли на тестах, которые в условиях, думаю , нет
с этим кодом первый тест покажет:
apple
banana
default
banana <-- вот эту лишнюю банану
cat

вы за асинхронку топите, а в простом коде не разобрались, но все равно , спасибо
а одно из решений я выложил , если есть желание , объясню, почему именно так
0
 Аватар для ViachaslauK
132 / 190 / 17
Регистрация: 08.10.2024
Сообщений: 718
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
Сообщений: 815
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
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru