充值活动已开启,快来参与吧 关闭充值活动
当前位置:手动组卷 /高中信息技术 /按知识点
选择知识点
最新上传 最多使用
  • 1. (2023·宁波模拟) 定义如下函数:

    def tob(n)

        if  n=0:

            return "*

        else:

            return tob(n//2)+str(1-n%2)

    执行语句s=tob(10) 后,s的值为(   )

    A . "1010" B . "0101" C . "1001" D . "1100"
  • 1. (2023·宁波模拟) 某医院的看病流程为:患者通过网上、自助设备或人工窗口成功挂号后,到门诊的签到处签到,签到成功后即可排队等待叫号就诊。简化的排队规则如下:

    ①当天08:00之前完成签到的患者,按照挂号顺序从小到大排队就诊;

    ②08:00之后签到的患者,按照挂号的序号从小到大的次序插入候诊队伍中;

    ③队伍中前3名患者(包括正在就诊患者)视为已进入待诊状态,插队的患者只能插到这3 名待诊患者后的队伍中。

    假设医生从08:00开始叫号就诊,对每位患者的诊断时间均为3分钟,忽略相邻患者就 诊的时间间隔。编写程序实现以下功能:若有患者签到,则根据规则更新候诊队伍;医生每 完成一名患者的诊断,电子屏幕上按顺序显示待诊的患者姓名和每个患者预计就诊的时间。

    1. (1) 若当前已签到患者信息如下表所示:

      姓名

      挂号序号

      签到时间

      A

      3

      07:47:03

      B

      1

      07:51:12

      C

      6

      07:55:32

      D

      4

      07:57:10

      E

      8

      07:59:52

      F

      2

      08:02:07

      则患者 F的预计就诊时间为  (格式如08:07:20)。

    2. (2) 08:00:00之前签到的患者原始数据存在列表1st  中,每位患者信息包括姓名、挂号序 号、签到时间,以下函数将列表中的数据按挂号序号从小到大排序,并构建候诊队伍。

      def init(lst):     #构建8点前签到的候诊队伍

          i=0;n=len(lst)

          while i<n-1:

              k=i;i=n-1

              for j in range(n-1,k,-1):

                  if lst[i][1]<lst[j-1][1]:

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

              ____▲____

          for i in range(n):

              lst[i][2]=180*i

              lst[i].append(i+1)

          lst[n-1][3]=-1

      #修改时间格式,每位患者诊断时间为3分钟

      #尾结点指针域处理,如[’E’,8,720,-1]

      程序划线处的代码是       (单选,填字母)

    3. (3) 每当一位患者就诊结束,更新队伍并按就诊顺序输出待诊的患者姓名和每个患者预计就诊的时间。请补充程序划线处。

      def gs(t):#     时间格式转换,将时间戳127转成“08:02:07”形式

          t=t+8*60*60

          h=t//3600

          m=

          s=t%60

          time='%02d'%h+:'+'%02d%m+:+'%02d'%s

          return time

      def mov(lst,head):

          #更新队伍并输出,代码略

          return head

    4. (4) 若有患者签到,则更新候诊队伍。请补充程序划线处。

      def te(time):    #时间格式转换,将“08:02:07”转换成以秒为单位的时间戳127

          t=int(time[0:2])*60*60+int(time[3:5])*60+int(time[6:])

          t=t-8*60*60    #8 点开始叫号看诊

          return t

      def insnew(lst,head,data); #将新签到的患者插入候诊队伍中,并更新每个患者预计就诊的时间

          data[2]=tc(data[2])

          data.append(-1)

          p=head;q=p;k=0

          if head=-1:#       无人排队

              lst.append(data)

             

          else:

              while q!=-1 and():

                  k=k+1

                  p=q

                  q=lst[q][3]

              data[2]=lst[p][2]+180

              data[3]=q

              lst.append(data)

              lst[p][3]=len(lst)-]

              p=len(lst)-1

              while q!=-1:

                  lst[q][2]=1st[p][2]+180

                  p=q

                  q=lst[q][3]

          return head

  • 1. (2023高三上·衢州、丽水、湖州期中) 某快递驿站有A、B两类货架,收到的包裹重量小于等于10存放于A货架,其余存放于B货架。编写程序模拟生成取件码和顾客的取件过程,取件码是根据当前已处理的包裹数量生成,如A-0001表示当天第一个处理的包裹存放在A货架,B-0003表示当天第三个处理的包裹存放在B货架。取件码与顾客手机号关联,程序根据输入的手机号显示其所有包裹的取件码,并允许顾客一次性提取或者部分提取。程序的部分运行界面如图a和图b所示。

    1. (1) 当前已处理的包裹取件码是 A-0158,若下一个包裹重量是 12,其取件码为
    2. (2) 定义函数save(pnum,code),参数pnum为手机号,code为取件码。函数功能是将一条包裹信息存储到列表goods和列表dic中。如图a的包裹数据,手机号“180****1215”在两个列表中的数据分别为goods[4]=["B-0005",-1]、goods[9]=["A-0010",4]和 dic[2]=["180****1215",9,2]。

      ①若调用该函数继续存储手机号“180****1215 ”的包裹, 其取件码是“B-0011 ”,则对应 dic[2]的值变为["180****1215",,]。

      ②函数 save 代码如下,程序中加框处代码有错,请改正。

      def save(pnum,code):

          goods.append([code,-1])

          n=len(goods)-1

          print(n,"号包裹的手机号:",pnum,"取件码:",code)

          num=search(dic,pnum)    #函数返回手机号 pnum 在 dic 中的索引号,未找到返回-1

          if num==-1:

              dic.append([pnum,n,1])             #新增一个包裹信息

          else:

              goods[n][1]=dic[num][1]

              dic[num][1]=n

              

    3. (3) 实现取件功能的部分 Python 程序如下,请在划线处填入合适的代码。

      x=input("请输入您的手机号:")

      num=search(dic,x)

      if num!=-1:

          #输出手机号为 x 的当前所有包裹信息,代码略

          op=int(input("输入 0 取全部包裹,输入 1 取部分包裹:"))

          if op==0:

              print("您的包裹已经取完! ")

              del dic[num]  #删除 dic 中索引为 num 的元素

          else:

              order=input("请输入本次的取件码,只输入#表示结束取件:")

              while order!="#":

                 

                  p,q=head,head

                  while goods[q][0]!=order:

                  p=q

                 

              if p==head:

                  dic[num][1]=goods[q][1]

              else:

                  goods[p][1]=goods[q][1]

              dic[num][2]-=1

              if dic[num][2]==0:

                  print("您的包裹已经取完!")

                  break

              #输出手机号为 x 的当前所有包裹信息,代码略

              order=input("请输入本次的取件码, 只输入#表示结束取件:")

      else:

          print("查无此号,请检查后重新输入!")

  • 1. (2023高三上·衢州、丽水、湖州期中) 定义如下函数:

    def f(a,b):

        if a<b:

            return a+b

        else:

            return f(a-b,a+b)

    执行语句 x=f(18,-2)后, x 的值为(   )

    A . 40 B . 36 C . 20 D . 16
  • 1. (2023高三上·浙江月考) 某医院的团体体检流程如下:

    编号登记:为n位体检者设置体检编号1~n。

    体检呼叫:体检项目处空闲时呼叫下一个体检者(编号小的优先),若多个项目同时呼叫,体 检者到优先级小的项目处体检。仅考虑常规体检项目,各个项目的优先级及体检时间如表1所示:

    前去体检:各个体检项目之间相互独立,互不影响;病人排队体检和体检完毕到下一科室之 间没有时间延迟。

    1. (1) 某日下午,仅1个团队4人(分别用编号1,2,3,4表示)参加体检 ,开始体检后第5分钟,4在检查 (填写项目名称)项目。
    2. (2) 定义如下lst(n)函数,生成n人体检队列 。若体检人数为4人,则 que生成结果如表2所示。

      deflst(n):

          que=[]

         

              que.append(temp)

          return que

      若加框处语句改为:

      则执行语句lst(4),que的生成结果 (选填:是/否)相同。

    3. (3) 用 python程序模拟一个10人团队参加体检的流程。程序运行后,体检完成顺序如图1所示:

      Python部分程序如下 , 请在划线处填入合适的代码。

      n=10

      head=0

      que=lst(n)

      tail=10

      dis=[['B超', 12],[ '心电图' , 5],['抽血', 2],['尿常规' , 2],['C14检测', 2],['胸透' , 2], ['一般常规(身高体重血压)', 1]]

      t=[-1]*7         #t记录各个项目当前体检的开始时间

      f=[-1]*7         #f记录各个项目当前体检人员编号

      def jh(num):

          global tail            #global能够实现在自定义函数中改变公共变量tail

          p=head

          while p<tail:

              if que[p][0]not in fand num not in que[p][1]:  #p体检者等待中且未体检num项目

                  que[p][1].append(num)

                 

                  t[num]=time

                  if len(que[p][1])==7:

                      temp=que[p]

                          for i in range(p , tail-1):

                              que[i]=que[i+1]

                          que[tail-1]=temp

                          tail-=1

                      break

              p=p+1

      time=0

      while tail! =head:

          i=0

          while i<7:

              if t[i]==-1:

                  jh(i)

              elif  :

                  t[i]=-1

                  f[i]=-1

                  i-=1

              i+=1

          time+=1

      print('体检完成顺序:')

      for i in range(  ):       #按体检完成顺序输出体检者及其的体检项目顺序

          item= que[i][1]

          s= '  '

          for j in item:

              s+=dis[j][0]+'→'

          print('编号%d:%s'%(que[i][0], s[:-1]))

  • 1. (2023·嘉兴模拟) 待入栈的序列 a 有多种出栈序列, 以下函数用于判断序列 b 是否是 a 的出栈序列,代码如下:

    def judge(a, b):

        n=len(a) ;st=[- 1]*n

        top-= 1; i=j=0

        while i<n:

            top+= 1

               ①    

            i+= 1

            while top> - 1 and      ②     :  

                top-= 1

                j+= 1

            return top==- 1

    from random import shuffle

    a=[1,2,3,4, 5]

    b=[1,2, 3, 4, 5]

    shuffle (b)                  #将序列 b 的元素随机排序

    if judge(a, b):

        print (b,'是' ,a,' 的出栈序列')

    else:

        print (b,'不是' ,a,' 的出栈序列')

    程序运行结果如图所示。划线处应填写的语句是(   )

    A . ①st[top]=a[i]               ②st [top]==b[j] B . ①st[top]=a[i]                ②st[- 1]==b[j] C . ①st [top]=b[i]              ②st[top]=a[j] D . ①st[top]=b[i]              ②st[- 1]= =a[j]
  • 1. (2023·嘉兴模拟) 某地高中的技术选考数据,保存在“jsxk.xls”文件中,如图a所示。

    图 a

    图 b

    请回答下列问题:

    1. (1) 统计各学校技术选考人数占本校总人数的比例,找出占比最高的前 5 所学校并绘制柱形图,如图 b 所示。部分 Python程序如下,请在划线处填写合适的代码。

      import pandas as pd

      import matplotlib.pyplot as plt

      #图表支持中文字体显示,代码略

      df= pd.read_excel("jsxk.xls",dtype={'学校代码':'string'})           #学校代码列为字符串

      df1 = df.groupby("  ", as_index=False).count()        #按学校统计人数

      df1 = df1.rename(columns={'姓名':'学生总数'})#重命名列

      df1['技术比例'] = round(/df1['学生总数']* 100,2)

      df1 = df1.sort_values('技术比例',ascending=False).head(5)

      plt.title('技术选考比例前 5 的学校')

      plt.bar( )

      plt.show()

    2. (2) 在本问题的解决中,为了探究函数 groupby() ,某同学编写了自定义函数zdygroupby() ,其功能为统 计各校技术选考总人数,并以字典的形式返回。函数代码如下,请在划线处填写合适的代码。(注:代码中 lst 为二维列表,列表中每个元素包含3个数据项,格式如[['201901','顾筱扬',NaN],['201901','  俞凯睿', 1.0],['201901',' 陈丹祺', 1.0] … …])

      def zdygroupby(1st):

          dic = {}

          for row in lst:

              if row[2] == 1:

                  if  :

                      dic[row[0]]=1

                  else:

                      dic[row[0]]+= 1

         

  • 1. (2023·嘉兴模拟) 最短路径问题。以 m*n 个边长为 1 的正方形组成的矩形,各顶点按行优先从 0 开始编号,如图 a 所示为 3*2 的矩形及顶点编号。从顶点 x(起点)经由各正方形的边移动到顶点 y(终点)有多种移动 路径,编程求解所有的最短路径。

    图 a

    图 b

    1. (1) 分析问题,将矩形转换为计算机可处理的数据。可采用列表存储矩形中各顶点的相邻关系,如图 b所示。

      编写函数init,根据横向和纵向的正方形数量,返回所有顶点及其所有的相邻顶点数据。完善程序,在划线处填入合适的代码。

      def init(m,n):

          tot=(m+1)*(n+1)    #顶点总数

          lst=[[] for i in range(tot)]

          for i in range(tot):

              if i>m:

                  lst[i].append(i-m- 1)

              if i<(m+1)*n:

                  lst[i].append(i+m+1)

              if i%(m+1) != 0:

                  lst[i].append(i- 1)

              if i%(m+1) != m:

                 

          return lst

    2. (2) 分析问题,查找所有从起点到终点的最短路径。例如:查找从起点1到终点10的所有最短路径,可先查找终点10的所有相邻顶点(6,9,11),然后再逐个查找顶点6、9、11的相邻顶点,直到查找到起点1,获得所有最短路径,如图c所示,共有3条长度为3的最短路径,分别为1→2→6→10,1→5→6→10,1→5→9→10。若从起点4到终点11,共有 (填数字)条最短路径。

      图 c

    3. (3) 分析问题,存储查询到的路径。可采用链表结构保存路径数据,例如:查找从起点1到终点10的所有最短路径,首先将终点10的数据[10,0,-1]保存在path[0]中,然后将其相邻顶点6、9、11的数据保存到path中,path[i][0]保存顶点的编号,path[i][1]保存当前顶点到终点的距离,path[i][2]保存下一顶点在path中的位置,其值为-1表示当前顶点为终点。

      编写函数print_path,输出所有的最短路径。完善程序,在划线处填入合适的代码。

      def print_path(x,path,length):    #为起点编号,length为Path中有效元素个数。

          cnt=0

          for i in range(length):

              if path[i][0] == x:

                  cnt+= 1

              s="最短路径"+str(cnt)+":"

              v=path[i]

              while  :

                  s=s+str(v[0])+","

                  v=path[v[2]]

              s=s+str(v[0])+" 。"

              print(s)

    4. (4) 实现上述功能的 Python程序如下,运行结果如图 d 所示。请在划线处填入合适的代码。

      m=3           #横向正方形数量

      n=2              #纵向正方形数量

      mtx=init(m,n)

      x=int(input("请输入起点:"))

      y=int(input("请输入终点:"))

      path=[[] for i in range(30)]

      passed=[False]*len(mtx)    #保存顶点是否已途经

      dis=0

      head=0

      tail=0

      path[tail]=[y,0,- 1]

      tail+= 1

      passed[y]=True

      while not found:

          dis+= 1

          pass_dis=[False]*len(mtx)

          tmp=tail

          for i in range(head,tail):

              v=path[i]

              for d in mtx[v[0]]:

                  if not passed[d]:

                      path[tail]=

                      tail+= 1

                      pass_dis[d]=True

                  if d == x:

                      found=True

              head=tmp

          for i in range(len(mtx)):    #标记已途经的顶点

              if  :

                  passed[i]=True

      #输出结果

      print_path(x,path,tail)

  • 1. (2023·浙江模拟) 某咖啡店,店里共有4种咖啡,类型编号为0到3,每次只能制作一种类型的咖啡,咖啡都是批量现做(制作过程中不能更改数量或类型)。店员需按照订单的先后顺序完成订单(即当前订单完成之前不能换订单),已经接到的订单中的同一类型咖啡可以一起制作(假设咖啡机能同时制作的数量上限足够高),且不需要额外增加时间(即只需制作一杯的时间)。如图1为每个订单的咖啡数量,初始“订单0”中[6, 0, 2, 4]表示0到3号咖啡的购买数量。此时店员先做数量最多的6份0号咖啡,1分钟后接到新订单[1, 18, 0, 2],之后每分钟都会接到1个新订单,这些订单都计入每种咖啡的待做数量。3分钟后这6份0号咖啡制作完成,程序会在“订单0”中选择还没制作的且待做数量最多的(数量相同时先后不作要求)咖啡作为下一次要制作的咖啡。编写python程序,每次制作完一种咖啡,输出接下来要制作的咖啡,运行界面如图2:

    图 1

    图  2

    1. (1) 由图1的订单信息,3 分钟后" 咖啡 0"制作完成,那么图2 中(1)处店员接下来要做的咖啡是咖啡
    2. (2) 根据待制作的咖啡数量,对链表初始化,生成降序链表 lnk,则代码运行后 y的值为

      def sort():

          for i in range(3):

              for j in range(3,i,- 1):

                  if waitlist[index[j]][1] > waitlist[index[j - 1]][1]:

                      index[j], index[j - 1] = index[j - 1], index[j]

              if waitlist[index[j]][1]==0:

                  return j

          return 4

      waitlist=[[3,6],[4,0],[1,2],[2,4]]    # "咖啡 0" 的批量制作时间为 3 分钟,目前待做量为 6,以此类推

      q=[[6, 0, 2, 4], [1, 18, 0, 2], [2, 1, 2, 1], [0, 1, 0, 5],…… #如图 1,代码略

      #q 保存订单流,第一个订单[6,0,2,4]作为初始订单已计入 waitlist

      index=[0,1,2,3]

      y=sort()

      lnk=[- 1]*4

      for i in range(y- 1):                  #创建降序链表

          lnk[index[i]]=index[i+1]

      p=lnk_h=index[0]

      print("请制作咖啡"+str(p))

      waitlist[p][1]=0      #咖啡 p 进入制作,待做数量回 0

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

      defenqueue(order):      #order 是一个订单,例如[1,2,0,3]

          global lnk_h

          flag.append([0,0,0,0])      #新订单 4 种咖啡未完成

          for i in range(4): f = True

              if waitlist[i][1]==0: f=False

                  if order[i]==0: continue

                      waitlist[i][1]+=order[i]    #将订单 order 中的咖啡 i 累加到待制作数量中

                      cur=lnk_h

                      while cur!=- 1 and waitlist[i][1]<waitlist[cur][1]:

                          pr,cur=cur,lnk[cur]

                      if cur!=i:

                          tmp = lnk[i]

                          lnk[i]=cur

                          if cur==lnk_h:

                              lnk_h=i

                          else:

                              lnk[pr]=i

                          if f:

                              while cur!=i:

                                  pr,cur=cur, lnk[cur]

                                 

      def nextfood(qhead,qtail):        #找到下一次要做的咖啡

          global lnk_h

          cur=lnk_h

          while  :

              pr,cur=cur,lnk[cur]

              if cur==lnk_h:

                  lnk_h=lnk[lnk_h]

              elif cur==- 1:

                  return – 1

              else:

                  lnk[pr]=lnk[cur]

              waitlist[cur][1]=0

              for i in range(  ):

                  if q[i][cur]!=0: flag[i][cur] = 1

                      return cur 

      qhead,qtail=0,1

      order=q[qhead]

      flag=[[1,0,0,0]]            #flag[i][j]=1 标记"订单 i" 中的"咖啡j" 已经在做或已经做完。 lnk_h, time =lnk[lnk_h],0

      while True:

          time=(time+1)%waitlist[p][0]

          if qtail<len(q):

              enqueue(q[qtail])   #接新订单

              qtail+=1

          if time==0:

              while qhead<qtail- 1 and sum(flag[qhead])+q[qhead].count(0)==4:        #订单完成时

                  qhead+=1

                  order=q[qhead]

              p=nextfood(qhead,qtail)

              if p == - 1 : break

              print("请制作咖啡"+str(p))

  • 1. (2023·浙江模拟) 有如下程序段:

    def fun(k):

        if k==1 :

            return "1"

        elifk%2==0:

            return fun(k- 1)+str(k%2)

        else:

            returnstr(k%2)+fun(k- 1)

    执行语句 s=fun(5) ,则 s 的值为(         )

    A . "00111" B . " 11010" C . " 11100" D . " 10110"
上一页 1 2 3 4 5 下一页 共54页