python实例复习4——‘BMI’和圆周率的计算

一、BMI的计算
BMI就是常说的身体质量指数:我们国家和国际都有一套标准,大同小异,这里就是练习一下分支的用法,比较简答:

height, weight = eval(input("请输入身高(米)和体重(千克)[逗号隔开]:"))
bmi = weight / pow(height, 2)
print("BMI 的数值为:{:.2f}".format(bmi))
who, nat = "" , ""
if bmi < 18.5:
    who, nat = "偏廋", "偏瘦"
elif 18.5 <= bmi <24:
    who, nat = "正常", "正常"
elif 24 <= bmi < 25:
    who, nat = "偏胖","正常"
elif 25 <= bmi < 28:
    who, nat= "偏胖","偏胖"
elif 28 <= bmi < 30:
    who, nat = "肥胖","偏胖"
else:
    who, nat = "肥胖","肥胖"
print("BMI指标为:国内{0},国际{1}".format(who,nat))

分别输入身高和体重后会给出我国的标准和国际的标准,比如我的:
python实例复习4——‘BMI’和圆周率的计算
刚好达标!!

二、圆周率的计算
这里计算圆周率不是利用公式直接算,而是利用蒙特卡洛的方法对圆周率进行估算。通过计算落入指定面积的点数占总点数的比例,来估计面积比的理念。
这里复习了一下random库的常用的一些方法:
1、seed():生成随机种子,其实计算机是无法形成真正的随机数的,需要利用随机种子通过梅森旋转算法来获得伪随机数;
2、random():获取0-1之间的随机小数;
3、randint(a, b):获取a-b之间的随机整数;
4、uniform(a,b):获取a-b之间的随机小数;
5、choice(seq):获取seq中的一个随机元素;
6、shuffle(seq):把seq中的元素进行随机排列。

下面使用蒙特卡罗的方法估计圆周率:

from random import random
from time import perf_counter
darts = 1000000
hits = 0
start = perf_counter()
for i in range(1, darts+1):
    x, y = random(), random()
    dist = pow(x**2 + y**2, 0.5)
    if dist <= 1.0:
        hits += 1
pi = 4 * (hits/darts)
print("圆周率值是:{}".format(pi))
print("所用的时间是:{:.5f}s".format(perf_counter() - start))

结果如下:
python实例复习4——‘BMI’和圆周率的计算
好像不太准,把取的点数加大10倍看看:
python实例复习4——‘BMI’和圆周率的计算
好了一些,再加10倍试试:
python实例复习4——‘BMI’和圆周率的计算
时间有点伤不起了。

三、做个小练习:
给用户三次输入用户名和密码的机会,要求如下:
1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;
2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”

for i in range(3):
    x = input(' ')
    y = input(' ')
    if x == 'Kate' and y == '666666':
        print("登录成功!")
        break
if i == 2 and x != 'Kate' and y != '666666' : #防止第三次输入正确
    print("3次用户名或者密码均有误!退出程序。") 

试一下,可以:

python实例复习4——‘BMI’和圆周率的计算