看到好多大佬的学习记录,受到诸多启发的同时不禁感叹人与人的差距如此之大,想起过去浪费的时间几度懊悔,好在亡羊补牢为时不晚,从今天起分享一个编程小白的学习之路。
f = open("D:\\text\sur_score.txt")
lines = f.readlines() # 读取txt文件,以数组形式返回各行内容
list = [] # 初始化一个列表list
for line in lines: # 建立一个循环,为list承接各行内容
list.append(line.replace("\t", " ").replace("\n", " ").split(" ")) # 对内容进行限定,制表符和换行符替换为空格,并以空格分割字符串
for i in range(len(list)):#建立最外层for循环,循环次数为列表长度
if list[i][3] != "":#剔除当前列表元素已经被标记的不必要循环
continue
sum = int(list[i][2])
g=1
aver = 0#初始化整型变量g:单个学生出现次数,sum:和,aver:平均值。
for j in range(i + 1, len(list)):#建立内层循环,由i+1开始,列表长度为结束
if list[i][1] == list[j][1]:#判断是否为一个学生的成绩,为累加单个学生成绩求平均值做准备
list[j][3] = "1"#对已经判定成功过的学生进行标记
sum += int(list[j][2])#累加单个学生成绩
g += 1#g代表累加次数,每次找到相同名字学生,该值加1
aver = sum / g#求出单个学生多次成绩平均分
print("学生姓名:", list[i][1], "平均成绩:", aver)#输出结果
我的思路是用嵌套循环解决问题,先把学生数据按行读取到列表里,此时列表里的第一个元素,也就是读取到的第一行数据,为
0001\taaa\t76\n
格式是: 序号\t学生姓名\t学生成绩\n
发现可以用制表符和换行符作为字符串的间隔,把我们需要的信息拆分,准确处理。
拆分后:‘0001’,‘aaa’,‘76’,‘’
把他存入列表,发现[[‘0001’,‘aaa’,‘76’,‘’],['0002','bbb','99',''].......]每个元素列表有4个元素,前三个存储了学生信息,最后一个我称作标记位,后面有用。
接下来对于列表建立循环,进行遍历(关键值i),对于标记的记录跳过不计算,如果没有标记那么进入下一层循环(关键值j),还是本列表,但是以当前记录的下一条记录为开始,进行循环。比对当前记录与后续所有记录的,也就是学生姓名一项,如果相同,那么累加次数g加1(g的初始值为1),sum加j[2](sum是单个学生多次成绩的和,初始值为本条记录的学生成绩值,也就是i[2]),同时j[3]=1,也就是之前提到的标记位置为1,做标记。该学生的平均成绩就是avg=sum/g
回到标记问题,当数组遍历时,需要一个避免对已经求过平均成绩的学生记录再次计算的手段,所以在内层循环中也就是列如第一条记录,与后续所有记录对比是否为同一人成绩时,对后续所有同名记录标记,之后在外层循环中直接对已经被标记的记录进行跳过,避免重复输出同一个学生的成绩,和节省了循环次数。最后附上程序结果

博主分享了从零开始学习编程的心路历程,通过读取txt文件,利用Python处理数据,去除制表符和换行符,并计算学生多次成绩的平均分。通过嵌套循环,对每个学生的所有成绩进行累加和平均值计算,避免重复计算,有效组织和处理了学习数据。
7万+

被折叠的 条评论
为什么被折叠?



