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

程序控制练习内容
1、身体质量指数BMI:
BMI的定义如下:
BMI=体重(kg) /身高 2 (m2)
【python练习,6.5】(蒙特卡罗方法和水仙花数等问题)_第1张图片
问题需求:
—输入:给定体重和身高
—输入: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、圆周率的计算
公式法:
【python练习,6.5】(蒙特卡罗方法和水仙花数等问题)_第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))

蒙特卡罗方法:
【python练习,6.5】(蒙特卡罗方法和水仙花数等问题)_第3张图片【python练习,6.5】(蒙特卡罗方法和水仙花数等问题)_第4张图片

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

#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)

你可能感兴趣的:(python练习)