Лабораторное задание по тезаурусуPython

Программы на Python
Ответить
Anonymous
 Лабораторное задание по тезаурусу

Сообщение Anonymous »

У меня есть домашнее задание, которое я не могу решить.
Проблема такова:

Имея набор текстовых файлов, содержащих синонимы для разных слов,
завершите основную программу, чтобы вывести синонимы для определенного слова.
Каждый текстовый файл содержит синонимы для слова, указанного в
имени файла, и каждая строка в файле перечисляет синонимы слова, которые
начинаются с одной и той же буквы, разделенной пробелом. Программа считывает
слово и букву от пользователя и открывает текстовый файл, связанный
с введенным словом. Затем программа сохраняет содержимое текстового
файла в словаре, предварительно определенном в программе. Наконец, программа
просматривает словарь и выводит все синонимы, начинающиеся с
вводимой буквы, по одному синониму в строке или сообщение, если синонимы
начинающиеся с введенной буквы не найдены.
Советы: используйте первую букву синонима в качестве ключа при сохранении
синонима в словаре. Предположим, что все буквы в нижнем регистре.
Пример: если входные данные программы:

Код: Выделить всё

educate
c
программа открывает файл education.txt, который содержит:

Код: Выделить всё

brainwash brief
civilize coach cultivate
develop discipline drill
edify enlighten exercise explain
foster
improve indoctrinate inform instruct
mature
nurture
rear
school
train tutor
затем программа выводит:

Код: Выделить всё

civilize
coach
cultivate
Пример: если входные данные программы:

Код: Выделить всё

educate
a
затем программа выводит:

Код: Выделить всё

No synonyms for educate begin with a.
Сейчас у меня есть это, и сейчас в фокусе только один файл:

Код: Выделить всё

synonyms = {}   # Define dictionary

initial_input = input()
start_letter = input()

if initial_input == 'Educate' or 'educate':
with open('educate.txt', 'r') as e:
lines = e.readlines()
for word in lines:
if ord(str(word[0])) == ord(str(start_letter)):
key = start_letter
split = word.split(' ')
synonyms[key] = split
print(synonyms)
if ord(str(start_letter)) != ord(str(word[0])):
print(f'No synonyms for educate begin with {start_letter}.')

elif initial_input == 'Happy' or 'happy':
with open('happy.txt', 'r') as h:
lines = h.readlines()

elif initial_input == 'Goal' or 'goal':
with open('goal.txt', 'r') as e:
lines = e.readlines()
и при вводе:

Код: Выделить всё

educate
b
Я получаю:

Код: Выделить всё

{'b': ['brainwash', 'brief\n']}
No synonyms for educate begin with b.
No synonyms for educate begin with b.
No synonyms for educate begin with b.
No synonyms for educate begin with b.
No synonyms for educate begin with b.
No synonyms for educate begin with b.
No synonyms for educate begin with b.
No synonyms for educate begin with b.
No synonyms for educate begin with b.
No synonyms for educate begin with b.
Я знаю, что могу получить значения по отдельности, но не могу переносить каждую запись на новую строку, заменяя print(synonyms) на print(word).
Я немного изменил код и получил следующее:

Код: Выделить всё

if initial_input.lower() == 'educate':
with open('educate.txt', 'r') as e:
lines = e.readlines()
for word in lines:
if word[0] == start_letter:
split = word.split(' ')
synonyms[start_letter] = split
for x in synonyms[start_letter]:
print(x)
break
else:
print(f'No synonyms for educate begin with {start_letter}.')
но обратите внимание: поскольку он читает строки сверху вниз, например, при изменении начальной буквы на «c» выводится:

Код: Выделить всё

No synonyms for educate begin with c.
civilize
coach
cultivate
Как сделать так, чтобы он не смотрел на буквы выше?


Подробнее здесь: https://stackoverflow.com/questions/695 ... assignment
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»