之前做题在leetcode上,所有的题都不需要管输入输出的问题,leetcode会把数据处理好,自己只管算法部分就可以了。直到上次做华为机试题,被狠狠地教育了一番,才意识到自己从没有在意过python的输入输出。谨以此篇几年自己的年轻。
老甘龙:蠢!!!
目前的总结可能不到位,但会慢慢丰富。
python的输入总共有3中形式,分别为input()、sys.stdin.readline()、sys.stdin.readlines(),不管是哪种方法,都可以对任何形式的输入进行处理。前两种一次只能读取一行,后面的可以直接读取多行(感觉用于文件之类的会好很多),3种的返回值均为string类型的。也就是说,即使你输入的数据是int类型的,他也会把得到的数字转化为字符串。这就需要我们自己对数据进行处理得到我们想要的数据基本类型。
数据的处理通常依赖于strip()方法和split()方法。
strip():去掉字符串首尾的指定字符,默认为换行符和空格。
split():以某个字串或者字符拆分已有的字符串,默认情况以空格拆分。
下面的代码在csdn上看到的,自己做了一点点改变。https://blog.csdn.net/K52hz/article/details/105566011
input()
1.1 读取一行输入
line = list(map(int, input().strip().split()))
1.2 读取多行输入(指定行数)
第一行为给定输入的大小,比如n行数,用n,m接收输入的大小
用list接收下面输入的矩阵n, m = map(int, input().strip().split()) lit = [] for i in range(n): lis.append(limap(int, input().strip().split()))
1.3 读取多行输入(不指定行数)
lis = [] while True: line = input().strip() if line == '': break lines = list(map(int, line.split())) lis.append(lines)
sys.stdin.readline()
需要导入内置模块sys:import sys2.1 读取一行
line = list(map(int, sys.stdin.readline().strip().split()))
2.2 读取多行
lis = [] while True: line = sys.stdin.readline().strip() if line == '': break lis.append(list(map(int, line.split())))
3.3 一次性读取多行放在一个list中,每一行为list的一个元素(这种没搜到解释,不知道对不对)
lines = sys.stdin.read().splitline()