Python 笔试输入模板总结
1. 普通单行输入
适合输入一个整数:
n = int(input())
适合输入一行多个整数:
a, b = map(int, input().split())
适合输入一个数组:
arr = list(map(int, input().split()))
2. 推荐笔试模板:sys.stdin.readline
适合大多数有明确行结构的题。
import sys
input = sys.stdin.readline
读一个整数:
n = int(input())
读一行多个整数:
a, b = map(int, input().split())
读数组:
arr = list(map(int, input().split()))
读 n 行数据:
n = int(input())
for _ in range(n):
a, b = map(int, input().split())
读多组测试数据:
T = int(input())
for _ in range(T):
n = int(input())
arr = list(map(int, input().split()))
3. EOF 输入:每行一组数据
适合题目没有给 T,一直读到输入结束。
输入示例:
1 2
3 4
10 20
模板:
import sys
for line in sys.stdin:
if not line.strip():
continue
a, b = map(int, line.split())
print(a + b)
4. EOF 输入:所有数字连续处理
适合不关心换行,只按数字顺序处理。
输入示例:
1 2
3 4
10 20
模板:
import sys
data = list(map(int, sys.stdin.read().split()))
for i in range(0, len(data), 2):
a = data[i]
b = data[i + 1]
print(a + b)
5. 没有固定行数,每组第一个数表示长度
输入示例:
3 1 2 3
2 4 5
4 6 7 8 9
表示:
长度3:1 2 3
长度2:4 5
长度4:6 7 8 9
模板:
import sys
data = list(map(int, sys.stdin.read().split()))
idx = 0
while idx < len(data):
n = data[idx]
idx += 1
arr = data[idx:idx + n]
idx += n
print(arr)
6. 数组可能分多行输入
如果题目说输入 n 个整数,但不保证在同一行。
输入示例:
5
1 2
3 4
5
模板:
import sys
data = list(map(int, sys.stdin.read().split()))
n = data[0]
arr = data[1:1 + n]
print(arr)
如果后面还有其他数据,用指针写法:
import sys
data = list(map(int, sys.stdin.read().split()))
idx = 0
n = data[idx]
idx += 1
arr = data[idx:idx + n]
idx += n
7. 操作类题目
输入示例:
5
1 8
1 9
7
1 6
8
模板:
import sys
input = sys.stdin.readline
q = int(input())
for _ in range(q):
op = list(map(int, input().split()))
if op[0] == 1:
pass
elif op[0] == 2:
pass
8. 输出优化
如果输出很多行,建议先存起来,最后一次性输出。
ans = []
ans.append(str(123))
ans.append(str(456))
print("\n".join(ans))
例如:
import sys
input = sys.stdin.readline
q = int(input())
ans = []
for _ in range(q):
x = int(input())
ans.append(str(x * 2))
print("\n".join(ans))
记忆口诀
小数据:input()
大多数笔试:sys.stdin.readline()
读到 EOF:for line in sys.stdin
不管换行:sys.stdin.read().split()
输出很多:先存 ans,最后 join