随机生成10名学生的多项成绩

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ekddgu8S-1656933830306)(C:\Users\Administrator\Desktop\1.jpg)]

解法一:

  1. 创建csv文件用于存放随机生成的成绩
  2. csv文件中添加行标题–writerow()
  3. 随机生成成绩,并将几个数据存入列表中,再写入csv文件中
  4. 文件生成之后,再读文件,从csv文件中读出几列数据存入列表中
  5. 然后利用索引比较出列表中的最大和最小值对应的同学
  6. 总分通过循环遍历几个列表得出,重复步骤5得出最大最小对应的同学
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)

解法二:

  1. 循环生成三个数,将生成的数添加append()到列表中
  2. 创建csv文件,用于存放随机生成的成绩列表
  3. 根据生成的列表计算最高分最低分的同学
  4. 循环遍历三个列表获得总分
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文件

  1. 创建新文件,创建新工作表
  2. 向工作表中添加内容–行名,列名,分数—保存文件
  3. 遍历数据,拿到最高最低存入列表
  4. 添加总分
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}')

你可能感兴趣的:(python基础习题,python,开发语言)