欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Python實(shí)現(xiàn)電影訂票系統(tǒng)

 更新時(shí)間:2022年03月04日 09:22:37   作者:迪迦瓦特曼  
這篇文章主要介紹了利用Python實(shí)現(xiàn)電影訂票系統(tǒng),一部電影的詳細(xì)信息適合用?字典?結(jié)構(gòu)來存儲(chǔ),我們可以給字典里添加多個(gè)鍵值對(duì)來保存電影的名稱、座位表和宣傳時(shí)用的字符畫,需要的朋友可以參考一下

一、效果展示

通過Python實(shí)現(xiàn)一個(gè)電影訂票系統(tǒng),效果如下圖所示:

二、整體結(jié)構(gòu)圖 

三、代碼分解

3.1 infos.py 

一部電影的詳細(xì)信息適合用 字典 結(jié)構(gòu)來存儲(chǔ),我們可以給字典里添加多個(gè)鍵值對(duì)來保存電影的名稱、座位表和宣傳時(shí)用的字符畫,比如電影《泰坦尼克號(hào)》的詳細(xì)信息就可以按下面的形式保存到字典 titanic 中: 

infos = [
? {
? ? 'name': '泰坦尼克號(hào)',
? ? 'symbol': '''
+==================== 泰坦尼克號(hào) =====================+
? ▄▄▄▄▄? ? ▄▄▄▄▄ ?▄▄▄· ? ? ▄ ? ? ? ?▄▄·?
? ?██ ? ██ ??██ ? ?█ ?█ ??█▌?█ ?██ ??█ ▌?
? ?█.? ?█· ??█. ?▄█??█ ??█??▌ ??█· ██ ▄▄
? ?█▌ ·?█▌ ??█▌· ?█ ??▌ ██?█▌ ??█▌ ?███▌
? ??? ???? ???? ? ? ?? ??? █ ????? ·????
+===================== Titanic =====================+
''',
? ? 'seats': [['○', '○', '○', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '●', '○', '○', '●'],
? ? ? ? ? ? ? ['○', '○', '●', '○', '●', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '●', '○', '○', '○', '○', '●'],
? ? ? ? ? ? ? ['○', '○', '●', '○', '○', '○', '●', '○'],
? ? ? ? ? ? ? ['●', '○', '○', '○', '●', '●', '●', '●']]
? },
? {
? ? 'name': '雨人',
? ? 'symbol': '''
+====================== 雨人 =======================+
? ,---. ? ?.--. ?,-..-. .-. ? ? ? ? ? .--. ?.-. .-.?
? | .-.\ ?/ /\ \ |(|| ?\| | |\ ? ?/| / /\ \ | ?\| |?
? | `-'/ / /__\ \(_)| ? | | |(\ ?/ |/ /__\ \| ? | |?
? | ? ( ?| ?__ ?|| || |\ ?| (_)\/ ?|| ?__ ?|| |\ ?|?
? | |\ \ | | ?|)|| || | |)| | \ ?/ || | ?|)|| | |)|?
? |_| \)\|_| ?(_)`-'/( ?(_) | |\/| ||_| ?(_)/( ?(_)?
? ? ? (__) ? ? ? ? (__) ? ? '-' ?'-' ? ? ? (__) ? ??
+===================== Rain Man ====================+
''',
? ? 'seats': [['○', '○', '○', '○', '●', '○', '○', '●'],
? ? ? ? ? ? ? ['○', '○', '○', '●', '●', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '●', '○', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '●', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '○', '○', '○', '○']]
? },
? {
? ? 'name': '卡門',
? ? 'symbol': '''
+======================= 卡門 =======================+
? ▄█▄ ? ?██ ? █▄▄▄▄ █?▄?█ ▄███▄ ? ? ?▄ ??
? █? ?▄ ?█ █ ?█ ?▄? █ █ █ █? ? ? ? ? ?█ ?
? █ ? ? ?█▄▄█ █??▌ ?█ ▄ █ ██▄▄ ? ?██ ? █?
? █▄ ?▄? █ ?█ █ ?█ ?█ ? █ █▄ ? ▄? █ █ ?█?
? ?███? ? ? █ ? █ ? ? ?█ ??███? ? █ ?█ █?
? ? ? ? ? ? █ ? ? ? ? ?? ? ? ? ? ? █ ? ██?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
+====================== Carmen =====================+
''',
? ? 'seats': [['○', '○', '○', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '●', '●', '○', '○', '●', '●'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '○', '○', '●', '○'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '○', '●', '○', '○', '○', '●']]
? },
? {
? ? 'name': '機(jī)器人總動(dòng)員',
? ? 'symbol': '''
+==================== 機(jī)器人總動(dòng)員 ===================+
? ?(`\ .-') /` ?('-. ? ? ? ? ? ? ? ? ? ? ? ? ? ('-. ??
? ? `.( OO ),' ( OO ).-. ? ? ? ? ? ? ? ? ? ? _( ?OO) ?
?,--./ ?.--. ? / . --. / ,--. ? ? ?,--. ? ? (,------.?
?| ? ? ?| ?| ? | \-. ?\ ?| ?|.-') ?| ?|.-') ?| ?.---'?
?| ?| ? | ?|,.-'-' ?| ?| | ?| OO ) | ?| OO ) | ?| ? ??
?| ?|.'.| ?|_)\| |_.' ?| | ?|`-' | | ?|`-' |(| ?'--. ?
?| ? ? ? ? | ? | ?.-. ?|(| ?'---.'(| ?'---.' | ?.--' ?
?| ? ,'. ? | ? | ?| | ?| | ? ? ?| ?| ? ? ?| ?| ?`---.?
?'--' ? '--' ? `--' `--' `------' ?`------' ?`------' ?
+====================== WALL·E =====================+
''',
? ? 'seats': [['●', '○', '○', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['●', '○', '○', '○', '○', '○', '○', '●'],
? ? ? ? ? ? ? ['○', '○', '●', '○', '●', '○', '●', '○'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '○', '○', '○', '●'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '●', '○', '○', '○'],
? ? ? ? ? ? ? ['●', '●', '○', '○', '○', '●', '○', '○']]
? },
? {
? ? 'name': '黑客帝國(guó)',
? ? 'symbol': '''
+===================== 黑客帝國(guó) =====================+
? ?________ ? ? ? ? ? ?__ ?___ ? ? ?__ ? ? ? _ ? ??
? /_ ?__/ /_ ?___ ? ? / ?|/ ?/___ _/ /______(_) ?__
? ?/ / / __ \/ _ \ ? / /|_/ / __ `/ __/ ___/ / |/_/
? / / / / / / ?__/ ?/ / ?/ / /_/ / /_/ / ?/ /> ?< ?
?/_/ /_/ /_/\___/ ?/_/ ?/_/\__,_/\__/_/ ?/_/_/|_| ?
+==================== The Matrix ===================+
''',
? ? 'seats': [['○', '●', '○', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '○', '●', '●', '○', '○', '●'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '○', '○', '○', '○'],
? ? ? ? ? ? ? ['○', '○', '○', '○', '○', '○', '○', '●'],
? ? ? ? ? ? ? ['○', '○', '●', '○', '○', '○', '○', '○']]
? },
]

3.2 seat_book.py

選座系統(tǒng),需要實(shí)現(xiàn)下面這兩樣需求:

  • 展示所有座位的預(yù)訂狀態(tài),方便用戶查看哪些座位還可以預(yù)訂;
  • 根據(jù)用戶輸入的座位號(hào)完成預(yù)訂。

可以把選座系統(tǒng)抽象成一個(gè)類:SeatBooking,這個(gè)類包含了兩種方法,check_bookings() 用于展示所有座位的預(yù)訂狀態(tài),book_seat() 用于完成預(yù)訂。 

import time
?
class SeatBooking:
? # 展示所有座位的預(yù)訂信息
? def check_bookings(self, seats):
? ? print("正在為您查詢?cè)搱?chǎng)次電影的預(yù)訂狀態(tài)...")
? ? 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("預(yù)訂第幾排的座位呢?請(qǐng)輸入 1~6 之間的數(shù)字")
? ? valid_row = [str(i + 1) for i in range(6)]
?
? ? while input_row not in valid_row:
? ? ? input_row = input('沒有按要求輸入哦,請(qǐng)輸入 1~6 之間的數(shù)字')
?
? ? row = int(input_row) - 1
? ? return row
??
? # 獲取符合要求的列索引
? def get_col(self):
? ? input_column = input('預(yù)訂這一排的第幾座呢?請(qǐng)輸入 1~8 之間的數(shù)字')
? ? valid_column = [str(i + 1) for i in range(8)]
?
? ? while input_column not in valid_column:
? ? ? input_column = input('沒有按要求輸入哦,請(qǐng)輸入 1~8 之間的數(shù)字')
?
? ? column = int(input_column) - 1
? ? return column
?
? # 預(yù)訂指定座位
? def book_seat(self, seats):
? ? while True:
? ? ? row = self.get_row()
? ? ? column = self.get_col()
? ? ? # 指定座位沒有被預(yù)訂
? ? ? if seats[row][column] == '○':
? ? ? ? print("正在為您預(yù)訂指定座位...")
? ? ? ? time.sleep(0.7)
? ? ? ? seats[row][column] = '●'
? ? ? ? print("預(yù)訂成功!座位號(hào):{}排{}座".format(row + 1, column + 1))
? ? ? ? break ?# 結(jié)束循環(huán),退出選座
? ? ? # 指定座位已經(jīng)被預(yù)訂了
? ? ? else:
? ? ? ? print("這個(gè)座位已經(jīng)被預(yù)訂了哦,試試別的吧")
? ? ? ? time.sleep(0.7)
?
? # 預(yù)訂最靠前的座位
? def book_seat_at_front(self, seats):
? ? print("正在為您預(yù)訂最靠前的座位...")
? ? time.sleep(0.7)
? ? # 外循環(huán):遍歷 seats 的行
? ? for row in range(6):
? ? ? # 內(nèi)循環(huán):遍歷 seats 的列
? ? ? for column in range(8):
? ? ? ? # 若碰到?jīng)]有被預(yù)訂的座位
? ? ? ? if seats[row][column] == '○':
? ? ? ? ? seats[row][column] = '●' # 預(yù)訂該座位
? ? ? ? ? print("預(yù)訂成功!座位號(hào):{}排{}座".format(row + 1, column + 1))
? ? ? ? ? return # 結(jié)束函數(shù)的執(zhí)行,返回到它被調(diào)用的地方
? ? # 沒有在循環(huán)內(nèi)部結(jié)束程序,說明不存在沒有被預(yù)訂的座位
? ? print("非常抱歉??,所有座位都被訂滿了,無法為您保留座位")

3.3 film_selector.py

先來解決ling一項(xiàng)任務(wù):電影選擇系統(tǒng)。出于人性化考慮,我們希望用戶既可以輸入序號(hào)選擇觀看電影,也可以輸入 x 選擇退出系統(tǒng)。為此,我們需要完成下面兩樣需求:

  • 和選座系統(tǒng)一樣,我們可以把“選擇電影場(chǎng)次”功能抽象成一個(gè)類,稱為 電影選擇系統(tǒng)。
  • 而根據(jù)用戶選擇,預(yù)訂某一場(chǎng)次的座位,實(shí)際上是先調(diào)用 電影選擇系統(tǒng) 選擇電影,再調(diào)用 選座系統(tǒng) 預(yù)訂座位。這中間涉及到多次類的實(shí)例化與方法調(diào)用,為了更清晰地組織代碼,我們將這部分內(nèi)容也抽象成一個(gè)類,稱為 控制系統(tǒng)。
import time
?
class FilmSelector:
? # 展示所有可選項(xiàng)
? def display_options(self, films):
? ? print("今日影院排片列表:")
? ? print('+================+')
? ? # 按行打印每部電影
? ? for i in range(len(films)):
? ? ? print('{} - {}'.format(i + 1, films[i]['name']))
? ? ? time.sleep(0.2)
? ? # 打印退出選項(xiàng)
? ? 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('你的選擇是?')
? ? # 當(dāng)不符合要求時(shí),循環(huán)獲取新的選項(xiàng)
? ? while choice not in valid_choice:
? ? ? choice = input('沒有按照要求輸入哦,請(qǐng)重新輸入')
? ? # 返回用戶做出的選擇
? ? 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()
? ? # 根據(jù)用戶選擇,執(zhí)行不同流程
? ? if self.choice != 'x':
? ? ? # 為指定場(chǎng)次預(yù)訂座位
? ? ? self.choose_seat()
? ? # 打印結(jié)束語
? ? self.bye()
?
? # 用戶選擇想觀看的電影
? def choose_film(self):
? ? # 實(shí)例化 FilmSelector 類
? ? selector = FilmSelector()
? ? # 展示所有用戶可以選擇的選項(xiàng)
? ? selector.display_options(self.films)
? ? # 通過 get_choice() 方法獲取用戶選擇
? ? self.choice = selector.get_choice(self.films)
?
? # 為指定場(chǎng)次預(yù)訂座位
? def choose_seat(self):
? ? # 取出用戶所選擇的電影
? ? film = self.films[int(self.choice) - 1]
? ? # 取出所選擇電影的電影名、座位表、宣傳畫
? ? name = film['name']
? ? seats_list = film['seats']
? ? symbol = film['symbol']
?
? ? # 打印提示信息和電影宣傳畫
? ? print('正在為您預(yù)訂電影《{}》的座位...'.format(name))
? ? time.sleep(0.7)
? ? print(symbol)
? ? time.sleep(0.7)
?
? ? # 打印預(yù)訂座位的方法列表
? ? print('支持的座位預(yù)訂方式如下:')
? ? time.sleep(0.7)
? ? print('+==========================+')
? ? print("1 - 指定行列號(hào)預(yù)定座位")
? ? print("2 - 給我預(yù)訂一個(gè)最靠前的座位!")
? ? print('+==========================+')
? ? time.sleep(0.7)
? ? print('')
?
? ? # 獲取座位預(yù)訂方式
? ? method = input('請(qǐng)選擇座位預(yù)訂方式')
? ? # 定義符合要求輸入列表 valid_method
? ? valid_method = ['1','2']
? ? # 當(dāng)不符合要求時(shí),循環(huán)獲取新的選項(xiàng)
? ? while method not in valid_method:
? ? ? method = input('沒有按照要求輸入哦,請(qǐng)重新輸入')
?
? ? # 實(shí)例化 SeatBooking 類
? ? booking = SeatBooking()
? ? # 打印所有座位的預(yù)訂信息
? ? booking.check_bookings(seats_list)
? ? # 方法 1:指定行列號(hào)
? ? if method == '1':
? ? ? booking.book_seat(seats_list)
? ? # 方法 2:預(yù)訂最靠前的座位
? ? else:
? ? ? booking.book_seat_at_front(seats_list)
?
? # 打印歡迎語
? def welcome(self):
? ? print('+============================+')
? ? print('+ ? ? ?歡迎來到時(shí)光電影院 ? ? ? +')
? ? print('+============================+')
? ? print('')
? ? time.sleep(0.7)
?
? # 打印結(jié)束語
? def bye(self):
? ? print('')
? ? time.sleep(0.7)
? ? print('+============================+')
? ? print('+ ? ?已經(jīng)退出系統(tǒng),下次見!?? ? ?+')
? ? print('+============================+')
?
?
# 實(shí)例化 Controller 類
s = Controller(infos)

到此這篇關(guān)于利用Python實(shí)現(xiàn)電影訂票系統(tǒng)的文章就介紹到這了,更多相關(guān)Python電影訂票系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論