当前位置: 首页 > 编程日记 > 正文

可操作性强!Python实现一个电影订票系统!

2014414439c66f9aeb576f6992e51518.gif

来源丨Python小二

一、效果展示

通过Python实现一个电影订票系统,效果如下所示:

二、整体结构图

ca2bf38922e6bbf8b4050b7d21ce3a03.png

三、代码分解

3.1 infos.py

一部电影的详细信息适合用 字典 结构来存储,我们可以给字典里添加多个键值对来保存电影的名称、座位表和宣传时用的字符画,比如电影《泰坦尼克号》的详细信息就可以按下面的形式保存到字典 titanic 中:

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() 用于完成预订。

import timeclass 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) - 1return 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) - 1return 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 timeclass 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 SeatBookingclass 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)time.sleep(0.7)# 打印预订座位的方法列表print('支持的座位预订方式如下:')time.sleep(0.7)print('+==========================+')print("1 - 指定行列号预定座位")print("2 - 给我预订一个最靠前的座位!")print('+==========================+')time.sleep(0.7)print('')# 获取座位预订方式method = input('请选择座位预订方式')# 定义符合要求输入列表 valid_methodvalid_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)

0d8d16a25f5ac6d3cbffb449a498b301.gif

aef7dc81ffcb61eb3412dbb430a92afd.png

技术

Pandas数据类型概述与转换实战

技术

用Python实现十大经典排序算法

技术

快速实现Resnet残差模型实战

资讯

隐患:神经网络可以隐藏恶意软件

d6f6974a843882d9a6c4b92d64561916.png

分享

7b7d0e0c9cd748c6bd5aef4f0cf2351d.png

点收藏

53fb190daf2a9b847d5791ff60e2a2fc.png

点点赞

e69340bd3848421e566dde3678c6df5a.png

点在看

相关文章:

centos7 install mysql

1. 下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2. 安装mysql-community-release-el7-5.noarch.rpm包 $ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm 安装这个包后&#xff0c;会获得两个mysql的yum repo源&#x…

unity加载ab后,场景shader不起效问题(物件表现黑色)

需要把unity自带的shader&#xff0c;加入到默认列表转载于:https://www.cnblogs.com/lancidie/p/9293827.html

Linux下各类TCP网络服务器的实现源代码

http://www.linuxeden.com/forum/t146870.html大家都知道各类网络服务器程序的编写步骤&#xff0c;并且都知道网络服务器就两大类&#xff1a;循环服务和并发服务。这里附上源代码来个小结吧。首先&#xff0c;循环网络服务器编程实现的步骤是这样的&#xff1a; 这种服务器模…

ReferenceQueue的使用

转&#xff1a;http://www.iflym.com/index.php/java-programe/201407140001.html 1 何为ReferenceQueue 在java的引用体系中&#xff0c;存在着强引用&#xff0c;软引用&#xff0c;虚引用&#xff0c;幽灵引用&#xff0c;这4种引用类型。在正常的使用过程中&#xff0c;我们…

红帽、Docker、SUSE 在俄罗斯停服

‍‍国际局势给技术圈带来的影响依然在蔓延。整理 | 苏宓出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;继 Oracle、Google、苹果等科技公司和 React 开源项目之后&#xff0c;如今 Linux 发行版也牵扯进俄乌之间冲突的漩涡中。其中一个是全球最大的独立开源软件公…

配置linux-Fedora系统下iptables防火墙

参考地址&#xff1a;https://blog.csdn.net/zhangjingyi111/article/details/78902820 本篇文章为实验课过程记录&#xff0c;较为简略。 1.查看系统是否安装iptables 命令&#xff1a;iptables --version 2.开启iptables 命令&#xff1a;service iptables start 出现错误&am…

output_buffering详细介绍

HTTP Header为什么要使用Output Buffering技术Output Buffering的工作原理基本用法高级用法使事情更为简单哈哈&#xff0c;我成功了我个人认为&#xff0c;Output buffering是比较纯粹的PHP4.0特征。尽管从概念上看来相当简单&#xff0c;但是output buffering功能非常强大&am…

12 个 Pandas 数据处理高频操作

作者 | 老表来源 | 简说Python今天给大家分享几个自己近期常用的Pandas数据处理技巧&#xff0c;主打实用&#xff0c;所以你肯定能用的着&#xff0c;建议扫一遍&#xff0c;然后收藏起来&#xff0c;下次要用的时候再查查看即可。简单说说总结分享统计一行/一列数据的负数出现…

ORACLE初次安装自动安装软件包

一、自动安装所需软件包提前配置好yum仓库定义package.txt包列表文件&#xff1a;以官网RHEL6为例&#xff0c;这里有compat-libstdc有两个包&#xff0c;如果不加*&#xff0c;号后面的compat-libstdc-33-3.2.3-69.el6.x86_64&#xff0c;compat-libstdc-296-2.96-144.el6.i68…

中文详解phpmailer所有对象和属性

2019独角兽企业重金招聘Python工程师标准>>> 2009-03-09 19:13:50 前言&#xff1a; phpmailer是一个优秀的发件程序&#xff0c;但中文资料比较少&#xff0c;于是有牛人手动翻译了phpmailer的elementindex.html,E文的&#xff1a;[url]http://www.bblog.com/api…

php error_reporting 详解

error_reporting设定错误讯息回报的等级。语法: int error_reporting(int [level]);传回值: 整数函式种类: PHP 系统功能内容说明 本函式用来设定错误讯息回报的等级&#xff0c;参数 level 是一个整数的位元遮罩 (bitmask)&#xff0c;见下表。value constant 1 E_ERROR 2 E_W…

mysql多个实例

2019独角兽企业重金招聘Python工程师标准>>> 1>、关闭原有的默认端口3306的mysql:service mysqd stop 2>、拷贝或创建数据文件 cp -r /data/mysql/data1 /data/mysql/data_3307 格式 用bin/mysql_install_db --basedirmysql的目录 --datadir数据存放的目录 …

10行 python 代码做出哪些酷炫的事情?

来源 | Python小二Python凭借其简洁的代码&#xff0c;赢得了许多开发者的喜爱。因此也就促使了更多开发者用Python开发新的模块&#xff0c;从而形成良性循环&#xff0c;Python可以凭借更加简短的代码实现许多有趣的操作。下面我们来看看&#xff0c;我们用不超过10行代码能实…

这是一个不一样的社会公益活动

公益不是每个人的刚需&#xff0c;但是可以&#xff0c;以全链条模式联动更多人需求。 社会公益就是给社会带来帮助的事或物&#xff0c;它包含社区服务&#xff0c;环境保护&#xff0c;知识传播&#xff0c;公共福利&#xff0c;帮助他人&#xff0c;社会援助&#xff0c;社会…

剖析PHP中的输出缓冲

剖析PHP中的输出缓冲 本文按署名非商业用途保持一致授权作者: &#xff0c;发表于2005年12月24日01时54分 我们先来看一段代码。<?php for ($i10; $i>0; $i--) {echo $i;flush();sleep(1); } ?>按照php手册里的说法该函数将当前为止程序的所有输出发送到用户的浏览…

luasocket 安装记录 (FS1.6)

说明&#xff1a; 想通过Lua 脚本实现 http。默认 FS 的 mod_lua 中没有对socket 的支持&#xff0c;如下的操作为lua 添加 socket的支持。 一、下载 luasocket 包&#xff1a; # wget http://luaforge.net/frs/download.php/2664/luasocket-2.0.2.tar.gz # tar zxvf luaso…

5个实用的例子,一行 Python 能干嘛?

作者 | 菜鸟哥来源 | 菜鸟学Python一行Python到底能干嘛&#xff0c;今天给大家分享几个不错的小例子&#xff0c;都是在实际工作中经常会碰到的例子&#xff0c;让你知道一行代码的威力&#xff0c;让菜鸟也能秒变王者&#xff0c;尤其是能镇住新来的学妹。01、如果你是HR你手…

ASP.NET Web Forms - 网站导航(Sitemap 文件)

【参考】ASP.NET Web Forms - 导航 ASP.NET 带有内建的导航控件。 网站导航 维护大型网站的菜单是困难而且费时的。 在 ASP.NET 中&#xff0c;菜单可存储在文件中&#xff0c;这样易于维护。文件通常名为 web.sitemap&#xff0c;并且被存放在网站的根目录下。 此外&#xff0…

14 款命令行常用工具的替代品!

作者 | JackTian来源 | 杰哥的IT之旅在 Linux 操作系统下&#xff0c;ls (list) 可以说是我们日常使用率较高的命令了&#xff0c;它主要用来显示目标列表&#xff0c;输出信息可以进行彩色加亮显示&#xff0c;以分区不同类型的文件。关于 ls[1] 的语法、选项、实例、扩展知识…

C#编码实践:使用委托和特性调用指定函数

2019独角兽企业重金招聘Python工程师标准>>> 建立一个C#控制台应用程序AttributeTest。 建立一个类Operations&#xff0c;代码如下&#xff1a; namespace AttributeTest {public class Operations{public static int Add(int a, int b) { return a b; }public st…

HTTP响应头不缓存

Cache-Control:nocache Pragma:no-cache Expires&#xff1a;-1 <meta http-equivCache-Control content-1/>

CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS

一、预处理器 1、介绍 基于CSS的另一种语言、通过工具编译成CSS、添加了很多CSS不具备的特性、能提升CSS文件的组织 2、less嵌套 3 、sass嵌套 4、 less变量 5、sass变量 6、less mixin 7、sass mixin 8、less extend 9、sass extend 10、less loop 11、sass loop 12、less imp…

用了这么久的 Python,居然没注意到这个操作

作者 | luanhz来源 | 小数志导读Python语言近年来的火热程度自不必说&#xff0c;这一方面得益于其庞大的第三方库的加持&#xff0c;使得其堪称万金油般的存在&#xff1b;另一方面也在于其简洁的语法和易用的函数。是的&#xff0c;Python语法之简洁和函数之丰富&#xff0c;…

apache的keepalive和keepalivetimeout(apache优化)

在APACHE的httpd.conf中&#xff0c;KeepAlive指的是保持连接活跃&#xff0c;类似于Mysql的永久连接。换一句话说&#xff0c;如果将KeepAlive设置为On&#xff0c;那么来自同一客户端的请求就不需要再一次连接&#xff0c;避免每次请求都要新建一个连接而加重服务器的负担。 …

讨论JDK的File.equal()

我们一般比较两个文件中的对象是相同的文件&#xff0c;通常使用java.io.File.equal()。这里&#xff0c;equal()是不是文件内容的比较结果为。象是否指向同一个文件。File的equal()方法。实际上调用了当前文件系统FileSystem的compareTo()。public boolean equals(Object obj)…

百度云满速下载(转)

BaiduPCS-GO下载完毕后可以存放到任何位置&#xff0c;建议存放到无中文目录内。然后打开我的电脑→属性→高级系统设置→环境变量→系统变量→Path→编辑→新建&#xff0c;输入你的BaiduPCS-Go存放目录。注意&#xff1a;是存放目录。 这样CMD才可以正确识别到程序。做好所有…

内容协商 (Content Negotiation)

大多数响应包含一个实体&#xff0c;此实体包含人类用户能理解的信息。通常&#xff0c;希望提供给用户相应于请求最容易得到的实体。对服务器和缓存来说&#xff0c;不幸的是&#xff0c;并不是所有的用户都对这个最容易得到的实体有喜好&#xff0c;并且并不是所有的用户代理…

[经验]无线鼠标和无线键盘真的不能用了?——雷柏的重生之路~

逆天大二的时候托朋友买了个雷柏的无线键盘鼠标&#xff1a; 用了很多年&#xff0c;不仅外观好而且键盘鼠标本身也很好用&#xff0c;可前些日子就光荣牺牲了。。。。 逆天百思不得其"姐"&#xff0c;试着把电池换了&#xff0c;发现还是不行&#xff0c;&#xff0…

数字化探索:建立学习型组织,HR 也能驱动业务营收?

本篇文章暨 CSDN《中国 101 计划》系列数字化转型场景之一。 《中国 101 计划——探索企业数字化发展新生态》为 CSDN 联合《新程序员》、GitCode.net 开源代码仓共同策划推出的系列活动&#xff0c;寻访一百零一个数字化转型场景&#xff0c;聚合呈现并开通评选通道&#xff0…

26期20180716 iptables规则备份恢复 firewalld zone

7月16日任务10.19 iptables规则备份和恢复10.20 firewalld的9个zone10.21 firewalld关于zone的操作10.22 firewalld关于service的操作iptables的规则备份和恢复service iptables save会把配置保存到配置文件中 /etc/sysconfig/iptables如果不想保存在这 可以使用iptables-save …