我正在研究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
答案 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")