使用python 3 处理输入和输出数据问题

算法岗笔试的编程题往往是规定输入输出格式的。并且为了在线测试通过,得严格遵守示例的输入输出格式。

大致总结了以下几种情况,以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)即可,如需逗号分隔同理

你可能感兴趣的:(Python学习)