Python学习日记 – 面向未来的BMI计算

前言

新年快乐呀!随着春节假期来到尾声,大家的生活也逐渐回归正常,这段时间一直闲的没事,亲戚也很少走,我就写了我一直想写的BMI计算。

什么是BMI

身体质量指数,是BMI(Body Mass Index)指数,简称体质指数,是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。

计算公式为:BMI=体重÷身高2。(体重单位:千克;身高单位:米。)

BMI由19世纪中期的比利时通才凯特勒最先提出

摘自 百度百科

BMI在不同国家中,有不同的标准,其中 International Normal Standard20 – 25,此次我才用了 PRC Standard (中国标准),其中 PRC Normal Standard18.5 – 23.9

输出预览

其中带 #的部分是我的解释,正式运行是没有的
Hello!Nice to meet you what's your name?
Magneto    # 我输入的值

Ok!Magneto. Let's calculate your BMI and classification(adult)

Enter your weight(kg)
42    # 我输入的值

Enter your height(m)
1.65    # 我输入的值

Hi Magneto!Your BMI number is 15.426997245179065 

Oh!Magneto!You're underweight and BMI is below standerd.

The norm come from PRC
Press Enter to exit

全部代码

############################
### Date 2022 January 24 ###
### Author Magneto       ###
### Name BMI计算         <——>
### Facility iPad        ###
### Language Python      ###
############################
#欢迎界面
print("Hello!Nice to meet you what's your name?")    # 字串符
the_name = input()
print(f"\nOk!{the_name}. Let's calculate your BMI and classification(adult)")    # 字串符
#输入值
print("\nEnter your weight(kg)")
weight = input()
print("\nEnter your height(m)")
height = input()
#转化值
your_weight = float(weight)
your_height = float(height)
#计算
number = your_weight/(your_height*your_height)
the_number = float(number)
#得出数值
print(f"\nHi {the_name}!Your BMI number is {the_number} \n")    # 字串符
#分析
if the_number < 18.5:
  print(f"Oh!{the_name}!You're underweight and BMI is below standerd.")
elif 18.5 <= the_number <= 23.9:
  print(f"{the_name},your BMI is normal.")
elif 23.9 < the_number <= 27.9:
  print(f"{the_name},you're overweight and BMI is higher than the standard.")
elif 27.9 < the_number <= 32:
  print(f"{the_name},you're too fat and BMI well above the mark")
else:
  print(f"{the_name},you're severely exeed the limit please lose weight")
print("\nThe norm come from PRC")
x = input('Press Enter to exit')

代码分析

分析说明

代码分析将会具体讲述第几行的代码所使用的类型,以及它有什么用、如何使用,其中行数包含了注释所占用的行数。

注释

在 Python 中,注释用 井号 即 # 进行标识。井号后的内容将会被 Python解释器 忽略,本程序中 第1-8行第12行第17行第23行第25行,均为注释。

举例子 #1
#欢迎界面
print("Hello!Nice to meet you what's your name?")

Python解释器 将会忽略第一行,只执行第二行

Hello!Nice to meet you what's your name?
注释有什么作用?

编写注释的主要目的是阐述代码要做什么,以及如何做。在开发时,你对各个部分如何协同工作了如指掌,但一段时间后,有些细节你可能会遗忘。当然,你可以通过研究代码来确定各个部分的工作原理,但通过书写注释,可以以清晰的自然语言对此段代码进行概述,在以后再编写这段代码时,将会节省许多时间。

当前,大多数软件是合作编写的,编写者可能是同一家公司的多名员工,有可能是同一个开源项目的开发人员,为了方便大家的协同合作,注释是必不可少的,因此你最好从一开始就为程序书写注释。

用户输入

大多数程序旨在解决最终用户的问题,为此需要从用户那里获得的一些信息,因此用户输入是十分有必要的,而在 Python 中,使用函数 input()可以有效地解决问题,在本程序中,第10行第14行第16行第37行使用了本函数。

举例子 #1
# 基础 input() 用法
Message = input(“Hello World”)
print(Message)

在执行完该代码之后,将会显示以下内容

Hello World

在执行后,程序会等待用户的输入,并在用户按回车后将会继续运行。输入值被赋给变量Message,接下来的print(Message)会将输入的内容呈现给用户:

Hello WorldImMagneto
ImMagneto

在正式的程序中,我们很少采用上述的方式,而是使用更清晰的方法,它能够准确地指出希望用户提供什么样的信息 — 指出用户应该输入何种信息

举例子 #2
name = input(“Please enter your name:”)
print(f”\nHello {name}!”)

在运行和交互后,将会是这样:

Please enter your name:Magneto
Hello Magneto!

在本程序中,我才用了分离的写法,让语句更加清晰。

举例子 #3
print("Hello!Nice to meet you what's your name?")
the_name = input()
print(f"\nOk!{the_name}. Let's calculate your BMI and classification(adult)")

通过将 print()input() 可以使代码更加清晰且可观,

Hello!Nice to meet you what's your name?
Magneto

Ok!Magneto. Let's calculate your BMI and classification(adult)

但在面向用户的内容上不会有变化,但这在大型项目的开发中是一个不错的书写方式,因为如此的写法可以有效地减少Bug的产生,并且只在指定地点调用用户书写的内容。

将整数和字符串转换成浮点数

为了进行必要的运算和显示,我们必须将将整数和字符串转换成浮点数,因此我们需要引入一个函数 – float()

float()方法语法
class float([x])

其中 x 代表整数或字符串,在运行后,将会返回浮点数。

举例子 #1
>>>float(1)
1.0
>>> float(112)
112.0
>>> float(-123.6)
-123.6
>>> float('123')     # 字符串
123.0

在本程序中,需要将浮点数进行计算,并且为了遵循清晰的书写方法,我们采用分离的写法

举例子 #2
#计算
number = 51.2/(1.6*1.6)
the_number = float(number)
#得出数值
print(f"Your BMI number is {the_number}")

最终输出为这样

Your BMI number is 20.351562499999996 

浮点数在遇到无限小数后,会进行取舍。

用户输入的值也无法直接进行计算,而是需要转化为浮点数才能进行计算,很巧的是,用户输入的值也正是整数和字串符,因此也可以使用 float() 函数进行转化

举例子 #3
#输入值
print("\nEnter your weight(kg)")
weight = input()
print("\nEnter your height(m)")
height = input()
#转化值
your_weight = float(weight)
your_height = float(height)
#计算
number = your_weight/(your_height*your_height)
the_number = float(number)
#得出数值
print(f"\nYour BMI number is {the_number}")

在运行后是这样的:

Enter your weight(kg)
51.2

Enter your height(m)
1.6

Your BMI number is 20.351562499999996 

if-elif-else语句

我们需要检查两个甚至更多不同的情况,为此我们可以使用 if-elif-else 结构。它依次检查每个条件测试,直到遇到通过了的条件测试。测试通过后,将会执行后面的代码,并且跳过余下的 if-elif-else 语句下的代码,为了更方便解释,直接举例子将会胜过写用法。

举例子 #1

我们需要的要求:

BMI值小于18.5的,告诉他低于了标准值

BMI值大于或等于18.5且小于或等于23.9的,告诉他达到了标准值

BMI值大于23.9但小于或等于27.9的,告诉他超过了标准值

通过数学中,区间的方式,我们知道,这些值的区间为 (-∞,27.9] 在这些值外的所有值,都是严重超过了标准,因此我们要告诉他这严重超过了标准值。

基于这些需求我们需要的 if-elif-else 语句就长这样:

#分析
if the_number < 18.5:
  print(f"You're underweight and BMI is below standerd.")
elif 18.5 <= the_number <= 23.9:
  print(f"Your BMI is normal.")
elif 23.9 < the_number <= 27.9:
  print(f"You're overweight and BMI is higher than the standard.")
elif 27.9 < the_number <= 32:
  print(f"You're too fat and BMI well above the mark")
else:
  print(f"You're severely exeed the limit please lose weight")

前面的 if-elif 包含了 (-∞,27.9] 这个区间内所有的数,因此 else 仅包含了 (27.9,+∞) 也就是严重超过了标准值的部分。

接下来让我们假设值为 20

the_number = 20
if the_number < 18.5:
  print(f"You're underweight and BMI is below standerd.")
elif 18.5 <= the_number <= 23.9:
  print(f"Your BMI is normal.")
elif 23.9 < the_number <= 27.9:
  print(f"You're overweight and BMI is higher than the standard.")
elif 27.9 < the_number <= 32:
  print(f"You're too fat and BMI well above the mark")
else:
  print(f"You're severely exeed the limit please lose weight")

那么我们得到的将会是如下内容:

Your BMI is normal.

由于 if-elif-else 语句和 Python 的特性,使得该部分内容,与自然语言十分接近,因此翻译的方法将会十分适用,具体的翻译便不再展示。

尾声

在一年前,我和许多朋友们一起讨论过那些大神们的,他们用寥寥几行代码,就可以完成别人几百行的任务,是十分强大的,大家也要有足够的积淀才能成为那种大神。我不会否认这种人的存在,也不会否认他们的强大,但是就我的认知来说,真正好的编程能力,是能够清晰地展现自己所写的内容,能清晰、简洁地告诉大家这部分是做什么的,那部分又是做什么,而不是一笔完成,这样才有编程的意义。当然适当的缩短也可以更好的表示自己的意思,就如同自然语言-汉语中的成语一样,这期的名称之所以叫面向未来的BMI计算,也正是因为这个,未来的编程中,也只会是清晰的代码,为此我在分析代码时,全程进行都是规范、清晰地书写,这是为了,面向未来!

此文由 Magneto 发布,本文采用《CC BY-NC-ND 4.0》协议,转载必须注明作者和本文链接。
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
小恐龙
酷安
颜文字
Emoji
花!
上一篇
下一篇