<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3786字,需瀏覽 8分鐘

           ·

          2022-05-25 04:44


          大家好,今天咱們一起來實現(xiàn)一個簡易的電影訂票系統(tǒng),所謂麻雀雖小五臟俱全,跟著完成下來還是能學(xué)習(xí)到很多知識的

          一、效果展示

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

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

          三、代碼分解

          3.1 infos.py

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

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

          3.2 seat_book.py

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

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

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

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

          3.3 film_selector.py

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

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

          如果本文對你有幫助的話,請不要吝嗇你的贊,謝謝!




          推薦閱讀:

          入門:?最全的零基礎(chǔ)學(xué)Python的問題? |?零基礎(chǔ)學(xué)了8個月的Python??|?實戰(zhàn)項目?|學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評,電影《后來的我們》?|?38年NBA最佳球員分析?|? ?從萬眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個海量小姐姐素描圖?|碟中諜這么火,我用機(jī)器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!


          AI:?會做詩的機(jī)器人?|?給圖片上色?|?預(yù)測收入?|?碟中諜這么火,我用機(jī)器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          小工具:?Pdf轉(zhuǎn)Word,輕松搞定表格和水印!?|?一鍵把html網(wǎng)頁保存為pdf!|??再見PDF提取收費!?|?用90行代碼打造最強PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換?|?制作一款釘釘?shù)蛢r機(jī)票提示器!?|60行代碼做了一個語音壁紙切換器天天看小姐姐!



          年度爆款文案

          點閱讀原文,看B站我的視頻!

          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产强 暴 疼 哭 处 | 久久久久久米奇影视 | 成人99视频 | 久久久精品少妇 | 久久午夜无码鲁丝片午夜精1 |