<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實(shí)現(xiàn)一個(gè)電影訂票系統(tǒng)!

          共 3788字,需瀏覽 8分鐘

           ·

          2022-05-12 23:41

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包

          來源丨Python小二

          一、效果展示

          通過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':?'黑客帝國',
          ????'
          symbol':?'''
          +=====================?黑客帝國?=====================+
          ???________????????????__??___??????__???????_?????
          ??/_??__/?/_??___?????/??|/??/___?_/?/______(_)??__
          ???/?/?/?__?\/?_?\???/?/|_/?/?__?`/?__/?___/?/?|/_/
          ??/?/?/?/?/?/??__/??/?/??/?/?/_/?/?/_/?/??/?/>???/_/?/_/?/_/\___/??/_/??/_/\__,_/\__/_/??/_/_/|_|??
          +====================?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è)搱龃坞娪暗念A(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)一樣,我們可以把“選擇電影場次”功能抽象成一個(gè)類,稱為 電影選擇系統(tǒng)。
          • 而根據(jù)用戶選擇,預(yù)訂某一場次的座位,實(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':
          ??????#?為指定場次預(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)
          ?
          ??#?為指定場次預(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)

          萬水千山總是情,點(diǎn)個(gè)????行不行



          1. Jupyter Lab 十大高生產(chǎn)力插件

          2. 有個(gè)大神級(jí)女朋友是什么體驗(yàn)





          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  国产精品久久久久久久成人午夜 | 狼人视频在线地址123 | 国产精品久久久久久高潮 | 最近中文字幕免费mv第一季歌词完整版 | 三级片在线观看视频网址 |