
Помогите с решением задачи (язык Python): Задача 6. Словарь синонимов Одна библиотека поручила
вам написать программу для оцифровки словарей слов-синонимов. На вход в программу подаётся N пар слов. Каждое слово является синонимом к парному ему слову. Реализуйте код, который составляет словарь слов-синонимов (все слова в словаре различны), затем запрашивает у пользователя слово и выводит на экран его синоним. Обеспечьте контроль ввода: если такого слова нет, то выведите ошибку и запросите слово ещё раз. При этом проверка не должна зависеть от регистра символов. Пример: Введите количество пар слов: 3 1 пара: Привет - Здравствуйте 2 пара: Печально - Грустно 3 пара: Весело - Радостно Введите слово: интересно Такого слова в словаре нет. Введите слово: здравствуйте Синоним: Привет Мой код ниже: dictionary = dict() for i in range(int(input('Введите количество пар слов: '))): ````words = input('{} пара: '.format(i + 1)).lower().split(' - ') ````dictionary[words[0]] = words[1] for key in dictionary: ````while True: ````````word = input('\nВведите слово: ').lower() ````````if key == word: ````````````print('Синоним:', dictionary[key]) ````````````break ````````elif dictionary[key] == word: ````````````print('Синоним:', key) ````````````break ````````else: ````````````print('Такого слова в словаре нет.') В чём проблема: 1. Если пар синонимов больше, чем одна, надо чтобы программа остановилась сразу после первой проверки. Сейчас код этого не предполагает почему-то (очень хочется получить объяснение) 2. Если будет условно 2 пары синонимов, например такие: 1 пара: Привет - Здравствуйте 2 пара: Печально - Грустно И сначала ввести слово "интересно", программа напишет, что такого слова нет в словаре. А если затем ввести слово "привет", то программа уже не будет проверять в этой паре, а сразу перейдёт к следующей. Тоже хочется исправить и получить объяснения. Спасибо!

Ответы на вопрос

Ответ:
Исходный код (Python 3.8 x64):
class InvalidArgumentException(Exception): pass
class KeyValuePair:
def __init__(self, key, value):
self._key = key
self._value = value
@staticmethod
def FromList(pair: list):
if (len(pair) != 2): raise InvalidArgumentException("List must contain strictly 2 elements for initialize KeyValuePair")
return KeyValuePair(pair[0], pair[1])
@property
def Key(self):
return self._key
@property
def Value(self):
return self._value
def strip(string: str):
return string.strip()
def readWordPairs(wordCount: int, pairSeparator: str = "-") -> dict:
temp = dict()
for i in range(wordCount):
wordPair = KeyValuePair.FromList(list(map(strip, input(f'{i} pair: ').lower().split(pairSeparator))))
if wordPair.Key in temp.keys():
temp[wordPair.Key] = [temp[wordPair.Key], wordPair.Value]
else:
temp[wordPair.Key] = wordPair.Value
return temp
def main():
wordCount = int(input("Enter words pairs count:\n"))
wDict = readWordPairs(wordCount)
while True:
word = input("Enter word: ")
if word.lower() == "exit": break
print(f"Synonim: {wDict[word]}" if word in wDict.keys() else "Not found")
input("press any key to close program")
if __name__ == "__main__":
main()
Объяснение:
Если есть вопросы - не стесняйтесь задать в комментариях к ответу. Ошибок, которые вы описали в задании, в данном случае не наблюдается. Единственное, я сделал так, что бы программа не завершалась после первого найденного слова, а запрашивала слова до тех пор, пока пользователь не введёт команду exit



Проблема 1:
Проблема с вашим текущим кодом заключается в том, что после ввода слова пользователем, программа выполняет цикл по всем парам слов в словаре для каждого введенного слова. Это приводит к тому, что программа продолжает искать синонимы для введенного слова даже после того, как они были найдены. Для решения этой проблемы, вы можете использовать флаг для отслеживания того, был ли синоним найден. Вот исправленный код:
pythondictionary = dict()
# Ввод пар слов
for i in range(int(input('Введите количество пар слов: ')):
words = input('{} пара: '.format(i + 1)).lower().split(' - ')
dictionary[words[0]] = words[1]
while True:
word = input('\nВведите слово: ').lower()
synonym_found = False # Флаг для отслеживания того, был ли найден синоним
for key in dictionary:
if key == word:
print('Синоним:', dictionary[key])
synonym_found = True
break
elif dictionary[key] == word:
print('Синоним:', key)
synonym_found = True
break
if not synonym_found:
print('Такого слова в словаре нет.')
Проблема 2:
Проблема с второй парой слов связана с тем, что ваш код проверяет слова в словаре в том порядке, в котором они были введены. Когда вы вводите слово "привет", программа ищет его в словаре, начиная с первой пары слов, и находит синоним "здравствуйте". Затем она не продолжает поиск в других парам слов, так как уже нашла синоним.
Для решения этой проблемы, вы можете изменить порядок проверки пар слов в словаре. Вот исправленный код:
pythondictionary = dict()
# Ввод пар слов
for i in range(int(input('Введите количество пар слов: ')):
words = input('{} пара: '.format(i + 1)).lower().split(' - ')
dictionary[words[0]] = words[1]
while True:
word = input('\nВведите слово: ').lower()
synonym_found = False # Флаг для отслеживания того, был ли найден синоним
for key in dictionary:
if key == word:
print('Синоним:', dictionary[key])
synonym_found = True
break
if not synonym_found:
for key in dictionary:
if dictionary[key] == word:
print('Синоним:', key)
synonym_found = True
break
if not synonym_found:
print('Такого слова в словаре нет.')
Теперь программа будет проверять все пары слов в словаре, прежде чем сообщить, что синоним не найден.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili