1. 某医院挂号系统有两种挂号方式:预约挂号(预约就诊时间,需提前一天完成)和直接挂号(当天8:00后在服务台排队挂号)。医生8:00开诊;预约挂号患者在预约的就诊时间到达后,优先就诊;一位患者就诊结束后,下一位患者再开始就诊。

医院为提升服务质量,编写程序模拟就诊顺序。现获取某医生早上就诊患者的数据,分别为姓名、预约或挂号时间、就诊时长(单位:分钟)。预约挂号数据(准时到达人员数据)如图a所示,直接挂号数据如图b所示。运行程序,输出前三位就诊顺序名单,如图c所示。

图 a

图 b

图 c

(1) 根据上图数据,预约挂号人员江浩华排在第位就诊。
(2) 定义如下sort(lst)函数,参数lst的每个元素都包含3个数据项,分别为姓名、预约时间、就诊时长。函数功能是将lst的元素根据预约时间进行升序排列,函数返回lst。函数代码如下,请在划线处填入合适的代码。

def sort(lst) :

    n=len(lst)-1

    for i in range(n-1) :

        for j in range(n,i+1,-1) :

            if:

                lst[j],lst[j-1]=lst[j-1],lst[j]

    return lst

(3) 实现模拟输出就诊顺序的部分 Python 程序如下,请在划线处填入合适的代码。

def insert(lst,i,head) :

    curtime=lst[head] [1]+int(lst[head] [2])     #就诊结束时间

    if

        lst[i].append(head)

        head=i

        curtime=lst[i] [1]+int(lst[i][2])

        i+=1

   

    q=lst[p] [3]

    while i<=len(lst)-1 :

        if curtime>=lst[q][1] and q!=-1 :        #预约人员优先就诊

            p=q

            q=lst[p] [ ]3

            curtime+=int(lst[p][2])

        elif curtime>=lst[i] [1]  or  q==-1 :

           

            lst[i].append(q)

            curtime+=int(lst[i] [2])

            p=i

            i+=1

        elif lst[q] [1]<=lst[i] [1]:

            curtime=lst[q] [1]

        else :

            curtime=lst[i] [1]

    return lst

#预约挂号数据转换为列表 lst,并将时间转换为分钟,如 08:30 转为 510,代码略

lst=sort(lst)

n=len(lst)-1

for i in range(1,n) :

    lst[i].append(i+1)                          #lst[i]追加一个元素 i+1

lst[n].append(-1)

#将门诊挂号数据合并至列表 lst 中,列表 lst数据如图d所示,代码略 head=1

lst1=insert(lst,n+1,head)

#输出就诊顺序,代码略

图 d

【考点】
过程与自定义函数; 排序算法及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
1. 简易阅卷系统--为了检测学生的学习效果,王老师要开展一次课堂测试。她设计了一份检测卷,共8道题目,其中单选题6题,多选题2题,总分100分。学生做完题目后,上交答卷存储在“学生答卷.txt”文件中(答卷中均是大写字母,且多选题答案已按字母升序排列,格式如图a所示)。王老师编程读取全班学生的答卷,实现自动批阅,并统计每位学生的得分情况,最终输出每位学生得分和满分学生名单(如图b所示)。各类题型的阅卷规则如下:

●单选题:学生答案和标准答案一致,每题得10分;错选或不选不给分。

●多选题:学生答案和标准答案一致,每题得20分;漏选给10分,错选或不选不给分。比如某题标准答案为ACD,若答ACD可以得20分,答A、C、D、AC、AD或CD可得10分,其余不得分。

(1) 主程序

da=['A','B','A','D','C','D','ACD','BD'] #da存放标准答案

file="学生答卷.txt"

ts=readfile(file)  #读取学生答案内容

a=[ ] #用于存放满分同学的姓名

for i in range(len(ts)):

    line=ts[i]

    ls=line.strip()  #过滤掉换行符 '\n'

    ls=ls.split(',') #将ls按“,”分割,以列表存储

    s=score(ls,da)

    print(ls[0]+"得分:"+str(s))

    if s==100:

        a.append(ls[0])

    i+=1

print("满分同学:",end='')

    for i in a:

print(i,end='  ')

该程序段采用的算法是(单选,填字母:A .解析算法 / B .枚举算法)。

(2) 读写文本文件,如下的readfile函数,逐行读取每位学生的答题数据存入列表并返回。请在划线处填入合适的代码。

def readfile(file):

    f=open(file,encoding="utf-8")  #打开文件

   

    line= f.readline()    #从文件中读取一行

    while line:

        text.append(line)   #添加到列表text

        line=f.readline()

    f.close()

    return text

(3) 如下的dxt函数,判断多选题答案并返回得分。请在划线处填入合适的代码。

def dxt(s1,s2):

    n1=len(s1);n2=len(s2)

    fs=0;c=0;k=0

    if s1==s2:

        fs=20

    else:

        while k<n1:

            if s1[k] in s2:

                c+=1

            else:

                break

            k+=1

        if :

            fs=10

return fs

(4) 如下的score函数,统计每位学生的得分并返回。请在划线处填入合适的代码。

def score(st,da):

    sum=0

    for j in range(1,len(st)):

        if j<=6:  #单选题

            if st[j]==da[j-1]:

                sum+=10

        else:   #多选题

           

return sum

综合题 困难
3. 为方便习题讲解,需对某次考试中选择题得分率数据进行统计分析,找出选择题得分率最低的前m项对应的题号及考点(若有与第m项得分率相同的,并选取)。

编写VB程序,实现上述功能。运行程序时,先读取每个选择题的题号、得分率和考点,显示在列表框List 1中。在文本框Text 1中输入得分率最低的前m项值,单击“统计”按钮,按照得分率从小到大升序排序,并在列表框List 2中输出得分率最低前m项的题号、得分率及考点。程序运行界面如图所示。

请回答下列问题:

(1) “统计”按钮的事件过程名是
(2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

Dim n As Integer

Dim th(0 To 100)As Integer,df(0 To 100)As Single,kd(1 To 100)As String

Private Sub Form_Load( )

    ‘读取题号、得分率和考点分别存入数组th、df和kd数组,在列表框List 1中显示,代码略

    ‘选择题的个数存入变量n,代码略

End Sub

Function dq(x As String,k As Integer)As String

    ‘固定数据的位数

    dq= X

    Do While

        dq=dq+""

    Loop

End Function

Private Sub Select _Click( )

    Dim m As Integer,i As Integer,j As Integer,p As Integer,t As Integer,mm As Integer

    List 2.Clear

    m=Val(Text1.Text)

    i=1

    Do While i<=n-1

        p=i

        For j=i+1 To n

            If Then p= j

        Next j

        If p<i Then

            t=th(i):th(i)= th(p):th(p)= t

        End If

        If  Then Exit Do

        i=i+1

    Loop

    For i=1 To m

        List 2.AddItem dq(Str(th(i)),6)+ dq(Str(df(th(i))),8)+ dq(kd(th(i)),12)

    Next i

End Sub

(3) 程序中加框处代码有错,请改正。
综合题 普通