Python练习3-选择与循环

本文介绍了使用Python编写的几个示例,包括利用蒙特卡罗方法计算圆周率,使用列表和集合求素数,以及实现猜数游戏和枚举法验证6174猜想。这些示例展示了基本的编程技巧和数学应用。
摘要由CSDN通过智能技术生成

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)

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值