第六章例項與實戰
例項01:輸出每日一帖(共享版)
在 IDLE中建立一個名稱為 function_tips.py 的檔案,然後在該檔案中建立一個名稱為function_tips的函式,在該函式中,從勵志文字列表中獲取一條勵志文字並輸出,最後再呼叫函式function_tips()。
程式碼如下:
def function_tips(): ''' 功能:每天輸出一條勵志文字 ''' import datetime #定義列表 mot =["今天星期一:\n堅持下去不是因為我很堅強,而是因為我別無選擇", "今天星期二:\n含淚播種的人一定能笑著收穫", "今天星期三:\n做對的事情比把事情做對重要", "今天星期四:\n命運給予我們的不是失望之酒,而是機會之杯", "今天星期五:\n不要等到明天,明天太遙遠,今天就行動", "今天星期六:\n求知若飢,虛心若愚", "今天星期日:\n成功將屬於那些從不說“不可能”的人"] day = datetime.datetime.now().weekday() #獲取當前星期 print(mot[day]) function_tips() #呼叫函式
執行結果如下:
例項02:根據身高、體重計算BMI指數(共享版)
在IDLE中建立一個名稱為function_bmi.py的檔案,然後在該檔案中定義一個名稱為fun_bmi的函式,該函式包括3個引數,分別用於指定姓名、身高和體重,再根據公式:BMI=體重/(身高×身高)計算BMI指數,並輸出結果,最後在函式體外呼叫兩次fun_bmi函式。
程式碼如下:
def fun_bmi(person, height, weight): ''' 功能:根據身高和體重計算BMI指數 person:姓名 height:身高,單位:米 weight:體重,單位:千克 ''' print(person + "的身高" + str(height) + "米 \t 體重:" + str(weight) + "千克") bmi = weight / (height * height) print(person + "的BMI指數為:" + str(bmi)) #判斷身材是否合理 if bmi < 18.5: print("您的體重過輕 ~@_@\n") if bmi >= 18.5 and bmi < 24.9: print("正常範圍,注意保持(-_-)\n") if bmi >= 24.9 and bmi < 29.9: print("肥胖 ^@_@^\n") #呼叫函式 fun_bmi("路人甲", 1.83, 60) fun_bmi("路人乙", 1.60, 50)
執行結果如下:
例項03:根據身高、體重計算BMI指數(共享升級版)
在 IDLE中建立一個名稱為 function_bmi_upgrade.py的檔案,然後在該檔案中定義一個名稱為fun_bmi_upgrade的函式,該函式包括一個可變引數,用於指定包括姓名、身高和體重的測試人資訊,在該函式中將根據測試人資訊計算BMI指數,並輸出結果,最後在函式體外定義一個列表,並且將該列表作為fun_bmi_upgrade()函式的引數呼叫,程式碼如下:
程式碼如下:
def fun_bmi_upgrade(*person): for list1_person in list_person: for item in list1_person: person = item[0] height = item[1] weight = item[2] bmi = weight / (height * height) print('='*16+str(person)+'='*16) print(person+'的身高:'+str(height)+'米\t體重:'+str(weight)+'千克') print("您的BMI指數為:"+str(bmi)) if bmi<18.5: print("您的體重過輕\n") if bmi>=18.5 and bmi<=24.9: print("正常範圍,請注意保持\n") if bmi>24.9 and bmi<29.9: print("您的體重過重\n") if bmi>=29.9: print("肥胖\n") list_1 = [('夢夢',1.65,50),('小狗',1.72,54)] list_2 = [('零語',1.77,50),('黛蘭',1.72,66)] list_person = [list_1,list_2] fun_bmi_upgrade(list_person)
執行結果如下:
例項04:模擬結賬功能——計算實付金額
在IDLE中建立一個名稱為checkout.py的檔案,然後在該檔案中定義一個名稱為 fun_checkout的函式,該函式包括一個列表型別的引數,用於儲存輸入的金額,在該函式中計算合計金額和相應的折扣,並將計算結果返回,最後在函式體外通過迴圈輸入多個金額儲存到列表中,並且將該列表作為fun_checkout()函式的引數呼叫。
程式碼如下:
def fun_checkout(money): money_old = sum(money) money_new = money_old if money_old >= 500 and money_old <1000: money_new = '{:.2f}'.format(money_old * 0.9) elif money_old >= 1000 and money_old < 2000: money_new = '{:.2f}'.format(money_old * 0.8) elif money_old >= 2000 and money_old < 30000: money_new = '{:.2f}'.format(money_old * 0.7) elif money_old >=300: money_new = '{:.2f}'.format(money_old * 0.6) return money_old,money_new print('\n開始計算……\n') list_money = [] while True: inmoney = float(input('輸入商品金額(輸入0表示輸入完畢):')) if int(inmoney) == 0: break else : list_money.append(inmoney) money = fun_checkout(list_money) print('合計金額',money[0],'應付金額:',money[1])
執行結果如下:
例項05:一顆松樹的夢
在IDLE中建立一個名稱為differenttree.py的檔案,然後在該檔案中定義一個全域性變數pinetree,併為其賦初始值,再定義一個名稱為fun_christmastree的函式,在該函式中定義名稱為pinetree的區域性變數,並輸出,最後在函式體外呼叫fun christmastree()函式,並輸出全域性變數pinetree的值。
程式碼如下:
pinetree = '我是一顆松樹' def fun_christmastree(): print('掛上彩燈、禮物……我變成了一棵聖誕樹@^.^@') print('下雪了……\n') print('='*15+'開始做夢……'+'='*15+'\n') fun_christmastree() print('\n'+'='*16+'夢醒了……'+'='*16+'\n') print('我身上落滿雪花'+str(pinetree))
執行結果如下:
例項06:應用lambda實現對爬取到的秒殺商品資訊進行排序
在 IDLE中建立一個名稱為seckillsort.py的檔案,然後在該檔案中定義一個儲存商品資訊的列表,並輸出,接下來再使用列表物件的sort()方法對列表進行排序,並且在呼叫sort()方法時,通過lambda表示式指定排序規則,最後輸出排序後的列表。
程式碼如下:
bookinfo =[('不一樣的卡梅拉(全套)', 22.50, 120),('零基礎學Android', 65.10, 89.80), ('擺渡人', 23.40, 36.00),('福爾摩斯探案全集8冊', 22.50, 128)] print('爬取到的商品資訊:\n', bookinfo) bookinfo.sort(key = lambda x:(x[1], x[1] / x[2])) # 對x[1]第二個欄位升序排序,有重複的則再按x[1]/x[2]折扣比例降序排列 print('排序後的商品資訊:\n', bookinfo)
執行結果如下:
實戰一:導演為劇本選主角
模擬導演為劇本選主角,並輸出確定參演劇本主角的名字,效果如圖所示:
程式碼如下:
def actor(act): print(str(person)+'開始參演這個劇本') person = input('導演選定的主角是:') actor(person)
執行結果如下:
實戰二:模擬美團外賣商家的套餐
美團外賣的商家一般都會推出幾款套餐。例如,某米線店套餐:考神套餐13元,單人套餐9.9元,情侶套餐20元。程式設計實現輸出該米線店推出的套餐。效果如圖所示。
程式碼如下:
def taocan(p1,m1,p2,m2,p3,m3): print('米線店套餐如下: 1.'+p1+' 2.'+p2+' 3.'+p3) print(p1 + m1) print(p2 + m2) print(p3 + m3) taocan('考神套餐','13元','單人套餐','9.9元','情侶套餐','20元')
執行結果如下:
實戰三:根據生日判斷星座
根據生日可以判斷出所屬星座。例如:生日為7月1日,屬於巨蟹座。程式設計實現根據輸入的出生月份和日期判斷所屬星座。效果如圖所示。
程式碼如下:
# 星座 list = ['摩羯座','水瓶座','雙魚座','白羊座','金牛座','雙子座', '巨蟹座','獅子座','處女座','天秤座','天蠍座','射手座','摩羯座'] # 1、白羊座:3月21日~4月19日 2、金牛座:4月20日~5月20日 # 3、雙子座:5月21日~6月21日 4、巨蟹座:6月22日~7月22日 # 5、獅子座:7月23日~8月22日 6、處女座:8月23日~9月22日 # 7、天秤座:9月23日~10月23日 8、天蠍座:10月24日~11月22日 # 9、射手座:11月23日~12月21日 10、摩羯座:12月22日~1月19日 # 11、水瓶座:1月20日~2月18日 12、雙魚座:2月19日~3月20日 # 日期 d = [20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22] def starSign(month, day): #如果日期小於月份減一就是前一個星座,否則就是本月所對應的星座 if day < d[month-1]: return list[month-1] else: return list[month] #呼叫函式 month = int(input("請輸入月份:")) day = int(input("請輸入日期:")) print(str(month) + "月" + str(day) + "日星座為:" + starSign(month, day))
執行結果如下:
實戰四:將美元轉換為人民幣
實現將美元轉換為人民幣。美元與人民幣之間的匯率經常變更,本實戰按1美元等於6.28人民幣計算。效果如圖所示。
執行結果如下:
編寫程式實現功能:判斷手機號碼屬於移動、電信或者聯通
程式碼如下:
#判斷輸入的手機號碼是中國移動/連通/電信 import re pattern1 = r'(13[4-9]\d{8})$|(14[78]\d{8})$|(15[012789]\d{8})$|(17[28]\d{8})$|(18[23478]\d{8})$|(19[578]\d{8})$' #中國移動匹配手機號:134~139 150~152 157~159 172 178 182~184 187~188 195 197~198 pattern2 = r'(13[3]\d{8})$|(14[9]\d{8})$|(15[3]\d{8})$|(17[37]\d{8})$|(18[019]\d{8})$|(19[013]\d{8})$' #中國電信匹配手機號:133 149 153 173 177 180 181 189 190 191 193 199 pattern3 = r'(13[012]\d{8})$|(14[56]\d{8})$|(15[56]\d{8})$|(16[6]\d{8})$|(17[56]\d{8})$|(18[56]\d{8})$|(19[6]\d{8})$' #中國聯通匹配手機號:130 131 132 145 146 155 156 166 175 176 185 186 196 while True: mobile1 = input("請輸入您的手機號碼:") match1 = re.match(pattern1, mobile1) match2 = re.match(pattern2, mobile1) match3 = re.match(pattern3, mobile1) if match1 != None: print(mobile1, '是有效的中國移動手機號碼。') break elif match2 != None: print(mobile1, '是有效的中國電信手機號碼。') break elif match3 != None: print(mobile1, '是有效的中國聯通手機號碼。') break else: print("你的電話可能屬於虛擬運營商") break
執行結果如下:
在 IDLE中建立一個名稱為 function_tips.py 的檔案,然後在該檔案中建立一個名稱為function_tips的函式,在該函式中,從勵志文字列表中獲取一條勵志文字並輸出,最後再呼叫函式function_tips()。
程式碼如下:
def function_tips(): ''' 功能:每天輸出一條勵志文字 ''' import datetime #定義列表 mot =["今天星期一:\n堅持下去不是因為我很堅強,而是因為我別無選擇", "今天星期二:\n含淚播種的人一定能笑著收穫", "今天星期三:\n做對的事情比把事情做對重要", "今天星期四:\n命運給予我們的不是失望之酒,而是機會之杯", "今天星期五:\n不要等到明天,明天太遙遠,今天就行動", "今天星期六:\n求知若飢,虛心若愚", "今天星期日:\n成功將屬於那些從不說“不可能”的人"] day = datetime.datetime.now().weekday() #獲取當前星期 print(mot[day]) function_tips() #呼叫函式
執行結果如下:
例項02:根據身高、體重計算BMI指數(共享版)
在IDLE中建立一個名稱為function_bmi.py的檔案,然後在該檔案中定義一個名稱為fun_bmi的函式,該函式包括3個引數,分別用於指定姓名、身高和體重,再根據公式:BMI=體重/(身高×身高)計算BMI指數,並輸出結果,最後在函式體外呼叫兩次fun_bmi函式。
程式碼如下:
def fun_bmi(person, height, weight): ''' 功能:根據身高和體重計算BMI指數 person:姓名 height:身高,單位:米 weight:體重,單位:千克 ''' print(person + "的身高" + str(height) + "米 \t 體重:" + str(weight) + "千克") bmi = weight / (height * height) print(person + "的BMI指數為:" + str(bmi)) #判斷身材是否合理 if bmi < 18.5: print("您的體重過輕 ~@_@\n") if bmi >= 18.5 and bmi < 24.9: print("正常範圍,注意保持(-_-)\n") if bmi >= 24.9 and bmi < 29.9: print("肥胖 ^@_@^\n") #呼叫函式 fun_bmi("路人甲", 1.83, 60) fun_bmi("路人乙", 1.60, 50)
執行結果如下:
例項03:根據身高、體重計算BMI指數(共享升級版)
在 IDLE中建立一個名稱為 function_bmi_upgrade.py的檔案,然後在該檔案中定義一個名稱為fun_bmi_upgrade的函式,該函式包括一個可變引數,用於指定包括姓名、身高和體重的測試人資訊,在該函式中將根據測試人資訊計算BMI指數,並輸出結果,最後在函式體外定義一個列表,並且將該列表作為fun_bmi_upgrade()函式的引數呼叫,程式碼如下:
程式碼如下:
def fun_bmi_upgrade(*person): for list1_person in list_person: for item in list1_person: person = item[0] height = item[1] weight = item[2] bmi = weight / (height * height) print('='*16+str(person)+'='*16) print(person+'的身高:'+str(height)+'米\t體重:'+str(weight)+'千克') print("您的BMI指數為:"+str(bmi)) if bmi<18.5: print("您的體重過輕\n") if bmi>=18.5 and bmi<=24.9: print("正常範圍,請注意保持\n") if bmi>24.9 and bmi<29.9: print("您的體重過重\n") if bmi>=29.9: print("肥胖\n") list_1 = [('夢夢',1.65,50),('小狗',1.72,54)] list_2 = [('零語',1.77,50),('黛蘭',1.72,66)] list_person = [list_1,list_2] fun_bmi_upgrade(list_person)
執行結果如下:
例項04:模擬結賬功能——計算實付金額
在IDLE中建立一個名稱為checkout.py的檔案,然後在該檔案中定義一個名稱為 fun_checkout的函式,該函式包括一個列表型別的引數,用於儲存輸入的金額,在該函式中計算合計金額和相應的折扣,並將計算結果返回,最後在函式體外通過迴圈輸入多個金額儲存到列表中,並且將該列表作為fun_checkout()函式的引數呼叫。
程式碼如下:
def fun_checkout(money): money_old = sum(money) money_new = money_old if money_old >= 500 and money_old <1000: money_new = '{:.2f}'.format(money_old * 0.9) elif money_old >= 1000 and money_old < 2000: money_new = '{:.2f}'.format(money_old * 0.8) elif money_old >= 2000 and money_old < 30000: money_new = '{:.2f}'.format(money_old * 0.7) elif money_old >=300: money_new = '{:.2f}'.format(money_old * 0.6) return money_old,money_new print('\n開始計算……\n') list_money = [] while True: inmoney = float(input('輸入商品金額(輸入0表示輸入完畢):')) if int(inmoney) == 0: break else : list_money.append(inmoney) money = fun_checkout(list_money) print('合計金額',money[0],'應付金額:',money[1])
執行結果如下:
例項05:一顆松樹的夢
在IDLE中建立一個名稱為differenttree.py的檔案,然後在該檔案中定義一個全域性變數pinetree,併為其賦初始值,再定義一個名稱為fun_christmastree的函式,在該函式中定義名稱為pinetree的區域性變數,並輸出,最後在函式體外呼叫fun christmastree()函式,並輸出全域性變數pinetree的值。
程式碼如下:
pinetree = '我是一顆松樹' def fun_christmastree(): print('掛上彩燈、禮物……我變成了一棵聖誕樹@^.^@') print('下雪了……\n') print('='*15+'開始做夢……'+'='*15+'\n') fun_christmastree() print('\n'+'='*16+'夢醒了……'+'='*16+'\n') print('我身上落滿雪花'+str(pinetree))
執行結果如下:
例項06:應用lambda實現對爬取到的秒殺商品資訊進行排序
在 IDLE中建立一個名稱為seckillsort.py的檔案,然後在該檔案中定義一個儲存商品資訊的列表,並輸出,接下來再使用列表物件的sort()方法對列表進行排序,並且在呼叫sort()方法時,通過lambda表示式指定排序規則,最後輸出排序後的列表。
程式碼如下:
bookinfo =[('不一樣的卡梅拉(全套)', 22.50, 120),('零基礎學Android', 65.10, 89.80), ('擺渡人', 23.40, 36.00),('福爾摩斯探案全集8冊', 22.50, 128)] print('爬取到的商品資訊:\n', bookinfo) bookinfo.sort(key = lambda x:(x[1], x[1] / x[2])) # 對x[1]第二個欄位升序排序,有重複的則再按x[1]/x[2]折扣比例降序排列 print('排序後的商品資訊:\n', bookinfo)
執行結果如下:
實戰一:導演為劇本選主角
模擬導演為劇本選主角,並輸出確定參演劇本主角的名字,效果如圖所示:
程式碼如下:
def actor(act): print(str(person)+'開始參演這個劇本') person = input('導演選定的主角是:') actor(person)
執行結果如下:
實戰二:模擬美團外賣商家的套餐
美團外賣的商家一般都會推出幾款套餐。例如,某米線店套餐:考神套餐13元,單人套餐9.9元,情侶套餐20元。程式設計實現輸出該米線店推出的套餐。效果如圖所示。
程式碼如下:
def taocan(p1,m1,p2,m2,p3,m3): print('米線店套餐如下: 1.'+p1+' 2.'+p2+' 3.'+p3) print(p1 + m1) print(p2 + m2) print(p3 + m3) taocan('考神套餐','13元','單人套餐','9.9元','情侶套餐','20元')
執行結果如下:
實戰三:根據生日判斷星座
根據生日可以判斷出所屬星座。例如:生日為7月1日,屬於巨蟹座。程式設計實現根據輸入的出生月份和日期判斷所屬星座。效果如圖所示。
程式碼如下:
# 星座 list = ['摩羯座','水瓶座','雙魚座','白羊座','金牛座','雙子座', '巨蟹座','獅子座','處女座','天秤座','天蠍座','射手座','摩羯座'] # 1、白羊座:3月21日~4月19日 2、金牛座:4月20日~5月20日 # 3、雙子座:5月21日~6月21日 4、巨蟹座:6月22日~7月22日 # 5、獅子座:7月23日~8月22日 6、處女座:8月23日~9月22日 # 7、天秤座:9月23日~10月23日 8、天蠍座:10月24日~11月22日 # 9、射手座:11月23日~12月21日 10、摩羯座:12月22日~1月19日 # 11、水瓶座:1月20日~2月18日 12、雙魚座:2月19日~3月20日 # 日期 d = [20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22] def starSign(month, day): #如果日期小於月份減一就是前一個星座,否則就是本月所對應的星座 if day < d[month-1]: return list[month-1] else: return list[month] #呼叫函式 month = int(input("請輸入月份:")) day = int(input("請輸入日期:")) print(str(month) + "月" + str(day) + "日星座為:" + starSign(month, day))
執行結果如下:
實戰四:將美元轉換為人民幣
實現將美元轉換為人民幣。美元與人民幣之間的匯率經常變更,本實戰按1美元等於6.28人民幣計算。效果如圖所示。
執行結果如下:
編寫程式實現功能:判斷手機號碼屬於移動、電信或者聯通
程式碼如下:
#判斷輸入的手機號碼是中國移動/連通/電信 import re pattern1 = r'(13[4-9]\d{8})$|(14[78]\d{8})$|(15[012789]\d{8})$|(17[28]\d{8})$|(18[23478]\d{8})$|(19[578]\d{8})$' #中國移動匹配手機號:134~139 150~152 157~159 172 178 182~184 187~188 195 197~198 pattern2 = r'(13[3]\d{8})$|(14[9]\d{8})$|(15[3]\d{8})$|(17[37]\d{8})$|(18[019]\d{8})$|(19[013]\d{8})$' #中國電信匹配手機號:133 149 153 173 177 180 181 189 190 191 193 199 pattern3 = r'(13[012]\d{8})$|(14[56]\d{8})$|(15[56]\d{8})$|(16[6]\d{8})$|(17[56]\d{8})$|(18[56]\d{8})$|(19[6]\d{8})$' #中國聯通匹配手機號:130 131 132 145 146 155 156 166 175 176 185 186 196 while True: mobile1 = input("請輸入您的手機號碼:") match1 = re.match(pattern1, mobile1) match2 = re.match(pattern2, mobile1) match3 = re.match(pattern3, mobile1) if match1 != None: print(mobile1, '是有效的中國移動手機號碼。') break elif match2 != None: print(mobile1, '是有效的中國電信手機號碼。') break elif match3 != None: print(mobile1, '是有效的中國聯通手機號碼。') break else: print("你的電話可能屬於虛擬運營商") break
執行結果如下: