当输入不是来自文件时如何检测 EOF?

How to detect EOF when input is not from a file?

我正在学习 HackerRank 30 天的代码,现在是第 8 天。挑战是采用 n 行形式为 name phone-number 的标准输入,并将它们添加到键中的字典中: 格式 name : phone-number 的值对。 那部分还好。

输入的下一部分是任意行数,每行包含一个名称。任务是打印每个名字的 phone-number 或者打印 "Not found" 如果名字不在字典中。

我的问题在于判断输入结束

我的第二部分代码如下:

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 问题并消除对计数器的需求?

注意。 link 到 HackerRank 页面:https://www.hackerrank.com/challenges/30-dictionaries-and-maps/problem

只需遍历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")