import xlrd
import xlwt
import matplotlib.pyplot as plt
import numpy as np

正常显示中文

plt.rcParams[‘font.sans-serif’] = [‘SimHei’]

读取

temp = xlrd.open_workbook(‘a.xlsx’)
table = temp.sheets()[0]
now = table.nrows
nol = table.ncols

写入(如果利用xlutils可以实现写入到已有文件)

wb = xlwt.Workbook()
ws = wb.add_sheet(‘sheet1’)
dict1 = {} # 全部信息(字典
list1 = [] # 全部信息(列表
list2 = [] # 某学生的成绩信息
list3 = [] # 另一学生的成绩信息
gks1 = [0, 0, 0, 0] # 定义并初始化挂科的数量的列表
gks2 = {‘英语’: 0, ‘高数’: 0, ‘大学物理’: 0} # 各科挂科
level = {‘优秀’: 0, ‘良好’: 0, ‘及格’: 0, ‘不及格’: 0} # 各个等第的人数

函数create用来遍历读取的文件

def create(x, y):
title = table.cell_value(0, y)
value = table.cell_value(x, y)
dict1[title] = value

遍历读取,并添加键值对

for i in range(1, now):
for j in range(0, nol):
create(i, j)

如果给列表添加的是dict1,列表拷贝的只是字典的地址,递归结束以后列表只有最后一个学生的成绩

list1.append(dict1.copy())

for i in range(0, now-1, 1):
# 统计学生挂科数并添加键值对到字典dict1
gk1 = 0
for k, v in list1[i].items():
if k != ‘姓名’:
if v < 60:
gk1 += 1
list1[i].update(挂科=gk1)
if list1[i][‘挂科’] == 1:
gks1[1] += 1
elif list1[i][‘挂科’] == 2:
gks1[2] += 1
elif list1[i][‘挂科’] == 3:
gks1[3] += 1
else:
gks1[0] += 1
# 统计学科挂科数
gk2 = 0
for k, v in list1[i].items():
if k == ‘英语’ and v < 60:
gks2[‘英语’] += 1
if k == ‘高数’ and v < 60:
gks2[‘高数’] += 1
if k == ‘大学物理’ and v < 60:
gks2[‘大学物理’] += 1

统计学生学业等第

for t in range(0, now-1, 1):
list1[t].update(总分=list1[t][‘英语’]+list1[t][‘高数’]+list1[t][‘大学物理’])
if ‘挂科’ in list1[t]:
if list1[t][‘总分’] > 250 and list1[t][‘挂科’] == 0:
level[‘优秀’] += 1
elif list1[t][‘总分’] > 220 and list1[t][‘挂科’] <= 1:
level[‘良好’] += 1
elif list1[t][‘总分’] > 180 and list1[t][‘挂科’] <= 2:
level[‘及格’] += 1
else:
level[‘不及格’] += 1

写入学生成绩,先写入第一行信息,在依次输入剩下信息

a = 0
for k, v in list1[0].items():
ws.write(0, a, k)
ws.write(1, a, v)
a += 1
for i in range(2,now,1):
a = 0
for k in list1[i-1].items():
ws.write(i, a, k[1])
a += 1
wb.save(‘a2.xls’)

成绩分布柱状图

plt.figure()
name_list = [‘优秀’, ‘良好’, ‘及格’, ‘不及格’]
num_list = [level[‘优秀’], level[‘良好’], level[‘及格’], level[‘不及格’]]
plt.xlabel(‘成绩区间’)
plt.ylabel(‘人数’)
plt.title(‘等第图’)
total_width = 1
width = total_width/2
plt.bar(range(len(num_list)), num_list, color=‘rgb’, tick_label=name_list)
for xx, yy in zip(range(len(num_list)),num_list):
plt.text(xx, yy+0.1, str(yy), ha=‘center’)
plt.show() # 显示图表

并列显示任意两位学生成绩对比图

plt.figure() # 擦除,便于下一次重画图表
name_list2 = [‘英语’, ‘高数’, ‘大学物理’]
stu1 = str(input(‘请输入学生姓名’))
stu2 = str(input(‘请输入学生姓名’))
for i in range(0, now-1, 1):
if list1[i][‘姓名’] == stu1:
for j in range(0, now - 1, 1):
if list1[j][‘姓名’] == stu2:
list2 = [list1[j][‘英语’]] + [list1[j][‘高数’]] + [list1[j][‘大学物理’]]
list3 = [list1[i][‘英语’]] + [list1[i][‘高数’]] + [list1[i][‘大学物理’]]
x = list(range(len(name_list2)))
plt.bar(x, list2, width=0.3, label=stu2, fc=‘y’)
for i in range(len(x)):
x[i] = x[i] + 0.2
plt.bar(x, list3, width=0.3, label=stu1, tick_label=name_list2, fc=‘r’)
plt.ylabel(‘分数’)
plt.title(‘对比图’)
plt.legend()
plt.show()
print(‘学生成绩列表’, list1)
print(‘挂科数目统计’, gks1)
print(‘学科挂科情况’, gks2)
print(‘等第’, level)

安徽科技学院 信网学院网络文化节 房辉相关推荐

  1. 安徽科技学院 信网学院网络文化节 王鑫

    基于Python的文本分词与词云生成--以QQ群聊天记录为例 导入词云制作库wordcloud.中文分词库jieba和re模块等 import wordcloud import jieba impor ...

  2. 安徽科技学院 信网学院网络文化节 孙晓楠

    package CompetitionSXN; import java.util.Scanner; import java.util.regex.Pattern; public class BaseT ...

  3. 安徽科技学院 信网学院网络文化节 刁广

    文件1----javabean package com.game.card; public class card { private String[] card = new String[5000]; ...

  4. 安徽科技学院 信网学院网络文化节 张乐

    #include <stdio.h> #include <windows.h> //获取标准输出.入句柄 HANDLE hOut = NULL; HANDLE hIn = NU ...

  5. 安徽科技学院 信网学院网络文化节 朱翔

    import time import random while 1: print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") print("O( ...

  6. 安徽科技学院 信网学院网络文化节 李彤彤

    #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 100 ///全局变量 st ...

  7. 安徽科技学院 信网学院网络文化节 赵涛

    package wwww; //包名不同记得在这里改包名 /** @Describe:此程序可以自己写一个名单,一个名字一行,特别功能:如果在名字末尾加@, 如 张三@ 则随机点名的时候会默认把张三排 ...

  8. 安徽科技学院 信网学院网络文化节 胡鑫

    import sys sys.setrecursionlimit(1000000000) import tkinter import tkinter.messagebox from tkinter i ...

  9. 安徽科技学院 信网学院网络文化节 刘洪江

    import sys import time books = [{'name': '红楼梦', 'author': ' 曹雪芹', 'price': '19.9'}, {'name': '西游记', ...

最新文章

  1. 阿里云免费开放一切AI算力,加速新型冠状病毒新药和疫苗研发
  2. 深度学习 | 三个概念:Epoch, Batch, Iteration
  3. Alex学Ruby[详解 block和Proc对象]
  4. Something haunts me in Python
  5. install scrapy with pip and easy_install
  6. 55种网页常用小技巧(转载)
  7. java程序猿面试问缺点怎么回答_JAVA程序员面试32问,你能回答多少题
  8. 重写到边缘–充分利用它! 在GlassFish上!
  9. d9900 修改ip 思科dcm_思科设备SSH登陆详细配置过程
  10. 如何用python的i2c教程_Micropython TPYBoard I2C的用法
  11. 每周进步要点(第50周12.4-12.11)
  12. java 日期格式 毫秒
  13. 【翻译】CryEngine3下的Hair Shader
  14. 移植Andorid4.0.4 - 步骤及问题汇总
  15. mysql中整理设置__MySQL的常用操作命令整理
  16. chrome浏览器清理缓存也没有用,每次必须重启怎么办?
  17. c语言:四位数为AABB些型,并且是另一个书的平方,求这昂的四位数
  18. 360wifi使用方法|360wifi使用教程
  19. oracle11g迁移到DM8操作过程
  20. 谷歌浏览器默认打开网页设置

热门文章

  1. 用word制作电子公章
  2. 大专计算机网络基础试题及答案,大专计算机应用基础试卷试题及答案.docx
  3. WEB前端之ELEMENT-TABLE
  4. FAL_CLIENT和FAL_SERVER 不设置也能apply redo
  5. 工具分享:elasticsearch-7.3.1请自行下载(Linux、windows_64)(附下载链接)
  6. php打印n乘n沙漏形状图形,《算法笔记》3.3小节——入门模拟-图形输出
  7. BackTrack 5 notes
  8. 使用Flink对hudi MOR表进行离线压缩
  9. 现代密码学第一章复习题
  10. Capstone/CS5266 TYPEC拓展坞带PD快充芯片 CS5266应用说明