1. 程式人生 > 其它 >第六章例項與實戰

第六章例項與實戰

例項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

 執行結果如下: