当前位置: 首页 > news >正文

卡码网语言基础课(Python) | 20.排队取奶茶

卡码网语言基础课(Python) | 20.排队取奶茶

  • 一、题目描述
  • 二、队列
  • 三、队列的操作
  • 四、代码编写

一、题目描述

假设有一家奶茶店,现在有一些人在排队等待取奶茶,同时也有人在取奶茶。请你设计一个程序模拟这种情况下的奶茶队列管理。
假设每个人取奶茶的时间非常短,可以忽略不计,只需要考虑队列中的操作。
队列操作说明:1)当操作为1时,表示有人已经取走奶茶,从队列中删除该人的信息;2)当操作为2时,表示有新人加入排队,将该人的信息加入队列。在一系列操作之后,你需要回答:下一个取奶茶的人是谁?

  • 输入描述: 第一行有一个整数n,代表初始队列有n个人。第二行有n个字符串,代表当前奶茶队列中的人。第三行为一个整数m,代表接下来将会有m次操作。接下来一共有m行,代表共有m次操作。如果是操作1,那么该行只会有一个数字,代表有人取走了奶茶。如果是操作2,那么该行有一个数字和一个字符串,第一个数字2表示有人加入了奶茶队列,第二个字符串代表新加入的奶茶队列的人。
  • 输出描述: 输出只有一行,为下一个取奶茶的人。如果已经没有取奶茶的人了,输出”There are no more people in the queue."。

二、队列

队列,顾名思义,和排队的队列结构是类似的,在排队的过程中,想要加入队列,需要在队伍的最后一位(也被称为队尾)入队,想要离开队列,需要从队伍的第一位(也被称为队头)出队。
在这里插入图片描述
从图中可以看出,队列在队尾那一侧进行插入操作(入队),在队头那一侧进行删除操作(出队),而且是先进先出FIFO(最先进入队列的元素将首先被移除)。

三、队列的操作

在Python语言中,标准库中的queue模块提供了多种队列的实现,比如普通队列和优先级队列,因此你可以使用queue.Queue类来创建队列,不过我们依旧可以使用列表来模拟队列的实现。
队列的常用操作主要有以下几种:

  • 获取队列的长度,即队列中元素的数量,通常使用列表的len()函数来获取
  • 判断队列是否为空,可以通过if not queue来判定
  • 入队操作,将新的元素添加到队列的尾部,使用列表的append()函数来实现
  • 出队操作,获取并移除队列的头部元素,可以通过pop(0)函数传递索引来实现
  • 访问队列的头部元素,但不会将其移除,使用索引访问第一个元素queue[0]
# 导入queue模块
import queue
# 创建一个队列
q = queue.Queue()
# 通过put()实现入队操作
q.put(1)
q.put(2)
q.put(3)
# 通过get()实现出队操作
item = q.get()  # 出队并返回队列中的元素
print(item)  # 输出1

下面给出的示例则展示了如何通过列表模拟队列:

queue = []# 入队操作
queue.append("Tom")
queue.append("Jeery")
queue.append("Mike")
# 出队操作
removed_person = queue.pop(0)  # 弹出并返回队列中的第一个元素
# 判断队列是否为空
if not queue:print("队列为空")
else:print(f"队头元素:{queue[0]}")

四、代码编写

第一行要接收整数n的输入,表示队列中有n个人,然后接收一行字符串作为输入,表示取奶茶的人,将之切割成列表。

# 整数n表示列表有n个人
n = int(input())
# 将输出字符串分割成列表
queue = input().split()

队列已经构建完毕,接下来需要接收数字m和m个整数的输入,表示取奶茶的操作,如果数字为1,表示有人取走了奶茶,即出队操作,如果数字为2,表示有人新加入了奶茶队列,即入队操作。

# 读取操作次数
m = int(input())
# 循环处理每次操作
for _ in range(m):# 获取对队列的操作以及编号,可能有1位数字或者两位数字,将之拆分为列表operation = input().split()# 第一位数字表示对队列的操作opt = int(operation[0])# 如果数字为1,表示有人取走了奶茶if opt == 1:# 出队操作# 如果数字为2,表示有人新加入了奶茶队列elif opt == 2:# 入队操作

注意上述操作中,需要考虑出队操作中队列是否为空的情况,当且仅当“操作指令为出队,队列中的元素不为空,即if queue为True时”才能出队。

当删除数据结构中的元素时,都应该考虑结构中元素是否已经为空的情况。

出队操作使用pop(0)从列表中移除最后一个元素即可,而入队操作需要使用append()函数。

# 操作1:有人取走了奶茶
if opt == 1:if queue:# 通过pop(0)操作移除列表的第一个元素removed_person = queue.pop(0) # 出队
# 操作2:有人新加入了队列
elif opt == 2:# 获取新加入队列的人的名称new_person = operation[1]# 通过append()操作向队列中添加元素queue.append(new_person)  # 入队

当执行完所有操作后,如果队列为空,说明没有取奶茶的人,输出“There are no more people in the queue.",如果仍有元素,则输出下一个取奶茶的人。

# 判断队列是否为空
if not queue:print("There are no more people in the queue.")
else:print(queue[0])  # 取出队头元素,即列表的第一个元素

完整的代码如下:

n = int(input())queue = input().split()m = int(input())
for _ in range(m):operation = input().split()opt = int(operation[0])if opt == 1:if queue:removed_person = queue.pop(0)elif opt == 2:new_person = operation[1]queue.append(new_person)
if not queue:print("There are no more people in the queue.")
else:print(queue[0])
http://www.dtcms.com/a/520693.html

相关文章:

  • ManySpeech —— 使用 C# 开发人工智能语音应用
  • 5G-A 与 5G 对比
  • 网站建设与 宣传关系wordpress 订单
  • Linux进程信号(贰):保存信号
  • 互联网站建设 天津台州网站建设惠店
  • 基于Python大数据的主流汽车价格分析可视化系统
  • Flutter状态管理原理详解
  • 如何选择网站项目企业营销推广怎么做
  • MCP Server 启动和应用
  • C语言通过函数实现素数验证
  • 软件无线电关键技术--基带QPSK 调制技术
  • Linux网络——应用层序列化反序列化
  • EWCCTF2025 Tacticool Bin wp
  • 【Trae+AI】和Trae学习搭建App_01(附加可略过):测试Trae的后端功能
  • 网站源码 下载查域名价格
  • 上海做网站联系电话山东兴华建设集团有限公司网站
  • 使用 Vue3 和 Element Plus 实现选择新增用户集下拉选项框,切换类型,有物业,网格,电子围栏,行政区划管理
  • Vue项目页面间,页面中跳转及刷新规划,何时使用router-view,router-link,iframe,slots ,使用场景,及对应场景的完整使用示例
  • 【Qt】VS Code配置Qt UI插件,vscode打开Qt Designer ,vscode打开Qt*.ui文件
  • 服务网站建设的公司安装网站系统
  • 直播做网站数字广东网络建设有限公司介绍
  • 宇树科技:决定更名
  • 2025年MathorCup 大数据竞赛明日开赛,注意事项!论文提交规范、模板、承诺书正确使用!2025年第六届MathorCup数学应用挑战赛——大数据竞赛
  • 【案例实战】鸿蒙智能日程应用性能优化实战:从卡顿到丝滑的完整历程
  • 创建网站商城电子商务企业网站建设前期规划方案
  • php租车网站源码营销型网站规划
  • Universal Extractors (万能解压器) 支持500+格式
  • 网站策划岗位要求wordpress htaccess文件
  • Google Play多区测试与真机复现:用纯净IP重现真实流量(含技术方案)
  • Lombok是什么?