Skip to content

File read write


1. 常规读入输出

我们常规读入和输出用的是 input()print():

n = int(input())
li = list(map(int, input().split())) # 读入一行数,存储到列表
print('Hello world')
print(li[0])

2. 格式化字符串

f 作为前缀的字符串可以将其中花括号中的内容自动转换:

n = 123
m = 1234
s = f'{n} + {m} = {n + m}'
# 现在 s 就是 '123 + 1234 = 1357' 了,太神奇了

这种字符串叫做格式化字符串。

3. 文件输入输出

USACO 比赛中用不上,但是平时可能有用。

# 这里新建了一个变量 fin,后面 open 表示打开文件,'1.in' 是文件名,'r' 表示要读入
# 必须保证 1.in 与 python 源文件在同一个文件夹下哦
fin = open('1.in', 'r')
# 'w' 表示要输出
fout = open('1.txt', 'w')

# 接下来就是把 input() 换成 fin.readline(),从文件中读入
n = int(fin.readline())
li = list(map(int, fin.readline().split()))
# 如果要输出到文件,那么可以用格式化字符串 
fout.write('Hello world\n')
fout.write(f'{li[0]}\n')

4. 如何用 USACO test data 自行评测

打开形如这样的地址下载题目的 test data,你可以把下面这行的 jan22 改成 dec21 之类的来切换比赛:

http://www.usaco.org/index.php?page=jan22results

下载完以后解压得到 1.in 1.out 2.in 2.out 等文件。

其中 1.in 1.out 表示第一个测试点的输入数据和标准答案。你可以在运行 python 的时候复制粘贴,也可以用文件读入输出。

fout = open('1.txt', 'w')
# ... 下面输出到 1.txt 中

输出到 1.txt 后,你可以在终端使用 diff 命令比较两个文件。

diff 1.txt 1.out

如果你的答案和标准答案一样,那么 diff 命令不会有任何输出。如果不一样,他就会告诉你哪里不一样,例如:

$ diff 2.out 2.txt
1c1
< hello world: 58
---
> hello world: 59
\ No newline at end of file