要求根据id.txt和finalscore.txt生成学生成绩。文件都是utf-8格式的
1) id.txt 里面放着学号和姓名,没有排序。姓名很怪,不要在乎
2) finalscore.txt里面放着学生的做题信息。其中第三栏或第四栏是做题数量
有的学生昵称是学号,有的是姓名,有的是姓名学号都有。只要有学号或姓名,就有效
3) 分数计算办法: 1题50,2题60,此后每做一题加4分
4) 生成id.txt里面有的所有学生的成绩,按学号排序输出到指定的结果文件。
如果在 finalscore里面找不到学生的做题记录,该生题数和成绩都记0
结果文件格式如:
学号 姓名 题数 分数
1700943357 玘尜寋 0 0
1700943359 杛旺煃 0 0
1700943383 玘签翢 2 60
1700943405 陕榄伳 0 0
1700943465 匒乡奡 5 72
1700943469 巸俗杽 3 64
1700943472 钬内佦 0 0
1700943481 別珜辽 0 0
1700943523 趂盨淦 7 80
这样的结果可以导入excel表格(拷贝粘贴即可)
id.txt里面没有的学生,不用处理。
注意:源文件和目标文件里面的分隔符,都不是空格,都是制表符 \t (Tab)
注意看finalscore.txt里面,有连着两个 Tab 的情况,比如下面学号和做题数之间是2个tab:
4 1700943836 9
也许你需要关注这一点,也许并不需要
5)程序文件名必须叫count.py。运行时,将count.py和id.txt, finalscore.txt放在相同文件夹下面,
然后在命令行窗口进入该文件夹,以命令行方式运行程序,命令行中可以指定结果文件名:
python count.py XXX.txt
程序在同一个文件夹下生成结果文件XXX.txt。这个文件名可以随便指定
6)正确的结果已经给出,即ans.txt。最终生成的结果应该和ans.txt文件一致
我写的参考答案:
import re
def chazhao(x,y):
l=len(y)
for i in range(l):
if x in y[i]:
return i
return -1
def grade(a):
if a==1:
x=50
elif a==2:
x=60
elif a>2:
x=60+(a-2)*4
else:
x=0
return x
f=open('id.txt','r',encoding='utf-8')
students=f.readlines()
f.close()
students.sort()
f=open('finalscore.txt','r',encoding='utf-8')
score=f.readlines()
f.close()
f=open('grade.txt','w',encoding='utf-8')
f.write("学号\t姓名\t题数\t分数\n")
for x in students:
l=x.split()
x1,x2=l[0],l[1]
if chazhao(x1,score)!=-1 or chazhao(x2,score)!=-1:
i=chazhao(x1,score)
if i==-1:
i=chazhao(x2,score)
l1=re.split('\t',score[i])
a=int(l1[3])
agrade=grade(a)
f.write("%s\t%s\t%d\t%d\n"%(x1,x2,a,agrade))
else:
f.write("%s\t%s\t%d\t%d\n"%(x1,x2,0,0))
f.close()
郭伟老师这门课很有意思!!!特别是布置的作业,有适当的提示,都是在好好听课就能完成的前提下布置的!
比如这题里,老师写的“也许你需要关注这一点,也许并不需要”,“也许你需要关注这一点”指的是要注意有些行题数前面有大学名称,“也许并不需要”指的是用split()后,无论有没有大学名字,题数的下标都是3!
当然了,有可能是我的臆想~
ps.作业地址:
https://www.icourse163.org/learn/PKU-1460924165?tid=1463172441#/learn/hw?id=1237054853
修改了下,因为原题要求在命令行窗口运行
import re
import sys
def chazhao(x,y):
l=len(y)
for i in range(l):
if x in y[i]:
return i
return -1
def grade(a):
if a==1:
x=50
elif a==2:
x=60
elif a>2:
x=60+(a-2)*4
else:
x=0
return x
f=open('id.txt','r',encoding='utf-8')
students=f.readlines()
f.close()
students.sort()
f=open('finalscore.txt','r',encoding='utf-8')
score=f.readlines()
f.close()
f=open(sys.argv[1],'w',encoding='utf-8')
f.write("学号\t姓名\t题数\t分数\n")
for x in students:
l=x.split()
x1,x2=l[0],l[1]
if chazhao(x1,score)!=-1 or chazhao(x2,score)!=-1:
i=chazhao(x1,score)
if i==-1:
i=chazhao(x2,score)
l1=re.split('\t',score[i])
a=int(l1[3])
agrade=grade(a)
f.write("%s\t%s\t%d\t%d\n"%(x1,x2,a,agrade))
else:
f.write("%s\t%s\t%d\t%d\n"%(x1,x2,0,0))
f.close()