当输入不是来自文件时如何检测 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")
我正在学习 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")