作为一个代码小白,刷题是一件如攀登珠峰一样困难的事情
找对登山装备就不是一件简单的事情
关于牛客网上代码题的逐行读取数据的方式,居然也困扰了我很久
终于在善良同窗的帮助下弄清楚了“套路”
在这里分享一下,不是给“熟手”看的,只不过是想拯救一下和我一样小白的“登山者”
以python为例,其他语言请参考原理自行 触类旁通
牛客网官方不靠谱指北:
小白要有自知之明,这不适合你,原理更重要
lines = []
while True:
line = sys.stdin.readline().strip()
if line == '':
break
lines.append(line.split(','))
牛客网帮助:
https://www.nowcoder.com/discuss/276
私人靠谱指南:
原理:
刷题网站的后台给出的输入是一个含有多行数据的input文件,直接用sys.stdin.readlines()去逐行读取数据即可,具体操作如下:
import sys
lines = sys.stdin.readlines()
此时lines中已经包括了所有一行一行的数据,后续操作按需从中取即可,例如:
for line in lines:
print(line)
如果第一行给出的是样例数目,需要提前读取,则可以用readline()代替 readlines() 只读取一行,而后面再用 readlines() 读取剩余行时,python是会自动从第二行开始读取的:
n = sys.stdin.readline()
lines = sys.stdin.readlines()
*注意:因为在后台给出的文件中是会有EOF的,所以readlines()知道什么时候该停止读取,但如果在本地调试时,直接在terminal中交互输入的话,由于没有EOF,readlines()就会无限地读取
最好的解决方法是:在本地调试时,也用input文件来给出输入,也不需要每次调试都输入一次:
file = open('input.in')
sys.stdin = file
lines = sys.stdin.readlines()
如果一定要倔强地采取交互地输入的话,可以增加一个判断,如果某一行输入的第一个字符就是换行符的话,就认为数据的输入结束了,跳出循环:
for line in sys.stdin:
if line[0] == '\n':
break
print(line)
好吧,其实真的很简单,但是没弄明白之前就是觉得很混乱
但是万事开头难,不能忽视这一步艰辛的开始!