蒙特· 卡罗方法是一种通过概率来得到问题近似解的方法, 在很多领域都有重要的应用,其中就包括圆周率近似值的计算问题。假设有一块边长为 2 的正方形木板,上面
画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x, y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以 4,这个数字会无限逼近圆周率的值。这就是蒙特·卡罗发明的用于计算圆周率近似值的方法,如图所示。
模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。
from random import random
times=int(input('请输入掷飞镖次数:'))
hits=0
for i in range(times): #循环
x=random() #产生随机数
y=random()
if x*x+y*y<=1:
hits+=1
print(4.0*hits/times)
编写程序,输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表。
使用内置函数,enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。filter()函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,可以通过list()转化为列表或者通过for循环取值。
maxNumber=int(input('请输入一个大于2的自然数:'))
lst=list(range(2,maxNumber))
m=int(maxNumber**0.5) #最大整数的平方根
for index,value in enumerate(lst):
if value>m: #如果当前数字已大于最大整数平方根,结束判断
break
lst[index+1:]=filter(lambda x:x%value !=0, lst[index+1:]) #对该位置之后的元素进行过滤
print(lst)
编写程序模拟猜数游戏。程序运行时,系统生成一个随机数,然后提示用户进行猜测,并根据用户输入进行必要的提示(猜对了、太大了、太小了),如果猜对则提前结束程序,如果次数用完仍没有猜对,提示游戏结束并给出正确答案。
用random产生随机数。try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。用循环来将猜测值与随机值做比较,来验证是否猜测正确。
from random import randint
def guessNumber(maxValue=10,maxTimes=3):
value=randint(1,maxValue) #产生随机数
for i in range(maxTimes):
prompt='Start to guess:' if i==0 else 'Guess again:'
try: #异常处理结构,防止输入不是数字的情况
x=int(input(prompt))
except:
print('Must input an integer between 1 and',maxValue)
else:
if x==value: #数字猜对的情况
print('Congratulation!')
break
elif x>value: #猜测的数字太大了
print('Too big!')
else: #猜测的数字太小了
print('Too little!')
else: #猜错三次后,游戏失败
print('Game over. FAIL!')
print('The value is',value)
guessNumber()