一、前言 大家都喜歡看電影吧,一部新劇上場的時候往往會搶不到票,今天通過Python實現一個電影訂票系統,滿足你想看電影的心。 二、整體結構圖 三、代碼分解 3.1 infos.py 一部電影的詳細信息適合用 字典 結構來存儲,我們可以給字典里添加多個鍵值對來保存電影的名稱、座位表和宣傳時用的字元 ...
一、前言
大家都喜歡看電影吧,一部新劇上場的時候往往會搶不到票,今天通過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("非常抱歉