程序的控制结构编程题
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.
这个模板可以用在以后行为实验和调查实验结果的概率预估中,不同的试验次数能有不同的结果。