交作业统计。随机生成50个学号范围在41830001~41830050的作业文件 其中第1次作业文件命名如下:zy1=[41830001-1py41830002-1py,…41830050-1py],第2次作业以此类推:zy2=[41830001-2py,…]。去除重复的数据后统计并输出两次作业都交了的同学的学号;至少交了一次作业的同学有哪些?哪些同学只交了一次作业?只交了第一次作业的同学有哪些?
时间: 2024-02-13 11:07:33 浏览: 76
好的,我明白了你的问题。根据你的要求,我可以编写一个 Python 程序来生成作业文件并统计。以下是程序代码:
```python
import random
# 生成文件名
def generate_filename(n, i):
return 'zy{}=['.format(i) + ','.join(['{}-{}py'.format(j, i) for j in range(41830001, 41830001+n)]) + ']'
# 生成作业文件
def generate_files():
for i in range(1, 3):
n = 50
data = set()
with open(generate_filename(n, i), 'w') as f:
for j in range(n):
while True:
x = random.randint(41830001, 41830050)
if x not in data:
data.add(x)
break
f.write('{}\n'.format(x))
# 统计作业情况
def count_homework():
zy1 = set()
zy2 = set()
with open('zy1.txt', 'r') as f:
for line in f:
zy1.add(int(line.strip()))
with open('zy2.txt', 'r') as f:
for line in f:
zy2.add(int(line.strip()))
both = zy1 & zy2
at_least_one = zy1 | zy2
only_one_zy1 = zy1 - zy2
only_one_zy2 = zy2 - zy1
print('两次作业都交了的同学的学号:', both)
print('至少交了一次作业的同学的学号:', at_least_one)
print('只交了第一次作业的同学的学号:', only_one_zy1)
print('只交了第二次作业的同学的学号:', only_one_zy2)
if __name__ == '__main__':
generate_files()
count_homework()
```
程序中首先定义了两个函数 `generate_files` 和 `count_homework`。`generate_files` 函数用于生成作业文件,`count_homework` 函数用于统计作业情况。程序将生成两个作业文件,每个文件包含50个学号,学号范围在 41830001~41830050 之间。每个学号只会在两个作业文件中出现一次,因此不存在重复的学号。
生成作业文件后,程序读取文件中的学号数据,并用集合进行处理。根据题目要求,程序统计两次作业都交了的同学的学号、至少交了一次作业的同学的学号、只交了第一次作业的同学的学号、只交了第二次作业的同学的学号,并输出结果。
注意:程序执行时会生成两个作业文件 zy1.txt 和 zy2.txt,如果你已经生成过这两个文件,再次执行程序时会覆盖原文件,请注意备份。
阅读全文