【Python】基础练习题

1)从random库中选取相应的函数,用蒙特卡罗方法(统计实验方法)求解pi。

py 复制代码
import random

def estimate_pi(num_experiments):
    num_points_in_circle = 0
    num_total_points = 0

    for _ in range(num_experiments):
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)
        distance = x**2 + y**2

        if distance <= 1:
            num_points_in_circle += 1

        num_total_points += 1

    pi_estimate = 4 * num_points_in_circle / num_total_points
    return pi_estimate

# 设置实验次数
num_experiments = 1000000

# 估算圆周率
pi_estimate = estimate_pi(num_experiments)
print("蒙特卡罗估算的圆周率: ", pi_estimate)

2)一个笼中共有鸡和兔15只,它们的脚一共有40只,问有多少只鸡?有多少只兔?

py 复制代码
def solve_chicken_and_rabbit(total_count, total_legs):
    # 循环遍历可能的鸡的数量,从0到总数
    for chicken_count in range(total_count + 1):
        rabbit_count = total_count - chicken_count
        # 判断当前的鸡兔数量是否符合脚的总数
        if (2 * chicken_count + 4 * rabbit_count) == total_legs:
            return chicken_count, rabbit_count

    # 如果没有找到符合条件的结果,则返回 None
    return None


# 输入总数和脚的总数
total_count = 15
total_legs = 40

# 解决问题并打印结果
solution = solve_chicken_and_rabbit(total_count, total_legs)
if solution:
    chicken_count, rabbit_count = solution
    print("鸡的数量:", chicken_count)
    print("兔子的数量:", rabbit_count)
else:
    print("无解")

3) "猴子吃桃"问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想吃时, 见只剩一个桃子了。编写程序求第一天猴子共摘了多少个桃子?(1534)

py 复制代码
def calculate_total_peaches(days):
    peaches = 1
    for _ in range(days):
        peaches = (peaches + 1) * 2
    return peaches

# 输入天数
days = 9

# 求解第一天的桃子数量
total_peaches = calculate_total_peaches(days)
print("第一天猴子共摘了", total_peaches, "个桃子")

4)羊车门问题。有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。靖问:参赛者更换选择后能否增加猜中汽车的机会?请用random库对这个随机事件进行实验,分别输出参赛者改变选择和坚持选择获胜的机率。(进行1000次随机实验,结果以百分制概率输出。近似33.3%,66.6%)

py 复制代码
import random

def simulate_car_goat_game():
    # 初始化三扇门,其中一扇有汽车,其余有山羊
    doors = ['car', 'goat', 'goat']
    # 参赛者随机选择一扇门
    player_choice = random.choice([0, 1, 2])
    # 主持人在未选中的门中选择一扇有山羊的门
    host_choice = random.choice([i for i in range(3) if i != player_choice and doors[i] == 'goat'])
    # 参赛者更换选择,选择另一扇未被选择过的门
    player_choice = random.choice([i for i in range(3) if i != player_choice and i != host_choice])
    # 判断最终参赛者的选择结果
    if doors[player_choice] == 'car':
        return 'switch_win' # 参赛者更换选择获胜
    else:
        return 'stick_win' # 参赛者坚持选择获胜

def calculate_win_probabilities(num_simulations):
    switch_wins = 0
    stick_wins = 0

    for _ in range(num_simulations):
        result = simulate_car_goat_game()
        if result == 'switch_win':
            switch_wins += 1
        elif result == 'stick_win':
            stick_wins += 1

    switch_win_prob = (switch_wins / num_simulations) * 100
    stick_win_prob = (stick_wins / num_simulations) * 100

    print("参赛者更换选择获胜的机率:{:.1f}%".format(switch_win_prob))
    print("参赛者坚持选择获胜的机率:{:.1f}%".format(stick_win_prob))

# 进行1000次随机实验
num_simulations = 1000
calculate_win_probabilities(num_simulations)

5)只能由1和它本身整除的整数被称为素数;若一个素数从左向右读与从右向左读是是相同的数,则该素数为回文素数。编程求解2~1000内的所有回文素数

py 复制代码
def is_prime(num):
    if num < 2:
        return False

    for i in range(2, int(num**0.5)+1):
        if num % i == 0:
            return False

    return True

def is_palindrome(num):
    return str(num) == str(num)[::-1]

palindrome_primes = []

for num in range(2, 1001):
    if is_prime(num) and is_palindrome(num):
        palindrome_primes.append(num)

print("2~1000内的所有回文素数:")
print(palindrome_primes)
相关推荐
小宁爱Python2 分钟前
基于 Django+Vue3 的 AI 海报生成平台开发(海报模块专项)
人工智能·python·django
小刘的AI小站7 分钟前
leetcode hot100 二叉搜索树
算法·leetcode
自信的小螺丝钉8 分钟前
Leetcode 876. 链表的中间结点 快慢指针
算法·leetcode·链表·指针
红豆怪怪9 分钟前
[LeetCode 热题 100] 32. 最长有效括号
数据结构·python·算法·leetcode·动态规划·代理模式
愚润求学15 分钟前
【贪心算法】day6
c++·算法·leetcode·贪心算法
AI 嗯啦26 分钟前
计算机的排序方法
数据结构·算法·排序算法
编码浪子37 分钟前
趣味学RUST基础篇(构建一个命令行程序2重构)
开发语言·重构·rust
l12345sy39 分钟前
Day23_【机器学习—聚类算法—K-Means聚类 及评估指标SSE、SC、CH】
算法·机器学习·kmeans·聚类·sse·sc·ch
_Coin_-1 小时前
算法训练营DAY58 第十一章:图论part08
数据结构·算法·图论
大嘴带你水论文1 小时前
震惊!仅用10张照片就能随意编辑3D人脸?韩国KAIST最新黑科技FFaceNeRF解析!
论文阅读·人工智能·python·科技·计算机视觉·3d·transformer