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

с решением задачи (язык 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 пара: Печально - Грустно
И сначала ввести слово "интересно", программа напишет, что такого слова нет в словаре. А если затем ввести слово "привет", то программа уже не будет проверять в этой паре, а сразу перейдёт к следующей. Тоже хочется исправить и получить объяснения.

!

Показать ответ
Ответ:
Annet234
Annet234
19.10.2021 21:24

Исходный код (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

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота