BMR的計算(Python)

基礎代謝率的計算是一個公式,男性和女性的計算不同,根據基本的計算公式可以用Python代碼實現不同的功能。

1.0:簡單的計算器,根據給定的具體數據進行計算。根據輸入的性別不同進行判斷(輸入的性別必須爲“男”或“女”,否則報錯),男性和女性分別執行不同的計算。

def main():
    gender = "男"
    weight = 70
    height = 175
    age = 25
    if gender=="男":
        gmr = 13.7 * weight + 5.0 * height - 6.8 * age + 66
    elif gender=="女":
        gmr = 9.6 * weight + 3.8 * height - 4.7 * age + 655
    else:
        gmr =- 1
    if gmr!=-1:
        print("基礎代謝率(大卡):",gmr)
    else:
        print("暫不支持該性別!")





if __name__=="__main__":
    main()

2.0:1.0 只能計算一個用戶的BMR,2.0 版本加入循環可以多次計算不同用戶的BMR。

def main():
    y_or_n = input("是否退出程序(退出請輸入yes,否則輸入no)?")
    while (y_or_n != "yes"):
        gender = input("性別:")
        #print(type(gender))
        weight = float(input("體重(kg):"))
        #print(type(weight))
        height = float(input("身高(cm):"))
        #print(type(height))
        age = int(input("年齡:"))
        #print(type(age))

        if gender=="男":
            gmr = 13.7 * weight + 5.0 * height - 6.8 * age + 66
        elif gender=="女":
            gmr = 9.6 * weight + 3.8 * height - 4.7 * age + 655
        else:
            gmr = -1
        if gmr!=-1:
            print("基礎代謝率(大卡):",gmr)
        else:
            print("暫不支持該性別!")
        print()#輸出空行
        y_or_n = input("是否退出程序(退出請輸入yes)?")


if __name__=="__main__":
    main()

       在while循環內,用戶可以根據系統提示依次輸入性別、體重、身高、年齡的信息,然後根據性別進行計算。爲了界面更加友好,系統會提示是否退出計算系統,而while循環的結束條件爲退出計算系統。另一個解決的問題爲:用戶在input()中輸入的體重、身高、年齡信息爲str,計算時需要轉化爲整型或浮點型,int() 和 float() 實現了這種轉化。

3.0:實現功能爲:(1)用戶可以一次輸入自己的所有信息,不必根據系統提示輸入多次。(2)1.0 和 2.0 版本的輸出結果不帶單位(大卡),3.0 實現了輸出帶單位的計算結果。

def main():
    y_or_n = input("是否退出程序(退出請輸入yes,否則輸入no)?")
    while (y_or_n != "yes"):
        print("請輸入以下個人信息,中間用空格隔開")
        person_str = input("性別:體重(kg):身高(cm):年齡:")
        person = person_str.split(" ")
        gender = person[0]
        weight = float(person[1])
        height = float(person[2])
        age = int(person[3])


        if gender=="男":
            gmr = 13.7 * weight + 5.0 * height - 6.8 * age + 66
        elif gender=="女":
            gmr = 9.6 * weight + 3.8 * height - 4.7 * age + 655
        else:
            gmr = -1
        if gmr!=-1:
            print("您的性別爲{},體重爲{}kg,身高爲{}cm,年齡爲{}歲".format(gender,weight,height,age))
            print("您的基礎代謝率爲{}大卡".format(gmr))
        else:
            print("暫不支持該性別!")
        print()#輸出空行
        y_or_n = input("是否退出程序(退出請輸入yes)?")


if __name__=="__main__":
    main()

       第一個功能的實現運用了.split() 函數。用戶根據提示依次輸入個人信息,用空格隔開。.split() 函數將str按空格分割,返回爲一個帶有用戶信息的列表,用列表切片實現了對用戶性別、體重、身高、年齡信息的提取;第二個功能的實現運用了.format() 函數,這是一個增強的格式化字符串函數,可以以“***大卡”的形式輸出計算結果,當然也可以用 print(gmr,"大卡") 輸出,不過這樣不具有整體性。 print("您的性別爲{},體重爲{}kg,身高爲{}cm,年齡爲{}歲".format(gender,weight,height,age)) 這裏也體現了.format() 函數的功能,還可以使系統界面更加友好。

4.0:處理異常操作問題。有些用戶會不安套路,輸入個人信息時不是系統的默認格式,這樣系統就會報錯,解決這樣的異常操作,需要用到 try-except。

(1)輸入體重、身高、年齡時輸入漢子形式,這樣用戶信息就不能轉化爲整型和浮點型,會出現ValueError錯誤。

(2)用戶輸入信息不完整,系統無法提取有效信息,會出現IndexError錯誤。

除了以上兩種錯誤,還可能出現一些無法預見的錯誤,爲保證系統正常運行,需要用except將這些錯誤排除在執行計算程序。

def main():
    y_or_n = input("是否退出程序(退出請輸入yes,否則輸入no)?")
    while (y_or_n != "yes"):
        print("請輸入以下個人信息,中間用空格隔開")
        person_str = input("性別:體重(kg):身高(cm):年齡:")
        person = person_str.split(" ")
        try:
            gender = person[0]
            weight = float(person[1])
            height = float(person[2])
            age = int(person[3])


            if gender=="男":
                gmr = 13.7 * weight + 5.0 * height - 6.8 * age + 66
            elif gender=="女":
                gmr = 9.6 * weight + 3.8 * height - 4.7 * age + 655
            else:
                gmr = -1
            if gmr!=-1:
                print("您的性別爲{},體重爲{}kg,身高爲{}cm,年齡爲{}歲".format(gender,weight,height,age))
                print("您的基礎代謝率爲{}大卡".format(gmr))
            else:
                print("暫不支持該性別!")

        except ValueError:
            print("請輸入正確的個人信息!")
        except IndexError:
            print("請輸入完整的個人信息!")
        except:
            print("系統有誤!")
        print()  # 輸出空行
        y_or_n = input("是否退出程序(退出請輸入yes)?")

if __name__=="__main__":
    main()

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章