python3中使用sys.stdin.readline()可以实现标准输入,默认输入的格式是字符串,如果是int,float类型则需要强制转换。

以牛客网的一些题目为例说明其中部分函数的用法:

两数之和:

class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        res = []
        dic = {}
        for i in range(len(numbers)):
            tmp = target - numbers[i]
            if tmp in dic:
                return [dic[tmp]+1,1+i]
            dic[numbers[i]] = i
            
while True:
    try:
        import sys
        s = Solution()
        line = str(sys.stdin.readline().strip())
        target = int(line.split(',')[-1])
        numbers = list(map(int, line.split(']')[0].split('[')[-1].split(',')))
        res = s.twoSum(numbers, target)
        print('[%d,%d]'%(res[0],res[1]))
    except:
        break

1、sys.stdin.readline()
用法:

import sys
line1 = sys.stdin.readline()
inputs =  line1
print("input:",inputs)

结果:

输入一个变量
input: 输入一个变量

当输入的变量中存在空格的时候:

输入一个变量
input:      输入一个变量

当输入的变量中存在标点符号的时候:

输入一个变量,,,。
input:        输入一个变量,,,。

使用sys.stdin.readline() 输入的时候,无论输入的是什么都会出现在结果中,甚至是结尾的结束符标志的换行sys.stdin.readline()会将标准输入全部获取,包括末尾的’n’。

输入一个变量,,,,。。
input:        输入一个变量,,,,。。

而input不会将结尾的换行输入。

但有时候使用sys.stdin.readline()并不希望输出的结果中有换行。
这时候可以使用:

sys.stdin.readline().strip()

strip() 用于去除字符串首尾的字符。包括\n, \t, 等。
split() 用于在空白处拆分,并将行拆分为字符串列表。

import sys
line1 = sys.stdin.readline().split()
inputs =  line1
print("input:",inputs)
输入一个变量
input: ['输入一个变量']

当然也可以在‘,’处拆分。只需要split(‘,’)

import sys
line1 = sys.stdin.readline().strip().split(',')
inputs =  line1
print("input:",inputs)
1,2,3,4,5,6,7
input: ['1', '2', '3', '4', '5', '6', '7']

不加strip().split(’,’)的结果:

1,2,3,4,5,6,7  
input: 1,2,3,4,5,6,7

为了让输入的变量变成列表:

import sys
line1 = sys.stdin.readline().strip().split(',')
inputs = list(map(int,line1))
print("input:",inputs)
1,2,3,4,5,6,7,8
input: [1, 2, 3, 4, 5, 6, 7, 8]

如此:上例中的:
line.split(’]’)[0].split(’[’)[-1].split(’,’)
原理为,将输入的输入,按照[, ], ,处进行分离,其中‘[’后面跟着[-1],是在最左边的‘[’处分离。
‘]’后面的[0],是在最右边的‘]’处分离。‘,’是按照‘,’处开始分离。

上面实例中输入的是:
【1,2,3,4,5,6,7】

import sys
line = sys.stdin.readline().strip()
inputs =  list(map(int, line.split(']')[0].split('[')[-1].split(',')))
print("input:",inputs)

结果:

[1,2,3,4,5,6,7]
input: [1, 2, 3, 4, 5, 6, 7]

输出的结果为一个list并非字符串。
注意:

list(map(int, line.split(']')[0].split('[')[-1].split(',')))

.split(’,’)必须放在最后面
否则会报错。例如:

import sys
line = sys.stdin.readline().strip()
inputs =  list(map(int, line.split(',').split(']')[0].split('[')[-1]))
print("input:",inputs)
line 3, in <module>
inputs =  list(map(int, line.split(',').split(']')[0].split('[')[-1]))
AttributeError: 'list' object has no attribute 'split'

2、sys.stdin.readlines()
相比于sys.stdin.readline(),sys.stdin.readlines()可以一次读取多行数据,以control+D结束输入。

注意: control+D所在的一行并不会输入到目标变量中,因此,若想结束时应先\n(Enter)输入的最后一行,再使用control+D结束。否则,就会出现如下:

输入一个变量
    输入一个变量
         输入一个变量,,,,。。^D
input: ['输入一个变量\n', '    输入一个变量\n']

正确的结果:

输入一个变量
    输入一个变量
         输入一个变量,,,,。。
^D
input: ['输入一个变量\n', '    输入一个变量\n', '         输入一个变量,,,,。。\n']