python面向对象的使用(2)

题目

面向对象模拟电影院自动售票系统实现自动选择电影、场次、座位。

思路

通过类定义电影的相关信息,输出输入相关电影信息,对座位进行顺序取

代码解释

class Movie:def __init__(self, title, duration):self.title = titleself.duration = durationdef __str__(self):return f"电影:{self.title},时长:{self.duration}分钟"class Showtime:def __init__(self, movie, time):self.movie = movieself.time = timedef __str__(self):return f"电影:{self.movie.title},时间:{self.time}"class Seat:def __init__(self, row, seat_number):self.row = rowself.seat_number = seat_numberself.is_reserved = Falsedef reserve(self):self.is_reserved = Truedef __str__(self):return f"座位:{self.row}排{self.seat_number}号"

Movie: 表示电影,包括电影的标题和时长。
Showtime: 表示电影的放映时间,包括关联的电影和具体时间。
Seat: 表示座位,包括座位所在的排数、座位号以及是否已被预订的状态。

class Theater:def __init__(self):self.movies = []self.showtimes = []self.seats = []def add_movie(self, movie):self.movies.append(movie)def add_showtime(self, showtime):self.showtimes.append(showtime)def create_seats(self, rows, seats_per_row):for row in range(1, rows + 1):for seat_number in range(1, seats_per_row + 1):seat = Seat(row, seat_number)self.seats.append(seat)def find_available_seat(self):for seat in self.seats:if not seat.is_reserved:return seatreturn None

Theater: 表示电影院,包括电影列表、场次列表和座位列表,以及一些操作方法。
add_movie: 将电影添加到电影列表中。
add_showtime: 将场次添加到场次列表中。
create_seats: 根据指定的排数和每排座位数创建座位列表。
find_available_seat: 查找可用的座位,如果有未被预订的座位,则返回第一个可用座位,否则返回 None。

if __name__ == "__main__":# 创建电影movie1 = Movie("复仇者联盟", 180)movie2 = Movie("泰坦尼克号", 195)# 创建场次showtime1 = Showtime(movie1, "2024-04-21 10:00")showtime2 = Showtime(movie2, "2024-04-21 13:00")# 创建影院theater = Theater()theater.add_movie(movie1)theater.add_movie(movie2)theater.add_showtime(showtime1)theater.add_showtime(showtime2)theater.create_seats(rows=5, seats_per_row=10)# 选择电影和场次print("可选电影:")for movie in theater.movies:print(movie)print("\n可选场次:")for showtime in theater.showtimes:print(showtime)# 选择座位seat = theater.find_available_seat()if seat:seat.reserve()print(f"\n已选择座位:{seat}")else:print("\n抱歉,座位已售罄")

在 if __name__ == "__main__": 下,

进行了一些示例操作:
创建了两部电影 movie1 和 movie2。
创建了两个场次 showtime1 和 showtime2,分别关联到了不同的电影和时间。
创建了一个电影院 theater,并将电影、场次添加到电影院中。
调用 create_seats 方法创建了座位。
打印了可选的电影和场次。
调用 find_available_seat 方法查找可用座位,并进行了相应处理

完整代码

class Movie:def __init__(self, title, duration):self.title = titleself.duration = durationdef __str__(self):return f"电影:{self.title},时长:{self.duration}分钟"class Showtime:def __init__(self, movie, time):self.movie = movieself.time = timedef __str__(self):return f"电影:{self.movie.title},时间:{self.time}"class Seat:def __init__(self, row, seat_number):self.row = rowself.seat_number = seat_numberself.is_reserved = Falsedef reserve(self):self.is_reserved = Truedef __str__(self):return f"座位:{self.row}排{self.seat_number}号"class Theater:def __init__(self):self.movies = []self.showtimes = []self.seats = []def add_movie(self, movie):self.movies.append(movie)def add_showtime(self, showtime):self.showtimes.append(showtime)def create_seats(self, rows, seats_per_row):for row in range(1, rows + 1):for seat_number in range(1, seats_per_row + 1):seat = Seat(row, seat_number)self.seats.append(seat)def find_available_seat(self):for seat in self.seats:if not seat.is_reserved:return seatreturn Noneif __name__ == "__main__":# 创建电影movie1 = Movie("复仇者联盟", 180)movie2 = Movie("泰坦尼克号", 195)# 创建场次showtime1 = Showtime(movie1, "2024-04-21 10:00")showtime2 = Showtime(movie2, "2024-04-21 13:00")# 创建影院theater = Theater()theater.add_movie(movie1)theater.add_movie(movie2)theater.add_showtime(showtime1)theater.add_showtime(showtime2)theater.create_seats(rows=5, seats_per_row=10)# 选择电影和场次print("可选电影:")for movie in theater.movies:print(movie)print("\n可选场次:")for showtime in theater.showtimes:print(showtime)# 选择座位seat = theater.find_available_seat()if seat:seat.reserve()print(f"\n已选择座位:{seat}")else:print("\n抱歉,座位已售罄")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GlobalFilter全局过滤器

这个跟跟刚才那个GatewatFilert默认全局配置的效果是一样的,但是那个是配置,只能使用已有的进行配置,GlobalFilter全局过滤器是通过类实现的 可以自己用代码实现拦截后要处理的逻辑。 定义方式: 先实现GlobalFilter接口&#xf…

深入C语言,发现多样的数据之枚举和联合体

一、枚举 枚举 是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。是一个被命名的整型常数的集合。简单来说就将某种特定类型的对象一一进行列举,一一列举特定类型可能的取值。…

探索RadSystems:低代码开发的新选择(二)

系列文章目录 探索RadSystems:低代码开发的新选择(一)🚪 文章目录 系列文章目录前言一、RadSystems Studio是什么?二、用户认证三、系统角色许可四、用户记录管理五、时间戳记录总结 前言 在数字化时代,低…

【做一名健康的CSDNer】程序员哪几种行为最伤肾(程序员必看)

虽然没有专门针对程序员这一职业群体特有的伤肾行为的研究报道,但根据一般人群的健康风险和生活习惯,程序员由于其特殊的工作模式和环境,可能更容易出现如下伤肾的行为: 熬夜加班: 程序员由于项目进度、bug修复等原因&…

LOD2-Unity中Shader LOD技术原理以及使用

Shader LOD(Level of Detail)是Unity中用于优化渲染性能的一种技术。它通过在不同的距离或屏幕空间中使用不同的着色器来控制模型的细节级别,从而减少GPU的工作量。 Shader LOD的原理是根据相机与物体之间的距离来选择合适的着色器。在远离相…

高斯锁表导致sql报错处理

构造锁等待场景: 1.打开一个新的连接会话,使用普通用户连接GaussDB(DWS)数据库,在test SCHEMA 下创建测试表test.ypg_test。 CREATE TABLE ypg_test (id int, name varchar(50)); 2.开启事务1,进行INSERT操作。 START TRANSACTI…

【操作系统】——调度算法——小题

单核处理器系统中,有3个作业J1,J2,J3同时到达,其运行时间分别为1h,4h,2h,以单道方式运行,下面的执行序列中周转时间最短的是() A,j1,j2,j3 Bj3,j2,j1 Cj2,j1,j3 Dj1,j3,j2 在各种作业…

GPFL个性化联邦学习:同时学习全局和个性化特征信息

Global category embedding指的是将全局类别信息嵌入到模型中的过程。在机器学习和深度学习中,当处理具有多个类别的数据集时,可以使用全局类别嵌入来将类别信息编码到模型中,以帮助模型更好地理解和利用类别之间的关系。这可以帮助提高模型在…

函数的创建和调用及删除

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 函数和存储过程非常类似,也是可以存储在 Oracle 数据库中的 PL/SQL代码块,但是有返回值。 可以把经常使用的功能定义为一个函数,就像系统…

数仓建模—逻辑数据模型

数仓建模—逻辑数据模型 数据模型是数据元素及其基于现实世界对象之间的关系的可视化表示。数据模型揭示并定义数据在业务流程中的连接方式,并支持创建高效的信息系统或应用程序。例如,在商业智能中,数据模型定义用户可以在其分析中使用哪种数据。 逻辑数据模型 (LDM Logi…

【C++ STL序列容器】array 数组

文章目录 【 1. 基本原理 】【 2. array 的创建 】2.1 不赋初值2.2 赋默认值2.3 赋指定值 【 3. array 的成员函数 】实例 【 1. 基本原理 】 array 是在 C 普通数组的基础上添加了一些成员函数和全局函数。在使用上,它 比普通数组更 安全,且效率并没…

以太网帧格式解析

以太网的正式标准是IEEE802.3,它规定了以太网传输的帧结构。 以太网帧格式如下图所示: 以太网传输数据时,是按照上图的格式,自左到右依次传输的。需要注意的是前导码和SFD不属于以太网协议的内容,应该是属于物理层数据…

Java集合-List

目录 1、List 1.1 List集合特有方法 1.1.1 增加 1.1.2 删除 1.1.3 修改 1.1.4 查找 1.2 ArrayList 1.3 LinkedList 1.4 Vector 1、List ---| Iterable 接口 Iterator iterator() ----| Collection 接口 ------| List 接口 元素可以重复…

学习ArkTS -- 状态管理

装饰器 State 在声明式UI中,是以状态驱动试图更新: 状态(State):指驱动视图更新的数据(被装饰器标记的变量) 视图(View):基于UI描述渲染得到用户界面 说明…

病理验证mIF和TMA路线(自学)

目录 技术 使用配对病理切片 mIF验证 单基因使用TMA验证 技术 多重荧光免疫组化技术 (Multiplex immunohistochemical,mIHC) 也称作酪氨酸信号放大 (Tyramide dignal amplification,TSA) 技术,是一类利用辣根过氧化酶 (Horseradish Pero…

MyBatis 面试题(六)

1. MyBatis 有几种分页方式? MyBatis 的分页方式主要可以分为两大类:逻辑分页和物理分页。 逻辑分页是一次性把全部数据查询加载进内存,然后再进行分页。这种方式减少了IO次数,适合频繁访问、数据量少的情况,但不适合…

weblogic反序列化漏洞(CVE-2017-10271)复现

直接用vuluhub搭建现成的靶场做 访问靶场 打开是这样表示成功 想反弹shell 就先开启kali1的nc监听,这就监听2233端口吧 linux:nc -l -p 2233 抓包修改为攻击数据包 ip和端口可以任意修改 反弹的shell 还可以写入文件shell 只需要把提供的poc POS…

【代码随想录】day44

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、完全背包理论基础二、518零钱兑换 II三、377组合总和 Ⅳ总结 一、完全背包理论基础 完全背包:每个物品可以使用无数次。 二、518零钱兑换 II cla…

修复Windows搜索不工作的几种方法,总有一种适合你

序言 Windows搜索是Windows 10中一个非常有用的功能,它允许你搜索特定的程序、应用程序、文档、图片、文件、设置等,以便快速访问它们。但有时Windows搜索找不到我们预期的结果,甚至没有响应,这会给Windows用户带来很多不便。如果Windows 10中的搜索栏不工作,该怎么办?你…

【MySQL】SQL优化

SQL优化 插入数据 insert 一次插入数据和批量插入数据 insert into tb_test (id, name) values (1,Tom); insert into tb_test (id, name) values (1,Tom),(2,Jack),(3,Jerry);优化方案: 手动控制事务,且按主键顺序插入。start transaction; insert …