Featured image of post Python学习日记 – BMI计算

Python学习日记 – BMI计算

前言

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

输出预览

其中带 #的部分是我的解释,正式运行是没有的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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

全部代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
############################
### 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

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

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

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

注释有什么作用?

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

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

用户输入

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

举例子 #1

1
2
3
# 基础 input() 用法
Message = input(Hello World)
print(Message)

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

1
Hello World

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

1
2
Hello WorldImMagneto
ImMagneto

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

举例子 #2

1
2
name = input(Please enter your name:)
print(f\nHello {name}!”)

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

1
2
Please enter your name:Magneto
Hello Magneto!

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

举例子 #3

1
2
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() 可以使代码更加清晰且可观,

1
2
3
4
Hello!Nice to meet you what's your name?
Magneto

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

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

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

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

float () 方法语法

1
class float([x])

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

举例子 #1

1
2
3
4
5
6
7
8
>>>float(1)
1.0
>>> float(112)
112.0
>>> float(-123.6)
-123.6
>>> float('123')     # 字符串
123.0

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

举例子 #2

1
2
3
4
5
#计算
number = 51.2/(1.6*1.6)
the_number = float(number)
#得出数值
print(f"Your BMI number is {the_number}")

最终输出为这样

1
Your BMI number is 20.351562499999996 

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

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

举例子 #3

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#输入值
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 语句就长这样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#分析
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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")

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

1
Your BMI is normal.

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

尾声

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

本博客已运行 days , h , m , s
常记溪亭日暮,沉醉不知归路~