Как определить EOF, когда ввод не из файла? - PullRequest
0 голосов
/ 30 января 2019

Я работаю через 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

1 Ответ

0 голосов
/ 30 января 2019

Просто переберите sys.stdin;тогда нет необходимости явно проверять конец ввода;итератор поднимет StopIteration, когда это достигнет эд ввода.

import sys

for query in sys.stdin:
    query = query.strip()
    if query in phone_book:
        print("{}={}".format(query, phone_book[query]))
    else:
        print("Not found")
...