Python的創始人爲Guido van Rossum。1989年聖誕節期間,在阿姆斯特丹,Guido爲了打發聖誕節的無趣,決心開發一個新的腳本解釋程序,作爲ABC 語言的一種繼承。之因此選中Python(大蟒蛇的意思)做爲程序的名字,是由於他是一個叫Monty Python的喜劇團體的愛好者。html
ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC 這種語言很是優美和強大,是專門爲非專業程序員設計的。可是ABC語言並無成功,究其緣由,Guido 認爲是非開放形成的。Guido 決心在Python 中避免這一錯誤。同時,他還想實如今ABC 中閃現過但不曾實現的東西。python
就這樣,Python在Guido手中誕生了。能夠說,Python是從ABC發展起來,主要受到了Modula-3(另外一種至關優美且強大的語言,爲小型團體所設計的)的影響。而且結合了Unix shell和C的習慣。linux
Python 已經成爲最受歡迎的程序設計語言之一。2011年1月,它被TIOBE編程語言排行榜評爲2010年度語言。自從2004年之後,python的使用率是呈線性增加 。c++
1、python安裝git
windows系統:程序員
一、下載安裝包 https://www.python.org/downloads/ 二、安裝 默認安裝路徑:C:\python35 三、配置環境變量 【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】 如:原來的值;C:\python35,切記前面有分號
linux系統:github
無需安裝,原裝Python環境 ps:若是自帶2.6,請更新至3.0以上 環境:yum install openssl-devel gcc++ gcc 可直接安裝pip 更新版本到3.5.2 下載:wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz 解壓:tar zxvf Python-3.5.2.tgz 編譯:cd Python-3.5.2 ./configure --prefix=/usr/local/python3.5 安裝:make && make install 默認安裝位置/usr/local/lib/python3.5 執行命令python3.5進入到運行環境 mv /usr/bin/python /usr/bin/python2.6.6 ln -s /usr/local/python3.5/bin/python3.5 /usr/bin/python 修改yum環境 vi /usr/bin/yum 改成以下內容 #!/usr/bin/python2.6.6
pip安裝:數據庫
windows: 1.在如下地址下載最新的PIP安裝文件:http://pypi.python.org/pypi/pip#downloads 2.下載pip-9.01.tar.gz (md5, pgp)完成以後,解壓到一個文件夾,用CMD控制檯進入解壓目錄,輸入:python setup.py install 3.安裝好以後,咱們直接在命令行輸入pip,一樣會顯示‘pip’不是內部命令,也不是可運行的程序。由於咱們尚未添加環境變量 C:\Python27\Scripts linux: 一、官網下載pip安裝包 https://pypi.python.org/pypi/pip 二、解壓下載的文件 tar zxvf pip-9.0.1.tar.gz 三、安裝 python setup.py install 四、執行pip命令進行驗證 ln -s /usr/local/python3.5/bin/pip3 /usr/bin/pip3
python2.7 首先下載並安裝setuptools: wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py sudo python ez_setup.py --insecure
python3.7 依賴包https://github.com/pyenv/pyenv/wiki 編程
在 /home/python/ 目錄下建立 hello.py 文件,內容以下:bootstrap
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian print ("Hello World!")
執行: ./hello.py 注:執行前需給予 hello.py 執行權限,chmod 755 hello.py
① 聲明一個變量name,變量name的值爲:「lzl」
#!/usr/bin/env python # -*- coding: utf-8 -*- name = "lzl"
② 變量命名的規則
變量定義的規則:
變量名只能是 字母、數字或下劃線的任意組合
變量名的第一個字符不能是數字
如下關鍵字不能聲明爲變量名
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global',
'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
③ 擴展 (給變量name1賦值Alex li,變量name2賦值爲變量name1,name1重賦值Jack Chen,此時name2的值爲多少?)
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian name1 = "Alex Li" name2 = name1 print(name1, name2) name1 = "Jack Chen" print("What is the value of name2 now?")
由圖所示,因此最後name1的值爲Jack Chen,name2的值爲Alex li
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號。
顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多
UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),若是是以下代碼的話:
報錯:ascii碼沒法表示中文
#!/usr/bin/env python print "你好,世界"
改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼,即:
#!/usr/bin/env python # -*- coding: utf-8 -*- print "你好,世界"
注:python2.x版本,默認支持的字符編碼爲ASCll python3.x版本,默認支持的是Unicode,不用聲明字符編碼能夠直接顯示中文
跟用戶進行交互,並把輸入的信息打印出來
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian ###########用戶交互及字符串拼接################ # python2.X與python3.X區別: python2.X raw_input = python3.X input # 提示用戶輸入姓名、年齡、工做、工資並以信息列表的形式打印出 name = input("Please input your name:") age = int(input("Please input your age:")) #str強制轉換爲int job = input("Please input your job:") salary = input("Please input your salary:") info1 = ''' ------------ Info of %s --------- Name:%s Age:%d Job:%s Salary:%s ''' %(name,name,age,job,salary) #%s檢測數據類型爲字符串,%d檢測數據類型爲整數,%f檢測數據類型爲浮點數 強制 print(info1) info2 = ''' ------------ Info of {_Name} --------- Name:{_Name} Age:{_Age} Job:{_Job} Salary:{_Salary} ''' .format(_Name=name, _Age=age, _Job=job, _Salary=salary) print(info2) info3 = ''' ------------ Info of {0} --------- Name:{0} Age:{1} Job:{2} Salary:{3} ''' .format(name,age,job,salary) print(info3)
① 實例:用if語句驗證用戶登陸,密文密碼
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #############驗證用戶登陸-密文密碼############## # 提示輸入用戶名密碼 # 驗證用戶名密碼 # 若是錯誤,則輸出用戶名密碼錯誤 # 若是成功,則輸出歡迎,xxx! import getpass #標準模塊,import調用 name = input("Please input your name:") password = getpass.getpass("Please input your password:") if name == "lzl" and pwd == "lzl@123": print ("Welcome to,lzl!") else: print ("The user name and password mistake")
② 實例:用if語句實現猜幸運數字遊戲
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian ##############猜幸運數字################ # 提示用戶輸入猜的幸運數字(1-100) # 根據輸入的數字作判斷 # 若是猜對,輸出恭喜你猜對了 # 若是猜的數字大了,輸出數字往小點猜 # 不然,輸出數字往大點猜 lucky_num = 66 guess_num = int(input("Please enter your guess lucky number(1-100):")) if guess_num == lucky_num: print ("Congratulations you guessed it!") elif guess_num > lucky_num : print ("Think it smaller...") else: print ("Think it bigger...")
① 實例:猜數字遊戲升級版(循環猜數字,直到猜到爲止)
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian ##############猜幸運數字################ lucky_num = 66 # 設置幸運數字 while True: # while循環: # 輸入猜的的幸運數字範圍1-100 guess_num = int(input("Please enter your guess lucky number(1-100):")) if guess_num == lucky_num: # 若是猜對,輸出恭喜你猜對了,並退出 print ("Congratulations you guessed it!") break #break 結束循環 continue 跳出本次循環,繼續下次循環 exit 結束程序 elif guess_num > lucky_num : # 若是猜的數字大了,輸出數字往小點猜 print ("Think it smaller...") else: # 不然,輸出數字往大點猜 print ("Think it bigger...")
② 實例:猜數字遊戲完善版(循環猜數字,容許猜三次機會)
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian ##############猜幸運數字+次數限制################ lucky_num = 66 # 設置幸運數字 count = 0 # 設置初始值count=0 while count < 3 : # while判斷count是否小於3,若是小於3則: # 輸入猜的的幸運數字範圍1-100 guess_num = int(input("Please enter your guess lucky number(1-100):")) if guess_num == lucky_num: # 若是猜對,輸出恭喜你猜對了,並退出 print ("Congratulations you guessed it!") break #break 結束循環 continue 跳出本次循環,繼續下次循環 exit 結束程序 elif guess_num > lucky_num : # 若是猜的數字大了,輸出數字往小點猜 print ("Think it smaller...") else: # 不然,輸出數字往大點猜 print ("Think it bigger...") count += 1 #每次循環結束count加1 else: print ("You tried so many times!") #while循環超過三次,則輸出試過太屢次了
實例:用for循環實現猜數字遊戲,限制三次機會
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian ##############猜幸運數字+次數限制################ lucky_num = 66 # 設置幸運數字 for i in range(3): # while判斷count是否小於3,若是小於3則: # 輸入猜的的幸運數字範圍1-100 guess_num = int(input("Please enter your guess lucky number(1-100):")) if guess_num == lucky_num: # 若是猜對,輸出恭喜你猜對了,並退出 print ("Congratulations you guessed it!") break #break 結束循環 continue 跳出本次循環,繼續下次循環 exit 結束程序 elif guess_num > lucky_num : # 若是猜的數字大了,輸出數字往小點猜 print ("Think it smaller...") else: # 不然,輸出數字往大點猜 print ("Think it bigger...") else: print ("You tried so many times!") #while循環超過三次,則輸出試過太屢次了
① 編寫登錄接口 要求:
# 流程圖以下:
# login_interface.py 程序代碼
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian ################登陸接口程序################ # -*- 運行環境python3.5.2 -*- #user_information、locked_information、day1_login_interface.py三個文件拷貝到同一級目錄 #受權:chmod 755 day1_login_interface.py #執行:python day1_login_interface.py ####記錄可登陸用戶、密碼信息文件user_information#### # Dave dave123 # John john123 # Luffy luffy123 ####記錄被鎖定的用戶信息文件locked_information#### # lzl # Alex # Count = 1 #設置計數器,統計下面第一個while大循環的次數 賦值變量Count,初始值爲1 Last_user = "" #針對上次登陸的用戶名進行記錄,若是連續三次登陸錯誤的用戶名是一致的話才進行鎖定 #賦值變量Last_user,初始值爲空 Match_count = 1 #統計Last_user與上次登陸的用戶名匹配的次數,變量Match_count初始值爲1 while True: Locked = open("locked_information", "r") # 讀取被鎖定用戶名信息文件 User_pwd = open("user_information", "r") # 讀取可登陸的用戶、密碼信息文件 User = input("Please enter the login username:") #提示用戶輸入登陸用戶名並賦值給User Passwd = input("Please enter login password:") # 提示用戶輸入登陸密碼並賦值給Passwd if len(User) == 0: print("Error:Enter the user is null! please try again..") continue if Last_user == User: #if語句判斷,本次登陸的用戶名跟上次登陸的用戶名是否匹配 Match_count +=1 #若是匹配成功,表示兩次連續登陸的用戶名一致,Match_count計數加1 else: #若是匹配失敗,Match_count計數恢復爲初始值1 Match_count = 1 Re_count = 3 - Count #設置變量Re_count爲還進行登陸的剩餘次數,判斷登陸失敗後會用到 for Blacklist in Locked.readlines(): #for循環讀取被鎖定用戶名,生成變量Blacklist Blacklist = Blacklist.strip("\n") #對變量Blacklist進行去換行符操做 if User == Blacklist: #判斷若是輸入的用戶名在Blacklist中,則提示用戶被鎖定並退出登陸 print ("Login username ",User," is locked, login fails...") exit() #退出程序 for i_f_m in User_pwd.readlines(): #for循環讀取可登陸用戶、密碼信息文件,賦值變量i_f_m i_f_m = (i_f_m.strip("\n")).split() #對變量i_f_m進行先去換行符,而後以空格符分割爲列表的操做 if User == i_f_m[0] and Passwd == i_f_m[1]: #對登陸用戶名和密碼進行匹配,二者都匹配成功則顯示恭喜登錄成功 print ("Congratulations to login successful!") exit() #退出程序 print(User,Passwd) else: if Re_count > 0 : #驗證上面for循環匹配失敗而且剩餘登陸次數大於0後,提示錯誤和剩餘次數 #若是去掉if判斷,則在匹配用戶鎖定時打印信息重合,放到下面while循環裏面則會添加多餘輸出 print("Error: The username and password mistate! You can also try", Re_count, "times...") while Re_count > 0 : #while循環語句,重試登陸次數大於0時,提示用戶是否還要繼續登錄 If_cont = input("Whether or not to continue to login?(Y/N):") if If_cont == "Y": #匹配字符Y break #跳出當前while,從新輸入用戶名密碼 elif If_cont == "N": #匹配字符N print ("-- Bye --") exit() #終止程序 else: #字符輸入錯誤,從新提示輸入正確的字符Y 和 N print("* Please enter 【Y】 or 【N】 *") continue #跳出當前循環執行下次循環 else: #while循環語句,當用戶重試登陸次數爲0時,執行下面語句 if Match_count == 3: #連續三次輸入的用戶名一致,把用戶名加入到黑名單 Locked = open("locked_information", "a") #對文件locked_information追加寫操做 Locked.write(User + "\n") #把用戶名寫入到黑名單並執行下換行符 print("Error: The username and password mistate! The current user ",User," is locked...") break #提示鎖定用戶並退出程序 else: #連續三次輸入的用戶名不一致,提示用戶名密碼錯誤,不進行鎖定 print ("Error: The username and password mistate! Bye-bye!") break #退出程序 Count +=1 #循環結束,Count計數加1 Last_user = User #循環結束,Last_userc從新賦值 Locked.close() User_pwd.close()
# 程序 readme
# 這是一個模擬真實用戶登陸系統的程序 ### 做者介紹: * author:lzl ### 博客地址: * http://www.cnblogs.com/lianzhilei/p/5703675.html ### 實現效果: * user_information文件記錄了可登陸用戶名和密碼,每次登陸只有徹底匹配文件中的用戶名和密碼才能登陸 * locked_information文件記錄了被鎖定的用戶,每次登陸輸入被鎖定的用戶,會提示當前用戶被鎖定,並退出 * 用戶連續三次登陸失敗且三次輸入的用戶名同樣,會顯示當前用戶被鎖定,退出程序而且把用戶名記錄到locked_information * 用戶連續三次登陸失敗,但三次的用戶名不同,提示登陸失敗,退出程序用戶名不鎖定 * 前兩次登陸失敗時可選擇是否還要繼續登陸,登陸失敗時會顯示剩餘登陸次數 ### Bug 可完善的地方: * 隨意輸入任何用戶名均可進行登陸,即便不存在與user_information文件中也可被鎖定 * 輸入的密碼時能夠改爲密文的形式 ### 運行環境: * Python3.0+ 最佳Python3.5.2 ### 目錄結構: Day1 ├── 登陸接口 │ ├── day1_login_interface.py │ └── locked_information │ ├── user_information │ ├── login_interface.png │ └── readme ### linux 運行說明: * user_information、locked_information、day1_login_interface.py拷貝到同一級目錄下 * 加執行權限 chmod 755 day1_login_interface.py * 執行程序 python day1_login_interface.py
② 多級菜單,查詢街道/地區郵政編碼
# 流程圖以下
# multistage_menu.py程序代碼以下:
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian ################多級菜單,查詢街道/地區郵政編碼################ # -*- 運行環境python3.5.2 -*- #受權:chmod 755 day1_multistage_menu.py #執行:python day1_multistage_menu.py #注:定義Main_menu主菜單 字典套字典套列表形式 Main_menu = { #定義主菜單Main_menu做爲數據庫 '北京':{ '石景山區':['八寶山街道','老山街道','八角街道','古城街道','蘋果園街道','金頂街街道','廣寧街道','魯谷社區'], '朝陽區':['和平街街道','朝外街道','勁鬆街道','建外街道','呼家樓街道','八里莊街道','三里屯街道','潘家園街道'], '昌平區':['城北街道','城南街道','天通苑北街道','天通苑南街道','霍營街道','回龍觀街道','龍澤園街道','史各莊街道'], '東城區':['安定門街道','建國門街道','東直門街道','天壇街道','東四街道','龍潭街道','前門街道','景山街道'], '海淀區':['清華園街道','香山街道','清河街道','上地街道','萬柳地區','中關村街道','海淀街道','學院路街道'] }, '上海':{ '黃浦區':['南京東路街道','外灘街道','半淞園路街道','小東門街道','豫園街道','老西門街道','五里橋街道','淮海中路街道'], '浦東新區':['濰坊新村街道','陸家嘴街道','周家渡街道','塘橋街道','洋涇街道','東明路街道','花木街道','浦興路街道'], '徐彙區':['湖南路街道','天平路街道','楓林路街道','徐家彙街道','斜土路街道','長橋街道','龍華街道','田林街道'], '長寧區':["華陽路街道","新華路街道","江蘇路街道","天山路街道","周家橋街道","虹橋街道","仙霞新村街道","程家橋街道"], '楊浦區':['定海路街道','平涼路街道','江浦路街道','四平路街道','控江路街道','長白新村街道','延吉新村街道','殷行街道'] }, '香港':{ '香港島':['中西區','灣仔區','東區','南區','石澳','大浪灣','夏萍灣','龜背灣'], '九龍半島':['油尖旺區','深水埗區','九龍城區','黃大仙區','觀塘區','維多利亞港','旺角','新蒲崗'], '新界':['北區','大埔區','沙田區','西貢區','荃灣區','屯門區','元朗區','葵青區'], '港島區':['中環','灣仔','南區','太平山','尖沙咀','鑽石山','山頂','大嶼山'], '九龍區':['龍門','九龍','侯王廟','萬佛寺','東普陀','青松觀','妙法寺','靈渡寺'] } } import random #調用random,生成郵編碼 while True: Num_ct = 1 #城市ID序號,初始值1 Dic_city = {} #定義字典,初始值空 Dic_county = {} Dic_street = {} print(" -*- 郵政編碼查詢系統 -*-") for City in Main_menu.keys(): #循環 把可選的城市賦值給變量City print ("",Num_ct,City) #打印ID序號和城市名 Dic_city[Num_ct] = City #綁定ID序號和城市名,生成字典Dic_city Num_ct +=1 #每次循環ID序號+1 print( " q", "退出程序") City_id = input("請輸入要查詢城市的ID序號 :") #for循環結束,輸入要選擇的城市ID 注:此時輸入的類型爲字符串 if City_id == "q": # 判斷輸入是否爲q 退出程序 print(" -*- Bye-bye! -*-") exit() elif City_id in ['1','2','3']: #匹配輸入是否爲1,2,3 City_id = int(City_id) #字符類型轉換 注:若是不轉換,下面字典匹配不到key值 Sec_menu = (Main_menu.get((Dic_city.get(City_id)))) #定義二級菜單,生成二級數據庫 while True: #while 循環 Num_co = 1 #市區ID序號,初始值1 for County in Sec_menu.keys(): #循環 把可選的市區賦值給變量County print("",Num_co, County) #打印ID序號和市區名 Dic_county[Num_co] = County #綁定ID序號和市區名,生成字典Dic_county Num_co += 1 #每次循環ID序號+1 print(" b", "返回上級從新選擇城市", "\n", "q", "退出程序") County_id = input("請輸入要查詢城區的ID序號 :") #輸入要選擇的市區ID if County_id == "b": #判斷輸入是否爲b 返回上級菜單 break elif County_id == "q": #判斷輸入是否爲q 退出程序 print(" -*- Bye-bye! -*-") exit() elif County_id in ['1','2','3','4','5']: #判斷輸入是否爲1-5 County_id = int(County_id) #字符類型轉換 Third_menu = (Sec_menu.get((Dic_county.get(County_id)))) #定義三級菜單,生成三級數據庫 while True: #while 循環 Num_st = 1 #街道數字標號,初始值1 for Street in Third_menu: #循環 把可選的街道賦值給變量Street print ("",Num_st,Street) #打印ID序號和街道名 Dic_street[Num_st] = Street #綁定ID序號和市區名,生成字典Dic_street Num_st +=1 #每次循環ID序號+1 print (" b","返回上級從新查詢城區","\n","q","退出程序") Street_id = input("請輸入要查詢街道/區域的ID序號 :") #輸入要選擇的街道ID序號 if Street_id == "b": #判斷輸入是否爲b 返回上級菜單 break elif Street_id == "q": #判斷輸入是否爲q 退出程序 print(" -*- Bye-bye! -*-") exit() elif Street_id in ['1', '2', '3', '4', '5','6','7','8']: #判斷輸入是否爲1-8 Street_id = int(Street_id) #字符類型轉換 print("您查詢的地址:",Dic_city.get(City_id),Dic_county.get(County_id),Dic_street.get(Street_id), " 郵政編碼爲:",random.randint(100000,300000)) #查詢成功 輸出 exit() #查詢成功 退出 ####留位####注:若是還行輸入成功後加判斷是否繼續查詢,可在此加代碼 else: #輸入格式錯誤,提示 print(" 輸入的格式錯誤!請從新輸入數字 1 & 2 & ... & 7 & 8 或字符 b & q") else: #輸入格式錯誤,提示 print(" 輸入的格式錯誤!請從新輸入數字 1 & 2 & 3 & 4 & 5 或字符 b & q") else: #輸入格式錯誤,提示 print(" 輸入的格式錯誤!請從新輸入數字 1 & 2 & 3 或 字符 q")
# 程序 readme
# 這是一個模擬查詢街道/地區郵政編碼的程序 # 多級菜單,使用了字典套字典套列表的形式 ### 做者介紹: * author:lzl ### 博客地址: * http://www.cnblogs.com/lianzhilei/p/5703675.html ### 實現效果: * 進入程序每級菜單可選擇要查詢的ID序號,選擇序號會進入到相應的地區子菜單中 * 每級菜單均可輸入b返回上一級菜單,輸入q可退出程序 * 任何一級菜單輸入錯誤的字符,會提示從新輸入ID序號 * 最後三級菜單選擇完畢,輸入選擇地區的郵政編碼,查詢完成,退出程序 ### Bug 可完善的地方: * 郵政編碼由隨機數設定,數據不許確 * 因爲用到的字典是無序的,因此同一級菜單每次顯示的ID序號可能不同 ### 運行環境: * Python3.0+ 最佳Python3.5.2 ### 目錄結構: Day1 ├── 三級菜單 │ ├── day1_multistage_menu.py │ ├── multistage_menu.png │ └── readme ### linux 運行說明: * 加執行權限 chmod 755 day1_multistage_menu.py * 執行程序 python day1_multistage_menu.py
BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiQUMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IklJIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiUlMwIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiV1MiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJSQyIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IlBTIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiREMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJEQiIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IlJNIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9XSwiaGFzaCI6IjQ3NzU1MTcvMCIsImdyYWNlUGVyaW9kRGF5cyI6MCwiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-iygsIMXTVeSyYkUxAqpHmymrgwN5InkOfeRhhPIPa88FO9FRuZosIBTY18tflChACznk3qferT7iMGKm7pumDTR4FbVVlK/3n1ER0eMKu2NcaXb7m10xT6kLW1Xb3LtuZEnuis5pYuEwT1zR7GskeNWdYZ0dAJpNDLFrqPyAPo5s1KLDHKpw+VfVd4uf7RMjOIzuJhAAYAG+amyivQt61I9aYiwpHQvUphvTwi0X0qL/oDJHAQbIv4Qwscyo4aYZJBKutYioZH9rgOP6Yw/sCltpoPWlJtDOcw/iEWYiCVG1pH9AWjCYXZ9AbbEBOWV71IQr5VWrsqFZ7cg7hLEJ3A==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==