对于编码问题,我必须使用sys.stdin读取数据。但是,我使用的方法是for循环迭代sys.stdin,它失败,因为输入测试用例后输入不包括换行符。
样本输入:
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的版本有一些bug,导致这个错误。无论如何,谢谢你的帮助。
检查输入结尾是否包含“\ n”。
来自python文档的片段:https://docs.python.org/3/tutorial/inputoutput.html?highlight=readline
f.readline()从文件中读取一行;换行符(\ n)留在字符串的末尾,如果文件没有以换行符结尾,则只在文件的最后一行省略。这使得返回值明确无误