Вопрос задан 21.06.2023 в 06:20. Предмет Информатика. Спрашивает Шиликбаева Дина.

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

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Панов Дмитрий.

Ответ:

Исходный код (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
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Проблема 1:

Проблема с вашим текущим кодом заключается в том, что после ввода слова пользователем, программа выполняет цикл по всем парам слов в словаре для каждого введенного слова. Это приводит к тому, что программа продолжает искать синонимы для введенного слова даже после того, как они были найдены. Для решения этой проблемы, вы можете использовать флаг для отслеживания того, был ли синоним найден. Вот исправленный код:

python
dictionary = 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:

Проблема с второй парой слов связана с тем, что ваш код проверяет слова в словаре в том порядке, в котором они были введены. Когда вы вводите слово "привет", программа ищет его в словаре, начиная с первой пары слов, и находит синоним "здравствуйте". Затем она не продолжает поиск в других парам слов, так как уже нашла синоним.

Для решения этой проблемы, вы можете изменить порядок проверки пар слов в словаре. Вот исправленный код:

python
dictionary = 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('Такого слова в словаре нет.')

Теперь программа будет проверять все пары слов в словаре, прежде чем сообщить, что синоним не найден.

0 0

Похожие вопросы

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

Последние заданные вопросы в категории Информатика

Задать вопрос