算法岗笔试的编程题往往是规定输入输出格式的。并且为了在线测试通过,得严格遵守示例的输入输出格式。
大致总结了以下几种情况,以Input和sys的readline的使用为主
1、仅需输入一个参数
直接使用Input或readline即可或者用def的方法进行操作
这两者的返回值均为str,用作数字时需转换(见2)
s=input()
import sys
s = sys.stdin.readline()
2、同一行输入几个不同的参数
例:需要获取两个参数m n
s=input()
si=s.split(' ')
n=int(si[0])
m=int(si[1])
使用map函数会更方便一些
m,n = map(int, input().split())
3、同一行输入一组参数
主要是针对批量转成需要的类型(以Int为例)
import sys
x = [int(i) for i in sys.stdin.readline().split()]
x = [int(i) for i in input().split()]
x = list(map(int , input().split()))
上面两个等价,map的用法参见:http://www.runoob.com/python/python-func-map.html
4、多行输入不同参数
一种是使用sys里的readlines另一种是多次使用input或readline
例:网易的解救小易问题,第一行输入个数,第二行第三行分别输入横纵坐标
import sys
data = sys.stdin.readlines()
#提取横纵坐标
x = [int(i) for i in data[1].split()]
y = [int(i) for i in data[2].split()]
使用Input或readline的话,直接按之前的方法多行叠加
5、输入矩阵
输入矩阵的话,需要将多行输入的数存在一个二维列表里
例:第一行输入矩阵维度n m,下面输入这个大小的矩阵
try:
n,m = map(int,input().split())
except:
break
a = []
for i in range(n):
b = list(map(int,input().split()))
a.append(b)
注:加上了try except结构,是因为在牛客网写一道矩阵操作的题目时,不加会报错输出为空,但单独调试并没有问题。目前还不清楚这是因为牛客网的bug还是说有这么写的必要。参考了很多题目的正确代码,也只有这一题大家的答案都加上了这个结构。
6、除去不必要的输入
还是以上面的解救小易问题为例,假如规定的输入数据以逗号隔开(之前一直默认空格隔开),那么需要去除掉这些逗号输入
其实也就是split的用法:http://www.runoob.com/python3/python3-string-split.html
上面的split参数一直取空,也就是按默认用空格分割且不用规定分割次数
那么直接在上面的代码中,split(',')即可
7、输出数据的处理
输出往往没有那么多情况,以join的使用为主:http://www.runoob.com/python3/python3-string-join.html
要注意的是,join只能连接字符串,所以要进行格式转换
list=[1,2,3]
print(' '.join(str(i) for i in list ))
如果在前序处理中已经转成字符串,直接使用' '
.join(list)即可,如需逗号分隔同理