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']