0. stdin()运行方式:
- 在pycharms中保存.py文件运行,在4.run中输入
- 在spyder就不可以
- 在Ipython中可以
- 在jupyternotebook中需要特殊处理:使用python3的 io模块的StringIO将字符串替换成sys.stdin
1. input()方法和stdin()区别
strip()
用于字符串头部和尾部的指定字符串,默认为空格或换行符。
split()
是拆分字符串,然后把分割之后的字符串放到一个列表里并返回。默认情况下是根据换行符"\n"和空格" ",以及“\t”进行分割。
input()
方法和stdin()
类似,不同的是input()
括号内可以直接填写说明文字。sys.stdin.readline( )
会将标准输入全部获取,包括末尾的'\n'
,因此用len计算长度时是把换行符'\n'
算进去了的,但是input( )获取输入时返回的结果是不包含末尾的换行符'\n'
的。因此如果在平时使用sys.stdin.readline( )
获取输入的话,不要忘了去掉末尾的换行符,可以用strip( )函数(sys.stdin.readline( ).strip('\n'))或sys.stdin.readline( )[:-1]这两种方法去掉换行。
2.总结(两种方案)
1.接收字符
line=input().split()#空格隔开
line=sys.stdin.readline().split()
2.接收数值
line = sys.stdin.readline().split()
line = [int(x) for x in line ]
line=list(map(int,input().split()))
3.不确定行的输入
ans=[]
for line in sys.stdin:
l1 = list(map(int,line.split()))
#或者
#l1 = list(map(int,input().split()))
ans.append(l1)
while True:
try:
l1=list(map(int,sys.stdin.readline().split()))
#或者
#l1=list(map(int,input().split()))
ans.append(l1)
except:
break
第二种可以在ipython输入,输完后按ctrl+c结束,但是第一种不知道怎么结束输入。
4.确定行的输入
for line in sys.stdin
l1 = list(map(int,line.split()))
temp = line.split()
t = int(input())
ans= []
for i in range(0,t):
l1=list(map(int,sys.stdin.readline().split()))
#l1=list(map(int,input().split()))
ans.append(l1)
3.OJ在线编程常见输入输出练习场
题目1:计算a+b
输入: 输入包括两个正整数a,b(1 <= a, b <= 10^9), 输入数据包括多组。
1 5
10 20
输出: 输出a+b的结果
6
30
while True:
try:
a,b=map(int,input().strip().split())
print(a+b)
except:
break
import sys
for line in sys.stdin:
a, b = list(map(int, line.split()))
#a,b=[1,2] a=1,b=2
print(a+b)
题目2: 计算a+b
输入: 输入 第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 10^9)
2
1 5
10 20
输出: 输出a+b的结果
6
30
t = int(input())
a = []
for i in range(0,t):
a = list(map(int,input().split()))
print(sum(a))
import sys
for line in sys.stdin:
if len(line.split())==1:
continue
print(sum(list(map(int,line.split()))))
题目3: 计算a+b
输入: 输入包括两个正整数a,b(1 <= a, b <= 10^9), 输入数据有多组, 如果输入为0 0则结束输入
1 5
10 20
0 0
输出: 输出a+b的结果
6
30
while True:
a,b=map(int,input().split())
if a==0 and b==0:
break
else:
print(a+b)
import sys
for line in sys.stdin:
a = list(map(int, line.strip().split()))
#a = line.strip().split()
#a = [int(x) for x in a ]
if a==[0,0]:
break
print(sum(a))
题目4: 计算一系列数的和
输入: 输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
4 1 2 3 4
5 1 2 3 4 5
0
输出: 每组数据输出求和的结果
10
15
while True:
l1 = list(map(int,input().split()))
if l1[0] == 0:
break
print(sum(l1[1:]))
import sys
for line in sys.stdin:
l1 = list(map(int,line.split()))
if l1[0] == 0:
break
print(sum(l1[1:]))
题目5: 计算一系列数的和
输入: 输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
接下来t行, 每行一组数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
2
4 1 2 3 4
5 1 2 3 4 5
输出: 每组数据输出求和的结果
10
15
t = int(input())
a = []
for i in range(0,t):
a = list(map(int,input().split()))
print(sum(a[1:]))
import sys
num = input()#人为地规定输入几行,这时sys.stdin就有几行
for line in sys.stdin:
a = list(map(int, line.split()))
a = a[1:]
print(sum(a))
题目6: 计算一系列数的和
输入: 输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
4 1 2 3 4
5 1 2 3 4 5
输出: 每组数据输出求和的结果
10
15
while True:
try:
l1 = list(map(int,input().split()))
print(sum(l1[1:]))
except:
break
import sys
for line in sys.stdin:
a = list(map(int, line.split()))
a = a[1:]
print(sum(a))
题目7: 计算一系列数的和
输入: 输入数据有多组, 每行表示一组输入数据。
每行不定有n个整数,空格隔开。(1 <= n <= 100)。
1 2 3
4 5
0 0 0 0 0 0
输出: 每组数据输出求和的结果
6
9
0
while True:
try:
l1 = list(map(int,input().split()))
print(sum(l1))
except:
break
import sys
for line in sys.stdin:
a = list(map(int, line.split()))
print(sum(a))
题目8: 对输入的字符串进行排序后输出
输入: 输入有两行,第一行n
第二行是n个空格隔开的字符串
5
c d a bb e
输出: 输出一行排序后的字符串,空格隔开,无结尾空格
a bb c d e
n=int(input())
l=input().split()
l.sort()
print(' '.join(l))#将序列中的元素以指定的字符(空格)连接生成一个新的字符串
import sys
n = input()
for line in sys.stdin:
temp = line.split()
print(" ".join(sorted(temp)))
题目9: 对输入的字符串进行排序后输出
输入: 多个测试用例,每个测试用例一行。
每行通过空格隔开,有n个字符,n<100
a c bb
f dddd
nowcoder
输出: 对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
a bb c
dddd f
nowcoder
while True:
try:
l=input().split()
l.sort()
print(' '.join(l))
except:
break
import sys
for line in sys.stdin:
temp = line.split()
print(" ".join(sorted(temp)))
题目10: 对输入的字符串进行排序后输出
输入: 多个测试用例,每个测试用例一行。
每行通过,隔开,有n个字符,n<100
a,c,bb
f,dddd
nowcoder
输出: 对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
a,bb,c
dddd,f
nowcoder
while True:
try:
l=input().split(',')#输入规范,首尾无空格
l.sort()
print(','.join(l))
except:
break
import sys
for line in sys.stdin:#line默认以空格隔开
# strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
temp = line.strip().split(',')
print(','.join(sorted(temp)))