def tob(n)
if n=0:
return "*
else:
return tob(n//2)+str(1-n%2)
执行语句s=tob(10) 后,s的值为( )
①当天08:00之前完成签到的患者,按照挂号顺序从小到大排队就诊;
②08:00之后签到的患者,按照挂号的序号从小到大的次序插入候诊队伍中;
③队伍中前3名患者(包括正在就诊患者)视为已进入待诊状态,插队的患者只能插到这3 名待诊患者后的队伍中。
假设医生从08:00开始叫号就诊,对每位患者的诊断时间均为3分钟,忽略相邻患者就 诊的时间间隔。编写程序实现以下功能:若有患者签到,则根据规则更新候诊队伍;医生每 完成一名患者的诊断,电子屏幕上按顺序显示待诊的患者姓名和每个患者预计就诊的时间。
姓名 | 挂号序号 | 签到时间 |
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)。
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]
程序划线处的代码是 (单选,填字母)
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
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
①若调用该函数继续存储手机号“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
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("查无此号,请检查后重新输入!")
def f(a,b):
if a<b:
return a+b
else:
return f(a-b,a+b)
执行语句 x=f(18,-2)后, x 的值为( )
编号登记:为n位体检者设置体检编号1~n。
体检呼叫:体检项目处空闲时呼叫下一个体检者(编号小的优先),若多个项目同时呼叫,体 检者到优先级小的项目处体检。仅考虑常规体检项目,各个项目的优先级及体检时间如表1所示:
前去体检:各个体检项目之间相互独立,互不影响;病人排队体检和体检完毕到下一科室之 间没有时间延迟。
deflst(n):
que=[]
que.append(temp)
return que
若加框处语句改为:
则执行语句lst(4),que的生成结果 (选填:是/否)相同。
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]))
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,' 的出栈序列')
程序运行结果如图所示。划线处应填写的语句是( )
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()
def zdygroupby(1st):
dic = {}
for row in lst:
if row[2] == 1:
if :
dic[row[0]]=1
else:
dic[row[0]]+= 1
图 a |
图 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
图 c
编写函数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)
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 | 图 2 |
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 |
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)) |
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 的值为( )