31.实例5:身体质量指数BMI
这是"实例"题,与课上讲解实例相同,请作答检验学习效果。
BMI :Body Mass Index 国际上常用的衡量人体肥胖和健康程度重要标准,主要用于统计分析
定义:BMI = 体重 (kg) /身高2(m2)
获取用户输入的体重和身高值,计算并给出国际和国内的 BMI 分类
要求如下:
(1) 混合计算并给出国际和国内的 BMI 分类;
(2) 使用input()获得测试用例输入时,不要增加提示字符串。
输入示例1
1.68,41
输出示例1
BMI数值为:14.53
BMI指标为:国际'偏瘦',国内'偏瘦'
输入示例2
1.72,80
输出示例2
BMI数值为:27.04
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))
知识漏洞
1.输入。input() 获取输入值,但是它会把所有输入值包括数字均视作字符串,所以要用 eval()函数 去掉最外层的引号;
2.输出占位符。字符串类型的格式化问题,“槽”的概念
2.实例6:圆周率的计算
这是"实例"题,与课上讲解实例相同,请作答检验学习效果。
求解圆周率可以采用蒙特卡罗方法,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值。
请以123作为随机数种子,获得用户输入的撒点数量,编写程序输出圆周率的值,保留小数点后6位。
答案代码:
from random import random, seed
DARTS = eval(input())
seed(123)
hits = 0.0
for i in range(DARTS):
x, y = random(), random()
dist = pow(x ** 2 + y ** 2, 0.5)
if dist <= 1.0:
hits = hits + 1
pi = 4 * (hits/DARTS)
print("{:.6f}".format(pi))
报错:
random.seed(123)
AttributeError: 'builtin_function_or_method' object has no attribute 'seed'
解决方案:把 "from random import random" 换成了 "import random"
3.整数的加减和√
编写程序计算如下数列的值:
1-2+3-4...966
其中,所有数字为整数,从1开始递增,奇数为正,偶数为负
输出示例
111(仅表示输出样式,不是输出结果)
代码:
sum = 0
for i in range(1, 967):
if i % 2 != 0 :
sum += i
elif i % 2 == 0:
sum -= i
print(sum)
4.三位水仙花数
"水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。
例如:ABC是一个"3位水仙花数",则:A的3次方+B的3次方+C的3次方 = ABC。
请按照从小到大的顺序输出所有的3位水仙花数,请用"逗号"分隔输出结果。
输出仅表示格式,不表示对错。
输出示例
111,222
我的代码(错误,无法去掉最后一个逗号)
for a in range(100, 1000):
b = a // 100
s = a % 100 // 10
g = a % 10
sum = b*b*b + s*s*s + g*g*g
if sum == a:
print(a, end=",")
else:
continue
正确代码:
s = ""
for i in range(153, 1000):
# 把数字转化为字符串,进行百十个位的分离
t = str(i)
n1 = pow(eval(t[0]), 3)
n2 = pow(eval(t[1]), 3)
n3 = pow(eval(t[2]), 3)
# 三个数位上面数字的平方和
sum = n1 + n2 + n3
if sum == i :
# 如果是水仙花数的话,就添加到字符串s中
s = s + "{},".format(i)
# 输出这个字符串,其中最后一位肯定是逗号,所以输出到最后一位之前即可
print(s[:-1])
难点:
最后一个逗号的处理,每个数字连同“逗号”都加入到字符串里面,然后最后输出的时候输出到最后一位之前即可。
5.用户登录的三次机会
给用户三次输入用户名和密码的机会,要求如下:
1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;
2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”。
输入示例1
Kate
666666
输出示例1
登录成功!
输入示例2
kate
123
alice
456
john
111111
输出示例2
3次用户名或者密码均有误!退出程序。
代码:
for i in range(1, 4):
user = input()
pwd = input()
if(user == 'Kate' and pwd == '666666'):
print("登录成功!")
break
elif i == 3:
print("3次用户名或者密码均有误!退出程序。")