Я работаю через 30-дневный код HackerRank, а я на 8-й день. Задача состоит в том, чтобы взять n строк стандартного ввода в форме name phone-number
и добавить их в словарь в парах ключ: значениеформат name : phone-number
.С этой частью все было в порядке.
Следующая часть ввода представляет собой произвольное количество строк, каждая из которых содержит имя.Задача состоит в том, чтобы напечатать номер телефона каждого имени или напечатать «Не найдено», если имя отсутствует в словаре.
Моя проблема заключается в определении конца ввода.
Вторая часть моего кода выглядит следующим образом:
counter = 0 # To prevent infinite loop
while 1:
query = input()
if query in phone_book:
print("{}={}".format(query, phone_book[query]))
elif query not in phone_book:
print("Not found")
else:
break
counter += 1
if counter == 10000000:
break
Операторы if и elif проверяют, есть ли имя в словаре, а оператор else предназначен для выхода из цикла, если нетбольше ввода.Однако я получаю ошибку EOFError: EOF when reading a line
.Мой код проходит все тесты, но я знаю, что должен быть лучший способ справиться с EOF, чем просто установить верхний предел в 10000000 строк (если бы ввод был более 10000000 строк, я мог бы просто увеличить предел счетчика, но язнаю, что это плохой способ сделать это).
Я посмотрел на этой странице: Как узнать, находится ли файл в его `eof`?
Но я не знаю, как реализовать это в своем коде, так как ввод HackerRank, похоже, не находится в файле, из которого я могу читать строки.
Как я могу справиться с проблемой EOF иустранить необходимость в счетчике?
NB.Ссылка на страницу HackerRank: https://www.hackerrank.com/challenges/30-dictionaries-and-maps/problem