<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)!

          共 11215字,需瀏覽 23分鐘

           ·

          2023-03-01 18:14

          來源丨Python小二

          一、效果展示

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


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

          d063783b8592a096f965d6abc6a435aa.webp

          三、代碼分解

          3.1 infos.py

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

          選座系統(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('你的選擇是?')
          ????#?當不符合要求時,循環(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']
          ????#?當不符合要求時,循環(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)

          ----------

          贈書福利!

              
                


          
                              
          
                                

          編輯推薦:


          
                              
          
                                

          1.每章通過生活場景引入編程知識,讓讀者掌握Python在生活中的應(yīng)用,輕松入門;

          2.書中設(shè)計了“觀察與思考”“知識加油箱”等模塊,問題導向,幫助讀者理解編程思維;

          3.每章后通過一個綜合案例,幫助讀者回顧本章所學,活學活用;

          4.每章提供課后習題,幫助讀者鞏固所學知識;

          5.提供配套代碼等學習資源下載。

          
                              
          
                                

          贈書規(guī)則:

          1. 朋友圈點贊送書,第8、18、28、28、48名點贊的送

          2. 3月3日開獎


          瀏覽 54
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产乱伦a片视频 | 高清视频无码免费 | 欧美成人片网站 | 翔田千里无码A片 | 天天插日日干 |