(一)实例5:身体质量指数BMI
描述
BMI :Body Mass Index 国际上常用的衡量人体肥胖和健康程度重要标准,主要用于统计分析
定义:BMI = 体重 (kg) /身高2(m2)
获取用户输入的体重和身高值,计算并给出国际和国内的 BMI 分类
要求如下:
(1) 混合计算并给出国际和国内的 BMI 分类;
(2) 使用input()获得测试用例输入时,不要增加提示字符串。代码
height, weight=eval(input())
bmi=weight/pow(height,2)
print("BMI数值为:{:.2f}".format(bmi))
nat,who="",""
if bmi<18.5:
nat="偏瘦";who="偏瘦"
elif 18.5<=bmi<=24:
nat="正常";who="正常"
elif 24
注意
在同一行给两个变量赋值时要注意格式。可以在两个赋值语句中间加上分号,也可以先将变量用逗号隔开,再按顺序分别赋值。
(二)实例6:圆周率的计算
描述
求解圆周率可以采用蒙特卡罗方法,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值。请以123作为随机数种子,获得用户输入的撒点数量,编写程序输出圆周率的值,保留小数点后6位。
代码
from random import random
from random import seed
dots=seed(123)
n=eval(input())
hits=0.0
for i in range(1,n+1):
x,y=random(),random()
dist=pow(x**2+y**2,0.5)
if dist<=1.0:
hits+=1
pi=4*(hits/n)
print("{:.6f}".format(pi))
注意
先用随机数种子产生随机数序列,然后再使用random()产生两个大于小于1的随机数,计算到圆心的距离。编写代码时一定要注意数据的类型不能出错。input输入的是字符串类型,进行数学计算时要使用数字类型。
(三)整数的加减和
描述
编写程序计算如下数列的值:
1-2+3-4…966
其中,所有数字为整数,从1开始递增,奇数为正,偶数为负
代码1
x=0
for i in range(0,966):
x+=(-1)**i*i
print(x)
代码2
x = 0
for i in range(1,967):
if(i%2==0):
x-=i
else:
x+=i
print(x)
(四)三位水仙花数
描述
“水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。
例如:ABC是一个"3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。请按照从小到大的顺序输出所有的3位水仙花数,请用"逗号"分隔输出结果。
输入输出示例
代码
num=""
for i in range(100,1000):
c = i%10
b =(i-c)/10%10
a =(i-c-b*10)/100
x = int(a**3+b**3+c**3)
y = int(a*100+b*10+c)
if x==y:
num+="{},".format(y)
print(num[:-1])#不输出最后一个逗号
注意
首先注意水仙数的表示方式,其次注意字符串的格式化也可以不在输出的时候进行,将所有的输出结果存在一个字符串中。
(五)三位水仙花数
描述
给用户三次输入用户名和密码的机会,要求如下:
1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;
2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”。
num=0
for i in range(3):
name=input()
code=input()
if name!="Kate" or code!="666666":
num+=1
continue
else:
print("登录成功!")
break
if num == 3:
print("3次用户名或者密码均有误!退出程序。")
注意
两次输入一定要在循环内部,这样才可以连续三次进行输入用户名和密码。注意continue和break的用法,不同次数加1,相同次数不加1.这个思想要记住。
测验1:四位玫瑰数
描述
四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。
例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数。
请输出所有4位数的四位玫瑰数,按照从小到大顺序,每个数字一行。
代码
for i in range(1000,10000):
d=i%10
c=(i-d)/10%10
b=(i-d-c*10)/100%10
a=(i-d-c*10-b*100)/1000
if i==pow(a,4)+pow(b,4)+pow(c,4)+pow(d,4):
print(i)
注意
本质上和水仙花的实例一样,甚至更简单。要特别注意语句之间的逻辑关系,常常因为马虎而出错。
测验2:100以内素数之和
描述
求100以内所有素数之和并输出。
素数指从大于1,且仅能被1和自己整除的整数。
提示:可以逐一判断100以内每个数是否为素数,然后求和。
参考代码
def is_prime(n):
for i in range(2,n):
if n%i == 0:
return False
return True
sum = 0
for i in range(2,100):
if is_prime(i):
sum += i
print(sum)
注意
通过函数来判断,思路和参考一样,但是逻辑没顺好。