之前做题在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

  1. 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)
  2. sys.stdin.readline()
    需要导入内置模块sys:import sys

    2.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()