写一个python脚本接受两个文件名参数,先对比两个文件中的总行数,如果不同则报错退出,如果相同则翻转第二个文件后逐行对比,如果发现不同则输出其第一个文件的行号。

也不需要想队列和堆,直接list然后反转后遍历。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env python3

import sys

file1_name = sys.argv[1]
file2_name = sys.argv[2]
file1 = []
file2 = []
with open(file1_name) as f1:
for line in f1:
if not line:
continue
file1.append(line.strip())
with open(file2_name) as f2:
for line in f2:
if not line:
continue
file2.append(line.strip())

if len(file1) != len(file2) :
print(f"Not mirrored: different number of lines: {len(file1)} versus {len(file2)}")
sys.exit(0)

file2=file2[::-1]

for i in range(len(file1)):
if file1[i] != file2[i]:
print(f"Not mirrored: line {i+1} different")
sys.exit(0)

print("Mirrored")

针对特定的奖项,找出它的“最早获奖年份(Min)”和“最晚获奖年份(Max)”。然后在这个 [Min, Max] 的闭区间内,找出所有没有颁发该奖项的年份,并输出。

脚本接收两个位置参数:

$1:一个用于匹配奖项名称的正则表达式(Regex)。

Read more »

因为提到了作为头和尾的nm都是不会变的,所以有两种办法。

第一种是用等差数列求和公式,期望的从n到m之和对比目前实际和和之差就是缺省的数。

第二种方法是排序之后从最小的数遍历,如果当前数和期望的数不一致,那么就输出期望的数,然后期望的数加一,继续遍历,如果一致,就期望的数加一,继续遍历。

Read more »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env python3
import sys

def main():
# 使用集合 (set) 自动处理去重需求
male_surnames = set()

# sys.stdin 允许直接遍历标准输入流,每次迭代读取一行
for line in sys.stdin:
# 去除行末尾的换行符和潜在的空白字符
line = line.strip()
if not line:
continue

# 等效于 cut -d'|'
fields = line.split('|')

# 确保数据格式正确且最后一个字段为 'M' (等效于 grep '|M$')
if len(fields) == 5 and fields[4] == 'M':
# 提取姓名列 (0-based index, 第3列索引为2)
name_field = fields[2]

# 等效于 cut -d',' -f1
surname = name_field.split(',')[0].strip()

# 存入集合自动去重
male_surnames.add(surname)

# sorted() 将无序集合转换为按字母表排序的列表
for surname in sorted(male_surnames):
print(surname)

if __name__ == '__main__':
main()

一、 读题与需求拆解

1. 数据结构分析:
输入数据通过标准输入 (< enrollments.txt) 传入,为标准的管道符 | 分隔文件,共 5 个字段。
例如:COMP1917|3360379|Costner, Kevin Augustus |3978/1|M

  • 字段 3 (Name):内部具有二级结构,格式为 [Surname], [First Names]
  • 字段 5 (Gender):标识性别,男性为 M
Read more »

数据结构分析

目标文件 awards.psv 为管道符分隔的文本文件(Pipe-Separated Values),每行包含 6 个字段,结构如下:
Award Name | Award Year | Winner Name | Winner Gender | Winner Country | Winner Birth Year


Read more »
0%