python - 当输入不是来自文件时如何检测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
解决方案
只是迭代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")
推荐阅读
- go - 我可以在 Tomcat 中部署 Go 项目吗?
- javascript - 码头工人无法运行scrapy-splash
- android - flutter_pdfview crashing device after opening pdf
- python - 不均匀分布数据的分类方法
- powershell - 在powershell中从字符串中过滤空格
- angular - 登录弹出窗口后角度动画被阻止
- spring-boot - 我们如何在 zeebe 处理程序中调用 Hystrix 的后备方法?
- bash - 如何将自定义字符串附加到错误输出并将其重定向到文件
- google-calendar-api - 无法使用服务帐户访问从 API 创建的新 Google 日历
- swift - 如何以简单的方式从 UITableView(或单元格)保存 PDF(和打印)?