当前位置: 高中信息技术 / 综合题
  • 1. (2022·浙江模拟) 知识竞赛结束后,小明从信息系统中导出参赛学生的成绩,存储在“知识竞赛.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]

      ④ 

    1. (1) 请在划线处填入合适的代码。

    2. (2) 加框处代码有误, 请改正。

微信扫码预览、分享更方便