鱼C论坛

 找回密码
 立即注册
查看: 3290|回复: 7

[已解决]Python问题求助

[复制链接]
发表于 2020-12-4 20:14:18 | 显示全部楼层 |阅读模式
30鱼币
利用Python建立一个excel文件,该文件包含(学生姓名,语文成绩,数学成绩,英语成绩):
1)统计每个学生的平均分及排名,添加到最后的列
2)统计所有学生各科平均分,添加到最后行


代码我写了一半,但是排名和每课的平均分不会算,求大佬帮助
最佳答案
2020-12-4 20:14:19
  1. import xlwt

  2. data = [
  3.     ["小花",99,100,98.5],#1
  4.     ["小王",90,30.5,95],#
  5.     ["小明",67.5,49.6,88],
  6.     ["大佬",38,93,66],
  7.     ["花花",60,49,88],
  8.     ["天天",67,46,80],
  9.     ["阿明",75,96,68],
  10.     ["阿炳",44,55,77],
  11.     ["阿冰",66,88,77],
  12.     ["大梦",100,100,100]#
  13. ]

  14. def build_data(source):
  15.     for item in source:
  16.         sum_score = sum(item[1:])#算总分
  17.         avg_score = round(sum_score / 3,1) #算平均分,round取两位小数
  18.    
  19.         item.append(avg_score)

  20.     return source

  21. def build_sort(target):
  22.     target_list = list()
  23.     for item in target:        
  24.         target_list.append(item)

  25.     target_list.sort(key = lambda x: x[-1], reverse=True)
  26.     result = dict()
  27.     for row, item in enumerate(target_list, 1):
  28.         result[item[0]] = row

  29.     return result

  30. def append_sort(data):
  31.     source = build_data(data)
  32.     dict_sort = build_sort(source)

  33.     for item in source:
  34.         item.append(dict_sort[item[0]])

  35.     return source

  36. def last_row(source):
  37.     result = ['平均分', 0, 0, 0, 0, '']
  38.     row = 0
  39.     for item in source:
  40.         row += 1
  41.         row_list = item[1 : -1]
  42.         for col, col_item in enumerate(row_list, 1):
  43.             result[col] += col_item

  44.     for col, item in enumerate(result[1 : -1], 1):
  45.         item = round(item / row, 1)
  46.         result[col] = item
  47.    
  48.     return result
  49.    
  50. def build_excel(data):
  51.     result = append_sort(data)
  52.     last_line = last_row(result)
  53.     result.append(last_line)

  54.     book = xlwt.Workbook()
  55.     sheet = book.add_sheet("学生成绩")
  56.     title = ['姓名','语文成绩','数学成绩','英语成绩','平均分','排名']

  57.     for col, item in enumerate(title):
  58.         sheet.write(0, col, item)

  59.     for row, line in enumerate(result, 1):     
  60.         for col, value in enumerate(line):
  61.             sheet.write(row, col, value)

  62.     book.save("students.xls")  

  63. if __name__ == '__main__':
  64.     build_excel(data)
复制代码

练习.rar

670 Bytes, 下载次数: 7

我写的部分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-4 20:14:19 | 显示全部楼层    本楼为最佳答案   
  1. import xlwt

  2. data = [
  3.     ["小花",99,100,98.5],#1
  4.     ["小王",90,30.5,95],#
  5.     ["小明",67.5,49.6,88],
  6.     ["大佬",38,93,66],
  7.     ["花花",60,49,88],
  8.     ["天天",67,46,80],
  9.     ["阿明",75,96,68],
  10.     ["阿炳",44,55,77],
  11.     ["阿冰",66,88,77],
  12.     ["大梦",100,100,100]#
  13. ]

  14. def build_data(source):
  15.     for item in source:
  16.         sum_score = sum(item[1:])#算总分
  17.         avg_score = round(sum_score / 3,1) #算平均分,round取两位小数
  18.    
  19.         item.append(avg_score)

  20.     return source

  21. def build_sort(target):
  22.     target_list = list()
  23.     for item in target:        
  24.         target_list.append(item)

  25.     target_list.sort(key = lambda x: x[-1], reverse=True)
  26.     result = dict()
  27.     for row, item in enumerate(target_list, 1):
  28.         result[item[0]] = row

  29.     return result

  30. def append_sort(data):
  31.     source = build_data(data)
  32.     dict_sort = build_sort(source)

  33.     for item in source:
  34.         item.append(dict_sort[item[0]])

  35.     return source

  36. def last_row(source):
  37.     result = ['平均分', 0, 0, 0, 0, '']
  38.     row = 0
  39.     for item in source:
  40.         row += 1
  41.         row_list = item[1 : -1]
  42.         for col, col_item in enumerate(row_list, 1):
  43.             result[col] += col_item

  44.     for col, item in enumerate(result[1 : -1], 1):
  45.         item = round(item / row, 1)
  46.         result[col] = item
  47.    
  48.     return result
  49.    
  50. def build_excel(data):
  51.     result = append_sort(data)
  52.     last_line = last_row(result)
  53.     result.append(last_line)

  54.     book = xlwt.Workbook()
  55.     sheet = book.add_sheet("学生成绩")
  56.     title = ['姓名','语文成绩','数学成绩','英语成绩','平均分','排名']

  57.     for col, item in enumerate(title):
  58.         sheet.write(0, col, item)

  59.     for row, line in enumerate(result, 1):     
  60.         for col, value in enumerate(line):
  61.             sheet.write(row, col, value)

  62.     book.save("students.xls")  

  63. if __name__ == '__main__':
  64.     build_excel(data)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-4 20:23:56 | 显示全部楼层
思路
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、统计所有学生各科平均分
每个学生的单科成绩相加除以学生总数不就是了?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-4 21:37:14 | 显示全部楼层
你这种需求,用pandas很容易实现。。。。。。。干嘛要用xlwt
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-5 05:31:06 | 显示全部楼层
先全部在内存里操作
用字典或者元组对象代替数据行 整个表的数据是一个对象列表
全部计算完毕再整体(逐行)写入文件


比如  data = [('姓名','学号'),('张三','112'),('李四','132')]
计算平均分之后 data为 [('姓名','学号'),('张三','112'),('李四','132'),('平均分','122')]
for data : writerow()   然后再该标红的标红啥的

不要先写入电子表格文件了再操作表格 毕竟你没用pandas
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-5 12:51:31 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-5 13:27:33 | 显示全部楼层

对了,我想问一下,这句target_list.sort(key = lambda x: x[-1], reverse=True)是干什么的,里面的key这些没看懂
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-5 14:16:32 | 显示全部楼层
段段努力秃头 发表于 2020-12-5 13:27
对了,我想问一下,这句target_list.sort(key = lambda x: x[-1], reverse=True)是干什么的,里面的key这 ...

按照 list 的最后一列进行(平均分)排序, x[-1]表示最后一项
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-30 17:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表