备考计算机二级Python之Day4作业编程题

1、输入一个年份,输出是否为闰年。

#闰年条件:能被4整除但不能被100整除,或者能被400整除的年份都是闰年。


n=eval(input("请输入一个年份:"))
if (n%4==0 and n%100!=0) or (n%400==0):
    print("该年份是闰年")
else:
    print("该年份是平年")
请输入一个年份:2024
该年份是闰年

2、最大公约数计算。获得两个整数,求出这两个整数的最大公约数和最小公倍数。最大公约数的计算一般使用辗转相除法,最小公倍数则使用两个数的乘积除以最大公约数。

num1 = eval(input("请输入第1个整数:"))
num2 = eval(input("请输入第2个整数:"))
m = max(num1, num2)
n = min(num1, num2)
r = m % n
while r != 0:
    m = n
    n = r
    r = m % n
print(num1, "和", num2, "的最大公约数为", n)
p=int((num1*num2)/n)
print(num1, "和", num2, "的最小公倍数为", p)
请输入第1个数字:23
请输入第2个数字:34
23 和 34 的最大公约数为 1
23 和 34 的最小公倍数为 782.0

3、猜数字游戏续。当用户输入的不是整数(如字母、浮点数等)时,程序会终止执行退出。改编题目1中的程序,当用户输入出错是给出“输入内容必须为整数!”的提示,并让用户重新输入。

while True:
    try:
        n=eval(input("请输入一个年份:"))
        if (n%4==0 and n%100!=0) or (n%400==0):
            print("该年份是闰年")
            break
        else:
            print("该年份是平年")
            break
    except NameError:
        print("输入内容必须为整数!")
        print("请重新输入")
        continue
请输入一个年份:yu
输入内容必须为整数!
请重新输入
请输入一个年份:987
该年份是平年

4、羊车门问题。有三扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。请问:参赛者更换选择后能否增加猜中汽车的机会?——这是一个经典问题。请使用random库对这个随机事件进行预测,分别输出参赛者改变选择和坚持选择获胜的概率。

import random  
  
def monty_hall(trials):  
    stay_wins = 0  # 坚持选择获胜的次数  
    switch_wins = 0  # 更换选择获胜的次数  
      
    for _ in range(trials):  
        # 初始化三扇门,其中一扇后面有汽车,两扇后面有山羊  
        doors = ['goat', 'goat', 'car']  
        random.shuffle(doors)  # 随机打乱门的顺序  
          
        # 参赛者随机选择一扇门  
        choice = random.randint(0, 2)  
          
        # 主持人打开一扇有山羊的门(不是参赛者选的那扇)  
        for i in range(3):  
            if i != choice and doors[i] == 'goat':  
                host_opens = i  
                break  
          
        # 如果参赛者坚持自己的选择  
        if doors[choice] == 'car':  
            stay_wins += 1  
          
        # 如果参赛者更换选择  
        # 找出参赛者没有选,主持人也没有打开的那扇门  
        for j in range(3):  
            if j != choice and j != host_opens:  
                other_door = j  
                break  
        if doors[other_door] == 'car':  
            switch_wins += 1  
      
    # 返回坚持选择和更换选择获胜的概率  
    return stay_wins / trials, switch_wins / trials  
  
# 进行10000次模拟  
stay_prob, switch_prob = monty_hall(10000)  
print("坚持选择的获胜概率:", stay_prob)  
print("更换选择的获胜概率:", switch_prob)
坚持选择的获胜概率: 0.3273
更换选择的获胜概率: 0.6727

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值