阅读sys.stdin

时间:2019-04-17 12:16:55

标签: python-3.x stdin

对于编码问题,我必须使用sys.stdin读取数据。但是,我使用的方法是在sys.stdin上进行for循环迭代,由于输入了测试用例后,输入不包含换行符,因此该方法失败。

样本输入:

10 20
#################---
##-###############--
#---################
##-#################
########---#########
#######-----########
########---#########
##################--
#################---
##################-#
3 10
#-########
----------
#-########

用于读取输入的代码:

grids = []
for line in stdin:
    if line == "\n":
        break
    m, n = map(int, line.split())
    grid = []
    for row in range(m):
        r = list(stdin.readline().strip())
        print("ROW:",r)
        grid.append(r)
    grids.append(grid)
return grids

当前输出:

ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-']
ROW: ['#', '#', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-']
ROW: ['#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '#']
ROW: ['#', '-', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-']

所需的输出:

ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-']
ROW: ['#', '#', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-']
ROW: ['#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '#']
ROW: ['#', '-', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-']
ROW: ['#', '-', '#', '#', '#', '#', '#', '#', '#', '#']

可以看出,由于输入中不包含换行符,因此最后一行未打印,因此无法读取。因此,有什么办法让我阅读最后一行吗?请告知。

我正在使用Pycharm Community Edition 2017。

编辑:

当我在IDLE shell中运行它时,此问题已解决,我怀疑所使用的Pycharm版本存在一些错误,从而导致此错误。无论如何,谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

检查输入的末尾是否包含“ \ n”。

python文档的摘录: https://docs.python.org/3/tutorial/inputoutput.html?highlight=readline

  

f.readline()从文件中读取一行;换行符   (\ n)留在字符串的末尾,仅在末尾省略   如果文件未以换行符结尾,则该行。 这使得   返回值明确