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