一、前言
大家都喜欢看电影吧,一部新剧上场的时候往往会抢不到票,今天通过Python实现一个电影订票系统,满足你想看电影的心。
二、整体结构图
三、代码分解
3.1 infos.py
一部电影的详细信息适合用 字典 结构来存储,我们可以给字典里添加多个键值对来保存电影的名称、座位表和宣传时用的字符
画,比如电影《泰坦尼克号》的详细信息就可以按下面的形式保存到字典 titanic 中:
Python学习交流Q群:903971231### infos = [ { \'name\': \'泰坦尼克号\', \'symbol\': \'\'\' +==================== 泰坦尼克号 =====================+ ▄▄▄▄▄▪ ▄▄▄▄▄ ▄▄▄· ▐ ▄ ▪ ▄▄· •██ ██ •██ ▐█ ▀█ •█▌▐█ ██ ▐█ ▌▪ ▐█.▪ ▐█· ▐█. ▪▄█▀▀█ ▐█▐▐▌ ▐█· ██ ▄▄ ▐█▌ ·▐█▌ ▐█▌· ▐█ ▪▐▌ ██▐█▌ ▐█▌ ▐███▌ ▀▀▀ ▀▀▀ ▀▀▀ ▀ ▀ ▀▀ █ ▪▀▀▀ ·▀▀▀ +===================== Titanic =====================+ \'\'\', \'seats\': [[\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'○\', \'○\', \'●\', \'○\', \'○\', \'●\'], [\'○\', \'○\', \'●\', \'○\', \'●\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'●\', \'○\', \'○\', \'○\', \'○\', \'●\'], [\'○\', \'○\', \'●\', \'○\', \'○\', \'○\', \'●\', \'○\'], [\'●\', \'○\', \'○\', \'○\', \'●\', \'●\', \'●\', \'●\']] }, { \'name\': \'雨人\', \'symbol\': \'\'\' +====================== 雨人 =======================+ ,---. .--. ,-..-. .-. .--. .-. .-. | .-.\\ / /\\ \\ |(|| \\| | |\\ /| / /\\ \\ | \\| | | `-\'/ / /__\\ \\(_)| | | |(\\ / |/ /__\\ \\| | | | ( | __ || || |\\ | (_)\\/ || __ || |\\ | | |\\ \\ | | |)|| || | |)| | \\ / || | |)|| | |)| |_| \\)\\|_| (_)`-\'/( (_) | |\\/| ||_| (_)/( (_) (__) (__) \'-\' \'-\' (__) +===================== Rain Man ====================+ \'\'\', \'seats\': [[\'○\', \'○\', \'○\', \'○\', \'●\', \'○\', \'○\', \'●\'], [\'○\', \'○\', \'○\', \'●\', \'●\', \'○\', \'○\', \'○\'], [\'○\', \'●\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'●\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\']] }, \'name\': \'卡门\', \'symbol\': \'\'\' +======================= 卡门 =======================+ ▄█▄ ██ █▄▄▄▄ █▀▄▀█ ▄███▄ ▄ █▀ ▀▄ █ █ █ ▄▀ █ █ █ █▀ ▀ █ █ ▀ █▄▄█ █▀▀▌ █ ▄ █ ██▄▄ ██ █ █▄ ▄▀ █ █ █ █ █ █ █▄ ▄▀ █ █ █ ▀███▀ █ █ █ ▀███▀ █ █ █ █ ▀ ▀ █ ██ ▀ +====================== Carmen =====================+\'\'\', \'seats\': [[\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'●\', \'●\', \'○\', \'○\', \'●\', \'●\'], [\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'●\', \'○\'], [\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'○\', \'●\', \'○\', \'○\', \'○\', \'●\']] }, { \'name\': \'机器人总动员\', \'symbol\': \'\'\' +==================== 机器人总动员 ===================+ (`\\ .-\') /` (\'-. (\'-. `.( OO ),\' ( OO ).-. _( OO) ,--./ .--. / . --. / ,--. ,--. (,------. | | | | \\-. \\ | |.-\') | |.-\') | .---\' | | | |,.-\'-\' | | | | OO ) | | OO ) | | | |.\'.| |_)\\| |_.\' | | |`-\' | | |`-\' |(| \'--. | | | .-. |(| \'---.\'(| \'---.\' | .--\' | ,\'. | | | | | | | | | | `---. \'--\' \'--\' `--\' `--\' `------\' `------\' `------\' +====================== WALL·E =====================+ \'\'\', \'seats\': [[\'●\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'●\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'●\'], [\'○\', \'○\', \'●\', \'○\', \'●\', \'○\', \'●\', \'○\'], [\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'●\'], [\'○\', \'○\', \'○\', \'○\', \'●\', \'○\', \'○\', \'○\'], [\'●\', \'●\', \'○\', \'○\', \'○\', \'●\', \'○\', \'○\']] }, { \'name\': \'黑客帝国\', \'symbol\': \'\'\' +===================== 黑客帝国 =====================+ ________ __ ___ __ _ /_ __/ /_ ___ / |/ /___ _/ /______(_) __ / / / __ \\/ _ \\ / /|_/ / __ `/ __/ ___/ / |/_/ / / / / / / __/ / / / / /_/ / /_/ / / /> < /_/ /_/ /_/\\___/ /_/ /_/\\__,_/\\__/_/ /_/_/|_| +==================== The Matrix ===================+ \'\'\', \'seats\': [[\'○\', \'●\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'○\', \'●\', \'●\', \'○\', \'○\', \'●\'], [\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\'], [\'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'○\', \'●\'], [\'○\', \'○\', \'●\', \'○\', \'○\', \'○\', \'○\', \'○\']] }, ]
3.2 seat_book.py
选座系统,需要实现下面这两样需求:
•展示所有座位的预订状态,方便用户查看哪些座位还可以预订;
•根据用户输入的座位号完成预订。
可以把选座系统抽象成一个类:SeatBooking,这个类包含了两种方法,check_bookings() 用于展示所有座位的预订状态,
book_seat() 用于完成预订。
Python学习交流Q群:903971231####
import time class SeatBooking: # 展示所有座位的预订信息 def check_bookings(self, seats): print(\"正在为您查询该场次电影的预订状态...\") time.sleep(0.7) print(\'从上到下为 1~6 排,从左至右为 1~8 座\') print(\"======================\") for row in seats: time.sleep(0.1) print(\' \'.join(row)) print(\"======================\") time.sleep(0.7) # 获取符合要求的行索引 def get_row(self): input_row = input(\"预订第几排的座位呢?请输入 1~6 之间的数字\") valid_row = [str(i + 1) for i in range(6)] while input_row not in valid_row: input_row = input(\'没有按要求输入哦,请输入 1~6 之间的数字\') row = int(input_row) - 1 return row # 获取符合要求的列索引 def get_col(self): input_column = input(\'预订这一排的第几座呢?请输入 1~8 之间的数字\') valid_column = [str(i + 1) for i in range(8)] while input_column not in valid_column: input_column = input(\'没有按要求输入哦,请输入 1~8 之间的数字\') column = int(input_column) - 1 return column # 预订指定座位 def book_seat(self, seats): while True: row = self.get_row() column = self.get_col() # 指定座位没有被预订 if seats[row][column] == \'○\': print(\"正在为您预订指定座位...\") time.sleep(0.7) seats[row][column] = \'●\' print(\"预订成功!座位号:{}排{}座\".format(row + 1, column + 1)) break # 结束循环,退出选座 # 指定座位已经被预订了 else: print(\"这个座位已经被预订了哦,试试别的吧\") time.sleep(0.7) # 预订最靠前的座位 def book_seat_at_front(self, seats): print(\"正在为您预订最靠前的座位...\") time.sleep(0.7) # 外循环:遍历 seats 的行 for row in range(6): # 内循环:遍历 seats 的列 for column in range(8): # 若碰到没有被预订的座位 if seats[row][column] == \'○\': seats[row][column] = \'●\' # 预订该座位 print(\"预订成功!座位号:{}排{}座\".format(row + 1, column + 1)) return # 结束函数的执行,返回到它被调用的地方 # 没有在循环内部结束程序,说明不存在没有被预订的座位 print(\"非常抱歉🥺,所有座位都被订满了,无法为您保留座位\")
3.3 film_selector.py
先来解决ling一项任务:电影选择系统。出于人性化考虑,我们希望用户既可以输入序号选择观看电影,也可以输入 x 选择退出系
统。为此,我们需要完成下面两样需求:
•和选座系统一样,我们可以把“选择电影场次”功能抽象成一个类,称为 电影选择系统。
•而根据用户选择,预订某一场次的座位,实际上是先调用 电影选择系统 选择电影,再调用 选座系统 预订座位。这中间涉及到多
次类的实例化与方法调用,为了更清晰地组织代码,我们将这部分内容也抽象成一个类,称为 控制系统。
import time class FilmSelector: # 展示所有可选项 def display_options(self, films): print(\"今日影院排片列表:\") print(\'+================+\') # 按行打印每部电影 for i in range(len(films)): print(\'{} - {}\'.format(i + 1, films[i][\'name\'])) time.sleep(0.2) # 打印退出选项 print(\'x - 退出\') print(\'+================+\') time.sleep(0.7) # 获取用户的选择 def get_choice(self, films): # 符合要求的输入列表 valid_choice = [str(i + 1) for i in range(len(films))] valid_choice.append(\'x\') choice = input(\'你的选择是?\') # 当不符合要求时,循环获取新的选项 while choice not in valid_choice: choice = input(\'没有按照要求输入哦,请重新输入\') # 返回用户做出的选择 return choice
3.4 main.py
import time from infos import infos from film_selector import FilmSelector from seat_booking import SeatBooking class Controller: def __init__(self, infos): self.films = infos # 电影库所有电影 # 打印欢迎语 self.welcome() # 用户选择想观看的电影 self.choose_film() # 根据用户选择,执行不同流程 if self.choice != \'x\': # 为指定场次预订座位 self.choose_seat() # 打印结束语 self.bye() # 用户选择想观看的电影 def choose_film(self): # 实例化 FilmSelector 类 selector = FilmSelector() # 展示所有用户可以选择的选项 selector.display_options(self.films) # 通过 get_choice() 方法获取用户选择 self.choice = selector.get_choice(self.films) # 为指定场次预订座位 def choose_seat(self): # 取出用户所选择的电影 film = self.films[int(self.choice) - 1] # 取出所选择电影的电影名、座位表、宣传画 name = film[\'name\'] seats_list = film[\'seats\'] symbol = film[\'symbol\'] # 打印提示信息和电影宣传画 print(\'正在为您预订电影《{}》的座位...\'.format(name)) time.sleep(0.7) print(symbol) t ime.sleep(0.7) # 打印预订座位的方法列表 print(\'支持的座位预订方式如下:\') time.sleep(0.7) print(\'+==========================+\') print(\"1 - 指定行列号预定座位\") print(\"2 - 给我预订一个最靠前的座位!\") print(\'+==========================+\') time.sleep(0.7) print(\'\') # 获取座位预订方式 method = input(\'请选择座位预订方式\') # 定义符合要求输入列表 valid_method valid_method = [\'1\',\'2\'] # 当不符合要求时,循环获取新的选项 while method not in valid_method: method = input(\'没有按照要求输入哦,请重新输入\') # 实例化 SeatBooking 类 booking = SeatBooking() # 打印所有座位的预订信息 booking.check_bookings(seats_list) # 方法 1:指定行列号 if method == \'1\': booking.book_seat(seats_list) # 方法 2:预订最靠前的座位 else: booking.book_seat_at_front(seats_list) # 打印欢迎语 def welcome(self): print(\'+============================+\') print(\'+ 欢迎来到时光电影院 +\') print(\'+============================+\') print(\'\') time.sleep(0.7) # 打印结束语 def bye(self): print(\'\') time.sleep(0.7) print(\'+============================+\') print(\'+ 已经退出系统,下次见!👋 +\') print(\'+============================+\') # 实例化 Controller 类 s = Controller(infos)
最后
希望学会的你都能抢到票,带着心爱的女朋友去看电影了。喜欢的记得点赞收藏,不懂的评论留言,我一般看见都会回复的,下一章见啦。
来源:https://www.cnblogs.com/123456feng/p/16122194.html
本站部分图文来源于网络,如有侵权请联系删除。