首页 > 解决方案 > 当输入不是来自文件时如何检测EOF?

问题描述

我正在研究 HackerRank 30 天的代码,现在已经是第 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 行,我可以增加计数器限制,但我知道这不是这样做的好方法)。

我看过这个页面:如何找出文件是否在它的`eof`?

但我不知道如何在我的代码中实现这一点,因为 HackerRank 输入似乎不在我可以从中读取行的文件中。

我如何管理 EOF 问题并消除对计数器的需要?

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

标签: pythonpython-3.xstdineof

解决方案


只是迭代sys.stdin; 则无需显式检查输入是否结束;迭代器将StopIteration到达输入的 ed 时引发。

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")

推荐阅读