我正在尝试解决Kattis问题。完整问题可在链接中找到:https://open.kattis.com/problems/addingwords
我感到困惑的部分是:“输入是多达2000条命令的序列,每行一个,在文件末尾结束。”
此输入的代码是什么?我尝试这样做:
import sys
for line in sys.stdin.readlines():
#print('something')
此后,我从上方缩进后继续正常执行该程序。我的问题是,我将如何测试该程序是否在cmd中运行?我想测试一些情况,但是当我输入某些内容时,命令提示符将继续等待其他结果,而不是打印任何内容。当我按下控制C时,程序突然结束。在接收用户输入直到文件结束时,我们应该如何检查程序是否正常工作?
答案 0 :(得分:2)
这里的问题是readlines()
渴望不偷懒。这意味着它将把整个文件读入内存(直到EOF),然后将其分成几行并返回这些行的列表。因此,在使用交互式stdin时,sys.stdin.readline()
将等到stdin结束(在linux / macOS上为Ctrl-D,在Windows上为Ctrl + Z)。
但是不需要readlines()
(实际上是you almost should never use it)。默认情况下,通过以下行遍历文件对象:
for line in sys.stdin:
print('got line!')
文档甚至admit that you should do this。如果确实需要列表中的所有行,则只需执行list(sys.stdin)
。