第4章 程序的控制结构

0401.输入一个年份,输出是否为闰年。#闰年条件:能被4整除但不能被100整除,或者能被400整除的年份都是闰年。

#0401
n = eval(input())
if (n % 4 == 0 and n % 100 != 0) or n % 400 == 0:
    print('{}年是闰年'.format(n))
else:
    print('{}年不是闰年'.format(n))

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

#0402
a,b = input().split()#输入两数,以空格隔开
a,b = int(a),int(b)
mul = a*b
e = max(a,b)%min(a,b)#余数e
#辗转相除法
while e != 0:    
    a,b = min(a,b),e
    e = max(a,b)%min(a,b)   
print("最大公约数是:{} 最小公倍数是:{}"\
      .format(min(a,b),int(mul/(min(a,b)))))

0403.统计不同字符个数。用户从键盘键入一行字符,编写一个程序,统计并输出其中英文字符、数字、空格和其他字符的个数。

#0403
str1 = input()
n1,n2,n3,n4 = 0,0,0,0
for c in str1:
#中文的汉字会被 isalpha 判定为 True,
#如果想区分中文和英文可以使用 unicode。中文的范围为:['/u4e00','/u9fa5']
    if c.encode('UTF-8').isalpha():
        n1 += 1
    elif c.isdigit():
        n2 += 1
    elif c.isspace():
        n3 += 1
    else:
        n4 += 1
print("英文字符数:{} 数字数:{} 空格数:{} 其他字符数:{}"\
      .format(n1,n2,n3,n4))

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

#0404
import random
target = random.randint(1,1000)
count = 0
while True:
    try:
        guess = eval(input('请输入一个猜测的整数(1至1000):'))
        a = bin(guess)#避免出现元组、字典、浮点数等类型的的数据
    except:
        print('输入内容必须为整数!请重试,本次不计入猜测次数。')
        continue
    count = count + 1
    if guess > target:
        print('猜大了')
    elif guess < target:
        print('猜小了')
    else:
        print('猜对了')
        break
print("此轮的猜测次数是:", count)

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

#0405
from random import *

def choices():
    nL = [0,1,2]#0,1,2分别对应'羊','羊','汽车'
    nL1 = [0,1]#主持人的选择范围
    cddt = choice(nL)#参赛者的选择
    if cddt == 2:
        host = choice(nL1)#主持人开启的门
    else:
        nL1.remove(cddt)
        host = choice(nL1)
    nL.remove(cddt)
    nL.remove(host)
    return cddt,nL[0]

while True:
    n = input("请输入试验次数(按q退出):")
    if n == 'q':
        print("试验结束!")
        break
    n = int(n)
    count1 = 0#不改变选择,猜中汽车的次数
    count2 = 0#改变选择,猜中汽车的次数
    for i in range(n):
        a,b = choices()
        if a == 2:
            count1 += 1
        if b == 2:
            count2 += 1
    print("坚持选择获胜概率:{:.2%}".format(count1/n))
    print("改变选择获胜概率:{:.2%}".format(count2/n))

实验结果为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值