关于牛客网代码题 数据读取问题的 小白指南

作为一个代码小白,刷题是一件如攀登珠峰一样困难的事情
找对登山装备就不是一件简单的事情
关于牛客网上代码题的逐行读取数据的方式,居然也困扰了我很久
终于在善良同窗的帮助下弄清楚了“套路”
在这里分享一下,不是给“熟手”看的,只不过是想拯救一下和我一样小白的“登山者”

以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)

好吧,其实真的很简单,但是没弄明白之前就是觉得很混乱
但是万事开头难,不能忽视这一步艰辛的开始!

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值