组卷题库 > 高中信息技术试卷库
试题详情
知识竞赛结束后,小明从信息系统中导出参赛学生的成绩,存储在“知识竞赛.xlsx”文件中,如图a所示,并编写Python程序,按总分降序排序,分别输入一二三等奖的获奖比例,计算获奖人数和分数线,程序运行结果如图b所示。由于同分人数较多,计算奖次时按最接近规定比例的人数划定分数线,若按两个相邻分数线划定的人数与规定比例的人数同样接近,则取较低的分数线。例如:总人数100人,应有10人获一等奖,若98分及以上有9人,97分及以上有15人,则一等奖分数线为98分;若98分及以上有9人,97分及以上有11人,则一等奖分数线为97分。Python程序如下,请回答下列问题。

图 a

图 b

def find(now,step):

    i=now

    while score[i][2]==score[now][2]:

         ① 

        return i

import pandas as pd

df=pd.read_excel ("知识竞赛.xlsx")

df= ②  

score=df.values    #二维数组 score 存储所有参赛学生的考号、班级和总分,按总分降序排列

n=len(score)

prize=["一等奖","二等奖","三等奖"]

print("总人数:"+str(n))

s=input("请分别输入一二三等奖的比例: ")

percent=list(map(float,s.split(",")))  #一二三等奖比例转换成实数存储在列表 percent 中 nums=[0,0,0]

nums[0]=round(  ③  )

for i in range(1,3):

    nums[i]=nums[i-1]+round(n*percent[i])

pre=0;res=[""]*n     #res 存储学生的奖次

for i in range(3):

    now=nums[i]-1

    k1=find(now,-1)

    k2=find(now,1)

    if k2-now<=now-k1:

    now=k2-1

    line=score[k2-1][2]

else:

    now=k1

    line=score[k1][2]

print(prize[i],"人数:",now-pre+1,"分数线:",line)

for j in range(pre,now+1):

    res[j]=prize[i]

  ④ 

知识点
参考答案
采纳过本试题的试卷
教育网站链接