前言
新年快乐呀!随着春节假期来到尾声,大家的生活也逐渐回归正常,这段时间一直闲的没事,亲戚也很少走,我就写了我一直想写的BMI计算。
什么是BMI
身体质量指数,是BMI(Body Mass Index)指数,简称体质指数,是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。
计算公式为:BMI=体重÷身高2。(体重单位:千克;身高单位:米。)
BMI由19世纪中期的比利时通才凯特勒最先提出
摘自 百度百科
BMI在不同国家中,有不同的标准,其中 International Normal Standard 为 20 – 25,此次我才用了 PRC Standard (中国标准),其中 PRC Normal Standard 为 18.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计算,也正是因为这个,未来的编程中,也只会是清晰的代码,为此我在分析代码时,全程进行都是规范、清晰地书写,这是为了,面向未来!