第四章程序的控制结构编程题记录

程序的控制结构编程题

1.改编题目1中的程序,当用户输入出错时给出“输入内容必须是整数!”的提示,并让用户重新输入。

year = eval(input("请输入一个年份:"))
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    print("这是闰年.")
else:
    print("这不是闰年。")

总结:用了if-else分支结构,条件就直接翻译的题目

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

num1 = eval(input("请输入一个整数:"))
num2 = eval(input("请再输入一个整数:"))
m = max(num1,num2)
n = min(num1,num2)
rem = m%n
while True:
    if rem != 0:
        m = n
        n = rem
        rem = m%n
    else:
        rem = n
        break
print("{}和{}的最大公约数为:{}".format(num1,num2,rem))
#计算最小公倍数
lcm = num1*num2/rem
print("{}和{}的最小公倍数为:{}".format(num1,num2,lcm))

总结:最主要的还是对辗转相除法不了解,编程首先要做到理解问题太重要了,用了m%n取余和倒数第二次余数即为最大公因数,这点不要弄混了。

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

ckl = str(input("请输入一串字符:"))
count1 = 0
count2 = 0
count3 = 0
for i in ckl:
    if "a" <= i <= "z" or "A" <= i <= "Z":
        count1 += 1
    elif "0" <= i <= "9":
        count2 += 1
    elif i == " ":
        count3 += 1
count4 = len(ckl)-count1-count2-count3
print("输入的字符中有{}个英文字符,有{}个数字,有{}个空格和{}个其他字符。".format(count1,count2,count3,count4))

总结:我看网上大多数都用了ord()函数返回Unicode编码的方式来判断字母,数字和符号,这些对应的Unicode编码在网上都搜得到就不记录了,对于我来说太难了也不强行记忆了(果然太笨了T^T),然后我就直接转换成字符串形式直接对每个元素进行识别和分类,目前还没发现有什么不妥,有什么不好也请指教QAQ。

4.改编题目1中的程序,当用户输入出错时给出“输入内容必须是整数!”的提示,并让用户重新输入。

while True:
    year = eval(input("请输入一个年份:"))         
    if type(year) == int:
        break
    else:
        print("输入内容必须为整数!")
        continue
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    print("这是闰年.")
else:
    print("这不是闰年。")

总结:(第一次还看错题了-_-!,看成改编前面的猜谜游戏)
这道题第一次是想用try-except结构发现自己知识薄弱不知道怎么将后面的if代入try的语句块中,另外用try-except结构的话会出现浮点数和复数不会出现在except语句块的bug,同时又想引入type()函数来判断是否为整数的代码,就直接用了最简单易懂的if-else结构和循环结构,我看的懂就好:)。

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

from random import *
times = eval(input("请输入试验次数:"))
nochange_chance = 0 #不改变选择获胜的概率
change_chance = 0 #改变选择获胜的概率

for i in range(times):
    car = randint(0,2) #只有三扇门,随机车的位置
    my_choice = randint(0,2) #随机选择
    if car == my_choice:
        nochange_chance += 1
    else:
        change_chance += 1
print("改变选择获胜的概率为:{}".format(change_chance/times))
print("坚持选择获胜的概率为:{}".format(nochange_chance/times))

总结:最主要的还是理解问题,第一次我想得很复杂,考虑了改变选择前该怎么写代码,在主持人打开门后🐏和🚗选对的概率又怎么表示,一直在纠结主持人打开门看到🐏后对概率的影响,(深受长题目的困扰,想的太多反而把自己搞混了#~#—),但简化后本质就是我的选择(my_choice)和车的位置(car)是否对应的问题,“我”在改变选择后是否能选到车的那扇门,直接用randint()随机函数定位🚗的门和my_choice选择的门,对应就成功,没对应就失败。
根据结果来看,试验次数越多,改变选择获胜的概率越接近2/3,不改变选择获胜的概率越接近1/3.
这个模板可以用在以后行为实验和调查实验结果的概率预估中,不同的试验次数能有不同的结果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值