GOOGLE ADS

четверг, 14 апреля 2022 г.

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

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

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

Подсказки: используйте первую букву синонима в качестве ключа при сохранении синонима в словаре. Предположим, что все буквы в нижнем регистре.

Пример: если ввод программы:

educate
c the program opens the file educate.txt, which contains:
brainwash brief
civilize coach cultivate
develop discipline drill
edify enlighten exercise explain
foster
improve indoctrinate inform instruct
mature
nurture
rear
school
train tutor then the program outputs:
civilize
coach
cultivate Ex: If the input of the program is:
educate
a then the program outputs:
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.

Я знаю, что могу получить значения по отдельности, но не могу создать новую строку для каждой записи, заменив печать (синонимы) на печать (слово), но в настоящее время я в растерянности.

Изменить: я немного изменил код и придумал:

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

Как сделать так, чтобы он не смотрел на буквы выше?


Решение проблемы

Ваш

if ord(str(start_letter))!= ord(str(word[0])):
print(f'No synonyms for educate begin with {start_letter}.')

Выполняется для каждой строки. Поэтому он будет печатать заявление об отсутствии синонимов для каждой строки в educate.txt, которая не начинается с вашей целевой буквы.

Вы должны убедиться, что он печатается только один раз, вероятно, с чем-то вроде

for word in lines:
if word[0] == start_letter:
split = word.split(' ')
synonyms[start_letter] = split
print(synonyms)
break
else:
print(f'No synonyms for educate begin with {start_letter}.')

Кроме того, ваши операторы if не работают, поскольку предложение or 'educate' всегда истинно. Вы должны либо сделать

if initial_input == 'Educate' or initial_input == 'educate'

Или, наверное, лучше,

if initial_input.lower() == 'educate'

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...