[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ekddgu8S-1656933830306)(C:\Users\Administrator\Desktop\1.jpg)]
解法一:
csv
文件用于存放随机生成的成绩csv
文件中添加行标题–writerow()
csv
文件中csv
文件中读出几列数据存入列表中import csv
from random import randint
# 创建文件-用于存放随机生成的成绩
score=open('./成绩.csv','w',encoding='utf-8',newline='')
scores=csv.writer(score)
# 向表中添加学号 语文数学英语 四列
col=['学号','语文','数学','英语']
scores.writerow(col)
#随机生成 三门成绩
list1=[0]
for i in range(1,101):
# 格式化学号
Sno='python{:0>2}'.format(i)
Chinese=randint(0,100)
Math=randint(0,100)
English=randint(0,100)
# print(Sno,Chinese,Math,English)
# 将数据放入列表中 然后用writerow()方法写入csv文件
data_stu=[Sno,int(Chinese),Math,English]
scores.writerow(data_stu)
# print(data_stu)
score.close()
# # 文件生成完毕以后计算每科最高分、最低分,并找出分值对应学生(允许一个分值有多个学生)。
# # 从csv文件中读取数据并比较
clist,mlist,elist=[],[],[]
score_1=open('./成绩.csv','r',encoding='utf-8')
scores_1=list(csv.reader(score_1))
for i in scores_1[1:]:
print(i) #['python100', '80', '83', '89']
# 取出一列数据存入列表
clist.append(int(i[1]))
mlist.append(int(i[2]))
elist.append(int(i[3]))
print('语文成绩',clist)
print('数学成绩',mlist)
print('英语成绩',elist)
# score_1.close()
# print(elist[99],type(elist[99]))
# 比较大小
# for i in range(len(clist)):
# print(i,'#')
max_clist,min_clist,max_mlist,min_mlist,max_elist,min_elist=[],[],[],[],[],[]
for i in range(len(clist)):
if clist[i]==max(clist):
max_clist.append('python{:0>2}'.format(i+1))
max_clist.append(clist[i])
if clist[i]==min(clist):
min_clist.append('python{:0>2}'.format(i+1))
min_clist.append(clist[i])
print('语文',max_clist,min_clist)
for i in range(len(mlist)):
# print(i)
if mlist[i]==max(mlist):
max_mlist.append('python{:0>2}'.format(i+1))
max_mlist.append(mlist[i])
if mlist[i]==min(mlist):
min_mlist.append('python{:0>2}'.format(i+1))
min_mlist.append(mlist[i])
print('数学',max_mlist,min_mlist)
for i in range(len(elist)):
if elist[i]==max(elist):
max_elist.append('python{:0>2}'.format(i+1))
max_elist.append(elist[i])
if elist[i]==min(elist):
min_elist.append('python{:0>2}'.format(i+1))
min_elist.append(elist[i])
print('英语',max_elist,min_elist)
#
# 读取文件将总分添加进去
sum_list,sum_max,sum_min=[],[],[]
score_2=open('./总成绩.csv','w',encoding='utf-8',newline='')
scores_2=csv.writer(score_2)
data=[i for i in scores_1[0]]
data.append('总分')
scores_2.writerow(data)
for i in scores_1[1:]:
# print(i)
sum=int(i[1])+int(i[2])+int(i[3])
i.append(sum)
sum_list.append(sum)
scores_2.writerow(i)
score_1.close()
score_2.close()
# print(sum_list)
for i in sum_list:
if i==max(sum_list):
sum_max.append('python{:0>2}'.format(sum_list.index(i)))
sum_max.append(i)
if i==min(sum_list):
sum_min.append('python{:0>2}'.format(sum_list.index(i)))
sum_min.append(i)
print(sum_max)
print(sum_min)
解法二:
append()
到列表中csv
文件,用于存放随机生成的成绩列表import csv
from random import randint
#随机生成 三门成绩
name,yu,shu,ying=[],[],[],[]
for i in range(1,101):
# 格式化学号
Sno='python{:0>2}'.format(i)
Chinese=randint(0,100)
Math=randint(0,100)
English=randint(0,100)
name.append(Sno)
yu.append(Chinese)
shu.append(Math)
ying.append(English)
print(name)
print(yu)
# 创建文件-用于存放随机生成的成绩
score=open('./成绩1.csv','w',encoding='utf-8',newline='')
scores=csv.writer(score)
# 向表中添加学号 语文数学英语 总分
col=['学号','语文','数学','英语','总分']
scores.writerow(col)
for i in range(100):
total=yu[i]+shu[i]+ying[i]
data_stu=[name[i],yu[i],shu[i],ying[i],total]
scores.writerow(data_stu)
# # 文件生成完毕以后计算每科最高分、最低分,并找出分值对应学生(允许一个分值有多个学生)。
max_y,min_y,max_s,min_s,max_e,min_e=[],[],[],[],[],[]
for i in range(len(yu)):
if yu[i]==max(yu):
max_y.append('python{:0>2}'.format(i+1))
max_y.append(yu[i])
if yu[i]==min(yu):
min_y.append('python{:0>2}'.format(i+1))
min_y.append(yu[i])
for i in range(len(shu)):
if shu[i]==max(shu):
max_s.append('python{:0>2}'.format(i+1))
max_s.append(shu[i])
if shu[i]==min(shu):
min_s.append('python{:0>2}'.format(i+1))
min_s.append(shu[i])
for i in range(len(ying)):
if ying[i]==max(ying):
max_e.append('python{:0>2}'.format(i+1))
max_e.append(ying[i])
if ying[i]==min(ying):
min_e.append('python{:0>2}'.format(i+1))
min_e.append(ying[i])
print(max_y,min_y)
print(max_s,min_s)
print(max_e,min_e)
total=[yu[i]+shu[i]+ying[i] for i in range(100)]
print('总分',total)
max_total,min_total=[],[]
for i in range(len(total)):
if total[i]==max(total):
max_total.append('python{:0>2}'.format(i + 1))
max_total.append(total[i])
if total[i]==min(total):
min_total.append('python{:0>2}'.format(i + 1))
min_total.append(total[i])
print(max_total,min_total)
解法三:
存入xlsx
文件
import random
import openpyxl
from random import randint
# 文件不存在,创建文件
wb=openpyxl.Workbook()
# 新建工作表
wb.create_sheet('学生成绩')
# 添加列
cols=['姓名','语文','数学','英语']
for i in range(len(cols)):
wb['学生成绩'].cell(1,i+1).value=cols[i]
# 写入数据
for i in range(1,101):
wb['学生成绩'].cell(i+1,1).value='python{:0>3}'.format(i)
# 生成成绩写入表格
for i in range(1,101):
for j in range(2,5):
wb['学生成绩'].cell(i+1,j).value=random.randint(0,100)
# 保存文件
wb.save('学生成绩.xlsx')
# 加载源文件
wb=openpyxl.load_workbook('学生成绩.xlsx')
# 找工作表
# 对行号遍历
list_yu,list_m,list_e=[],[],[]
for i in range(2,102):
list_yu.append(wb['学生成绩'].cell(i,2).value)
list_m.append(wb['学生成绩'].cell(i,3).value)
list_e.append(wb['学生成绩'].cell(i, 4).value)
max_yu=[wb['学生成绩'].cell(i,1).value for i in range(2,102) if wb['学生成绩'].cell(i,2).value==max(list_yu)]
min_yu=[wb['学生成绩'].cell(i,1).value for i in range(2,102) if wb['学生成绩'].cell(i,2).value==min(list_yu)]
max_m=[wb['学生成绩'].cell(i,1).value for i in range(2,102) if wb['学生成绩'].cell(i,3).value==max(list_m)]
min_m=[wb['学生成绩'].cell(i,1).value for i in range(2,102) if wb['学生成绩'].cell(i,3).value==min(list_m)]
max_e=[wb['学生成绩'].cell(i,1).value for i in range(2,102) if wb['学生成绩'].cell(i,4).value==max(list_e)]
min_e=[wb['学生成绩'].cell(i,1).value for i in range(2,102) if wb['学生成绩'].cell(i,4).value==min(list_e)]
print(f'语文成绩最高分对应学生:{max_yu}',f'语文成绩最低分对应学生:{min_yu}')
print(f'数学成绩最高分对应学生:{max_m}',f'数学成绩最低分对应学生:{min_m}')
print(f'英语成绩最高分对应学生:{max_e}',f'英语成绩最低分对应学生:{min_e}')
# 添加总分
max_t,min_t=0,101
max_l,min_l=[],[]
wb['学生成绩'].cell(1,5).value='总分'
for i in range(2,102):
wb['学生成绩'].cell(i, 5).value=\
wb['学生成绩'].cell(i,2).value+wb['学生成绩'].cell(i,3).value+\
wb['学生成绩'].cell(i,4).value
if wb['学生成绩'].cell(i,5).value>max_t:
max_t=wb['学生成绩'].cell(i,5).value
max_l.append(wb['学生成绩'].cell(i,1).value)
if wb['学生成绩'].cell(i,5).value<min_t:
min_t=wb['学生成绩'].cell(i,5).value
min_l=wb['学生成绩'].cell(i,1).value
print(f'第一名学生为{max_l}')
print(f'最后一名学生为{min_l}')