牛客网笔试的时候Python的输入输出是真的很坑,有时候线下自测案例是正常的,线上却怎么都调不过去,这里简单记录一下。
一、常见输入输出的写法
1、input
n = input()
▲需要注意的是input()是一行一行读取的,也就是每次只能读取一行,需要读取第二行的话要再调用一次input()。
当然很多时候我们输入是一个列表,我们可以用以下的方法将其分割为列表。
n_list = list(map(int, input().split(" ")))
2、sys
可以用sys库来调用信息,但是要注意有时候可能会把换行符也读回来,需要去除。
import sys
for line in sys.stdin:
s = line.split(" ")
二、输入中的一些坑
1、确定行数
其实最简单的读取思路,是将读取回来的每一个值保存到一个list中,然后再来调用,但是在实际使用中线下可以跑通,但是线上是怎么都运行不了,也没法打印debug(没有概念的可以去体验一次秋招笔试或者在牛客网上做一下模拟题)。
针对于这个比较坑的地方,需要把运行程序加入以下模板中(原因不知道。。反正跑不通加这个就可以跑通了)。
while 1:
try:
except:
break
如以下例子: 运行失败样例:
运行成功样例:
2、不定行数
可以先用一个list保存下来然后再打印出来。
all_list = []
while 1:
try:
s_list = list(input().split())
all_list.append(s_list)
except:
break
▲此外有些不定行输入也可能不是输入成多行,可能是输入成一个很长的str,然后中间用空格之列的隔开。由于自测一般给的例子很简单比较坑,所以如果一直报错或者跑不过去可以考虑是否是这个原因。 ? ?
三、输出中的一些坑
1、一行输出一个值
正常用print()就行,如print(result)
2、一行输出多个值
这个在平时接触的可能比较少,需要在一行打印n个值,然后用空格分割开,这里提供一个方法。
ret = []
for i in range(m):
if i < m-1:
print(ret[i],end=' ')
else:
print(ret[i])
参考连接: 1、牛客网 多行输入输出问题 Python3 模板样例
|