Python问题求助
利用Python建立一个excel文件,该文件包含(学生姓名,语文成绩,数学成绩,英语成绩):1)统计每个学生的平均分及排名,添加到最后的列
2)统计所有学生各科平均分,添加到最后行
代码我写了一半,但是排名和每课的平均分不会算,求大佬帮助 import xlwt
data = [
["小花",99,100,98.5],#1
["小王",90,30.5,95],#
["小明",67.5,49.6,88],
["大佬",38,93,66],
["花花",60,49,88],
["天天",67,46,80],
["阿明",75,96,68],
["阿炳",44,55,77],
["阿冰",66,88,77],
["大梦",100,100,100]#
]
def build_data(source):
for item in source:
sum_score = sum(item)#算总分
avg_score = round(sum_score / 3,1) #算平均分,round取两位小数
item.append(avg_score)
return source
def build_sort(target):
target_list = list()
for item in target:
target_list.append(item)
target_list.sort(key = lambda x: x[-1], reverse=True)
result = dict()
for row, item in enumerate(target_list, 1):
result] = row
return result
def append_sort(data):
source = build_data(data)
dict_sort = build_sort(source)
for item in source:
item.append(dict_sort])
return source
def last_row(source):
result = ['平均分', 0, 0, 0, 0, '']
row = 0
for item in source:
row += 1
row_list = item
for col, col_item in enumerate(row_list, 1):
result += col_item
for col, item in enumerate(result, 1):
item = round(item / row, 1)
result = item
return result
def build_excel(data):
result = append_sort(data)
last_line = last_row(result)
result.append(last_line)
book = xlwt.Workbook()
sheet = book.add_sheet("学生成绩")
title = ['姓名','语文成绩','数学成绩','英语成绩','平均分','排名']
for col, item in enumerate(title):
sheet.write(0, col, item)
for row, line in enumerate(result, 1):
for col, value in enumerate(line):
sheet.write(row, col, value)
book.save("students.xls")
if __name__ == '__main__':
build_excel(data) 思路
1、每个学生的平均分及排名
1)计算每个学生的平均分,放入列表list1
2)list2=list1[:]# 拷贝列表
3)list2.sort() # 排序
4)
for index,i in enumerate(list2):
for j in list1:
if i == j:
index就是排名了
2、统计所有学生各科平均分
每个学生的单科成绩相加除以学生总数不就是了? 你这种需求,用pandas很容易实现。。。。。。。干嘛要用xlwt 先全部在内存里操作
用字典或者元组对象代替数据行 整个表的数据是一个对象列表
全部计算完毕再整体(逐行)写入文件
比如data = [('姓名','学号'),('张三','112'),('李四','132')]
计算平均分之后 data为 [('姓名','学号'),('张三','112'),('李四','132'),('平均分','122')]
for data : writerow() 然后再该标红的标红啥的
不要先写入电子表格文件了再操作表格 毕竟你没用pandas
XiaoPaiShen 发表于 2020-12-5 08:24
谢谢谢谢 XiaoPaiShen 发表于 2020-12-4 20:14
对了,我想问一下,这句target_list.sort(key = lambda x: x[-1], reverse=True)是干什么的,里面的key这些没看懂 段段努力秃头 发表于 2020-12-5 13:27
对了,我想问一下,这句target_list.sort(key = lambda x: x[-1], reverse=True)是干什么的,里面的key这 ...
按照 list 的最后一列进行(平均分)排序, x[-1]表示最后一项
页:
[1]