python面向对象的使用(2)

devtools/2024/9/23 1:09:00/

题目

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

思路

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

代码解释

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.ppmy.cn/devtools/9430.html

相关文章

将组件 赋值给变量li 想拿到 组件的html页面结构 但是 打印出来的是 文件路径 该如何实现呢?

需求 import { ref } from vue; import refrigerationRight from /views/bim3D/components/right/refrigerationRight.vue const liref({lis:refrigerationRight }) const refrigerationclick()>{console.log(li) }##方法 import { createApp } from vue; import refriger…

计算机服务器中了locked勒索病毒怎么办,locked勒索病毒解密工具流程步骤

随着网络技术的不断应用与发展,越来越多的企业离不开网络,网络大大提升了企业的办公效率水平,也为企业的带来快速发展,对于企业来说,网络数据安全成为了大家关心的主要话题。近日,云天数据恢复中心接到多家…

在群晖上安装GPT4Free

什么是 GPT4Free ? GPT4Free 简称 G4F,是一个强大的大型语言模型命令行界面(LLM-CLI),旨在去中心化并提供免费访问先进人工智能技术的能力。G4F 的目标是通过提供用户友好和高效的工具,使人工智能民主化&am…

工业控制(ICS)---组态软件分析

组态软件 什么是组态软件? 组态软件就是一些数据采集与过程控制的专用软件,它们是在自动控制系统监控层一级的软件平台和开发环境,使用灵活的组态方式,为用户提供快速构建工业自动控制系统监控功能的通用层次的软件工具。 组态软…

lesson03:类和对象(中)续

1.运算符重载 2.const成员函数 3.取地址操作符及const取地址操作符重载 1.运算符重载 1.1运算符重载 c为了增强代码的可读性,引入了运算符重载,运算符重载函数是具有特殊函数名的函数。 函数名:关键字operator后面接需要重载的运算符符号…

代码随想录算法训练营第四十八天| 198.打家劫舍,213.打家劫舍II,337.打家劫舍III

题目与题解 198.打家劫舍 题目链接:198.打家劫舍 代码随想录题解:​​​​​​​198.打家劫舍 视频讲解:动态规划,偷不偷这个房间呢?| LeetCode:198.打家劫舍_哔哩哔哩_bilibili 解题思路: 这道…

GLID: Pre-training a Generalist Encoder-Decoder Vision Model

1 研究目的 现在存在的问题是: 目前,尽管自监督预训练方法(如Masked Autoencoder)在迁移学习中取得了成功,但对于不同的下游任务,仍需要附加任务特定的子架构,这些特定于任务的子架构很复杂&am…

Lua语言 备查

开发工具 1.SciTE (入门级) IDEA lua (商业级) 基础 注释 --单行注释 a "hello" --a是一个标识符号--多行注释 --[[这是多行注释]]--连接符 -- .. str 123..456变量 变量类型可以随意改变 数字开头会报错 五种基本…