作爲一個代碼小白,刷題是一件如攀登珠峯一樣困難的事情
找對登山裝備就不是一件簡單的事情
關於牛客網上代碼題的逐行讀取數據的方式,居然也困擾了我很久
終於在善良同窗的幫助下弄清楚了“套路”
在這裏分享一下,不是給“熟手”看的,只不過是想拯救一下和我一樣小白的“登山者”
以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)
好吧,其實真的很簡單,但是沒弄明白之前就是覺得很混亂
但是萬事開頭難,不能忽視這一步艱辛的開始!