day4-Datawhale-数据结构与算法
程序员文章站
2022-05-26 16:15:27
...
理论部分
- 用数组实现一个顺序队列。
- 用数组实现一个循环队列。
- 用链表实现一个链式队列。
练习部分
- 模拟银行服务完成程序代码。
目前,在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统,该系统完全模拟了人群排队全过程,通过取票进队、排队等待、叫号服务等功能,代替了人们站队的辛苦。
排队叫号软件的具体操作流程为:
- 顾客取服务序号
当顾客抵达服务大厅时,前往放置在入口处旁的取号机,并按一下其上的相应服务按钮,取号机会自动打印出一张服务单。单上显示服务号及该服务号前面正在等待服务的人数。
- 服务员工呼叫顾客
服务员工只需按一下其柜台上呼叫器的相应按钮,则顾客的服务号就会按顺序的显示在显示屏上,并发出“叮咚”和相关语音信息,提示顾客前往该窗口办事。当一位顾客办事完毕后,柜台服务员工只需按呼叫器相应键,即可自动呼叫下一位顾客。
编写程序模拟上面的工作过程,主要要求如下:
- 程序运行后,当看到“请点击触摸屏获取号码:”的提示时,只要按回车键,即可显示“您的号码是:XXX,您前面有YYY位”的提示,其中XXX是所获得的服务号码,YYY是在XXX之前来到的正在等待服务的人数。
- 用多线程技术模拟服务窗口(可模拟多个),具有服务员呼叫顾客的行为,假设每个顾客服务的时间是10000ms,时间到后,显示“请XXX号到ZZZ号窗口!”的提示。其中ZZZ是即将为客户服务的窗口号。
代码:
# -*- coding: utf-8 -*-
#银行取号叫号系统
def get_num(): #实现取号,并把每一个号存入列表中。
global t1,a,b,c,d,pos_dict
#定义全局变量,用来切换客户和工作人员窗口时数据能同步更新。
#t1表示对应业务的排队名单
#a表示对应业务的取号计数变量
#pos_dict 是整个数据存储的字典
pos_dict = {"银行卡服务窗口":t1 }
while True:
id = eval(input('请点击触摸屏获取号码:(输入1)\n输入5切换到工作人员界面'))
if id == 1:
a += 1
A_num = str(a) #为了以示区分,在取号上加了A,B,C,D
t1.append(A_num)
pos_dict['银行卡服务窗口'] = t1
print('您的号码是:{},您前面有{}位。\n'.format(a,len(t1)-1))
#print(pos_dict['银行卡服务窗口'])
#上面是一行禁用的代码,不禁用时用来测试运行时结果是否正确。
elif id == 5:
break #输入5的时候切换到工作人员界面
else:
print("输入有误,请重新输入!")
return pos_dict
def yell_num(pos_dict):
t1 = pos_dict['银行卡服务窗口']
while True:
key = input("呼叫客户按y,切换到用户界面按n,结束进程请按e\n")
if key == "y":
try:
popped_num = t1.pop(0)
#pop()函数,从列表取出第0个元素将其存储在popped_num,并删除
print("请{}号客户前往银行窗口办理业务,当前排队人数为{}人\n"\
.format(popped_num,len(t1)))
except:
print("目前银行窗口空闲,无人排队")
#列表为空时,pop()函数报错,故except表示列表为空
elif key == "n":
get_num()
elif key == "e":
break
else:
print("输入错误,请重新输入!\n")
def main():
pos_dict =get_num()
yell_num(pos_dict)
a=0
b=0
c=0
d=0
t1 = []
main()
结果:
感想:没有实现计时功能,后待研究。
上一篇: 夏天我注定离不开空调和西瓜
下一篇: Python数据结构与算法-栈和递归函数