1.编写程序,模拟蒙特卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。观察实验结果,理解实验结果随着模拟次数增多越来越接近圆周率的原因。
import numpy as np
n=eval(input('请输入投掷飞镖的次数:'))
r=1 # 圆的半径
a=2*r # 正方形的边长
# 在正方形均匀生成n个点
x=np.random.uniform(0,a,n)
y=np.random.uniform(0,a,n)
# 点与圆心(r,r)的距离
d=np.sqrt(((x-r)**2+(y-r)**2))
# 找出在圆内的点
point_in=sum(np.where(d<r,1,0))
# 计算π
pi=4*point_in/n
print('圆周率近似值:',pi)
在测试中,随着次数的增加,近似值越来越接近π。
2.使用列表实现筛选法求素数。编写程序,输入一个大于2的自然数,然后输出小于该数字的所有素数组成的列表。
n=eval(input('请输入>2的自然数:'))
l=[]
for i in range(2,n):
for j in range(2,i):
if i%j==0:
break
else:
l.append(i)
print(f'小于{n}的所有素数组成的列表:',l)
3.使用集合实现筛选法求素数。编写程序,输入一个大于2的自然数,然后输出小于该数字的所有素数组成的列表。
n=eval(input('请输入>2的自然数:'))
primes=set()
is_prime=[True]*(n)
# 处理2~sqrt(n)的数
for i in range(2,int(n**0.5)+1):
if is_prime[i]:
primes.add(i)
# 将当前数的倍数标记为非素数
for j in range(i*i,n,i):
is_prime[j]=False
# 处理sqrt(n)+1~n的数
for k in range(int(n**0.5)+1,n):
if is_prime[k]:
primes.add(k)
print(f'小于{n}的所有素数组成的集合:',primes)
lP=[]
for i in primes:
lP.append(i)
print(f'小于{n}的所有素数组成的列表:',lP)
4.使用filter()函数统计列表中所有非素数。首先,使用列表推导式和标准库random生成一个包含50个介于1~100的随机整数的列表,然后编写函数defisPrime(n)用来测试整数n是否为素数,接下来使用内置函数filter()把函数isPrime()作用到包含若干随机整数的列表lst上,最后程序输出一个列表,其中只包含列表lst中不是素数的那些整数。
import random
# 判断n是否为素数
def isPrime(n):
for i in range(2,n):
if n%i==0:
break
else:
return False
return True
# 随机生成50个[1,100]的整数
lst=[random.randint(1,100) for _ in range(50)]
print('随机列表lst:',lst)
l=filter(isPrime,lst)
l1=[]
for i in l:
l1.append(i)
print('lst中不为素数的整数的列表:',l1)
5.编写程序,使用枚举法验证6174猜想。
import random
# 求四个数字组合的最大值和最小值
def MaxMin(s):
s1=sorted(s,reverse=True)
Max=''
for i in s1:
Max+=i
Min=''
for i in s1[::-1]:
Min+=i
return Max,Min
# 随机生成四个数字
s=''
for _ in range(4):
s+=str(random.randint(0,9))
print(s)
# 求其组合的最大值和最小值
Max,Min=MaxMin(s)
# 枚举
for i in range(7):
sub=int(Max)-int(Min)
print(f'第{i+1}次:{sub}={Max}-{Min}')
if sub==6174:
print('6174猜想正确!')
break
else:
Max,Min=MaxMin(str(sub))
else:
print('6174猜想错误!')
6.编写程序模拟猜数游戏。程序运行时,系统在指定范围内生成一个随机数,然后提示用户进行猜测,并根据用户输入进行必要的提示(猜对了、太大了、太小了),如果猜对则提前结束程序,如果次数用完仍没有猜对,提示游戏结束并给出正确答案。
import random
# 在[0,100]中随机生成一个整数
n=random.randint(0,100)
# 最大猜测次数
cnt=10
for i in range(cnt):
m=eval(input('请在[0,100]中猜测一个数字:'))
if m==n:
print('猜对了')
break
elif m>n:
print('太大了')
else:
print('太小了')
else:
print('游戏结束!正确答案为',n)