第四周尾巴

计算圆周率:
①由公式计算
在这里插入图片描述
蒙特卡罗方法:是一个撒点方法,类似于概率

圆周率本身就是圆形的面积除以外切正方形的面积(如下图所示)。求解圆周率可以采用蒙特卡罗方法,在一个1/4正方形中撒点,根据在圆内点的数量占总撒点数的比例计算圆周率值。
在这里插入图片描述

from random import random
from time import perf_counter
DARTS = 1000*1000 #总撒点数量
hits = 0.0 # 目前在圆内部点的数量
strat = 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) # 注意要乘上4,因为概率是可以相加的
print("圆周率是:{}".format(pi))
print("运行时间:{:.5f}s".format(perf_counter()-strat))

举一反三:

  • 理解方法思维:
    • 数学思维—精确的表达式
    • 计算机思维——抽象过程,用计算机自动化求解
  • time.perf_counter关注程序的运行时间提高效率

课后习题:请以123作为随机数种子,获得用户输入的撒点数量,编写程序输出圆周率的值,保留小数点后6位。

import random as r
dots = eval(input())
in_circle = 0
# 注意种子如果放在循环体内部,程序的输出结果不正确且相同。
# (在每个for循环中,产生的初始随机数都一样,则对于每个点,x,y都是相同的)
r.seed(123)  
for i in range(1,dots+1):
    x,y = r.random(),r.random()
    dis = x ** 2 + y ** 2
    if dis <= 1:
        in_circle += 1  #是+=
pi = 4 * (in_circle/dots)
print("{:.6f}".format(pi))

"水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

s = []
# 因为是三位数,最高位不能为0
for a in range(1,10,1):
    for b in range(0,10,1):
        for c in range(0,10,1):
            three = a**3+b**3+c**3
            abc=a*100+b*10+c
            if int(three) == int(abc):
                s.append(abc)  # 注意,对于列表,用s=s.append(),因为append返回的是一个空值None
S = str(s)[1:-1]
print(S)

参考答案

s = ""
for i in range(100, 1000):
    t = str(i)
    if pow(eval(t[0]),3) + pow(eval(t[1]),3) + pow(eval(t[2]),3) == i :
        s += "{},".format(i)
print(s[:-1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值