【python练习,6.5】(蒙特卡罗方法和水仙花数等问题)

程序控制练习内容
1、身体质量指数BMI:
BMI的定义如下:
BMI=体重(kg) /身高 2 (m2)
在这里插入图片描述
问题需求:
—输入:给定体重和身高
—输入:BMI指标分类信息(国际和国内)

#CalBMI.py
height, weight = eval(input("请输入身高(m)和体重(kg),并用逗号隔开:"))
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的指标为国际:{},国内:{}".format(WHO, NAT))

2、圆周率的计算
公式法:
在这里插入图片描述

#CalPi_1.py
pi = 0
N = 100
for k in range(N):
    pi += 1/pow(16, k)*\
          (4/(8*k+1) - 2/(8*k+4)\
           - 1/(8*k+5) - 1/(8*k+6))
print("圆周率值是:{}".format(pi))

蒙特卡罗方法:
在这里插入图片描述在这里插入图片描述

如图:对其进行随机撒点,当随机点足够多时,在圆内部点与所有点的比值即是圆面积与正方形的比值

#CalPi_2.py
from random import random
from time import perf_counter
DARTS = 5000*1000 # 五百万个点
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 = hits+1
pi = 4 * (hits/DARTS)
time = perf_counter() - start
print("圆周率值是:{}".format(pi))
print("运行时间是:{:.4f}s".format(time))

3、三位水仙花数
问题描述
“水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。
例如:ABC是一个"3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。
请按照从小到大的顺序输出所有的3位水仙花数,请用"逗号"分隔输出结果。

daffodils=[]
for i in range(1,10):
  for j in range(10):
    for k in range(10):
      if i*i*i + j*j*j + k*k*k == 100*i + 10*j + k:
          daffodils.append(100*i + 10*j + k)
for i in daffodils:
  if i == daffodils[-1]:
    print(i)
  else:
    print(i, end = ',')

4、100以内素数之和
问题描述
求100以内所有素数之和并输出。
素数指从大于1,且仅能被1和自己整除的整数。

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值