如果不是来自文件的输入,如何检测EOF?

时间:2019-01-30 12:36:49

标签: python python-3.x stdin eof

我正在研究30天的HackerRank代码,而在第8天。我面临的挑战是采用n行标准输入,格式为name phone-number,并将它们添加到key:value的字典中对,格式为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行,我可以增加计数器限制,但是我知道这样做不是一个好方法)。

我看过以下页面:How to find out whether a file is at its `eof`?

但是我不知道如何在我的代码中实现此功能,因为HackerRank输入似乎不在一个我可以读取行的文件中。

如何处理EOF问题并消除对价的需求?

NB。指向HackerRank页面的链接:https://www.hackerrank.com/challenges/30-dictionaries-and-maps/problem

1 个答案:

答案 0 :(得分:3)

只需遍历sys.stdin;则无需显式检查输入的结尾; it 到达输入的ed时,迭代器将引发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")