Python二级 第四章代码和习题(程序的控制结构)
这一章比较简单,和中学时期学的流程图类似,值得一提的是程序的异常处理try-except,可以让程序有更好的用户体验。书前面的基础解释有什么问题可以私信我讨论!
实例解析
实例4.1 猜数字游戏
import randomtarget = random.randint(1,1000)count = 0while True: guess = eval(input('请输入一个猜测的整数(1-1000):')) count = count + 1 if guess > target: print('猜大了') elif guess < target: print('猜小了') else: print('猜对了') breakprint("此轮的猜测次数是:", count)
实例4.2 改良的猜数字游戏
#改良版:由于使用eval函数获得用户输出,可能会出现用户输入非数字产生运行错误import randomtarget = random.randint(1,1000)count = 0while True: try: guess = eval(input('请输入一个猜测的整数(1-1000):')) except: print('输入有误,请重试,不计入次数哦!') continue count = count + 1 if guess > target: print('猜大了') elif guess < target: print('猜小了') else: print('猜对了') breakprint("此轮的猜测次数是:", count)
编程题
1.输入一个年份,输出是否为闰年。#闰年条件:能被4整除但是不能被100整除,或者能被400整除的年份都是闰年
n = int(input("请输入一个年份:"))if n%4==0 and n%100!=0 or n%400==0: print("是闰年")else: print("不是闰年")
2.最大公约数计算。获取两个整数,求这两个整数的最大公约数和最小公倍数。最大公约数一般使用辗转相除法,最小公倍数则使用两个数的乘积除以最大公约数
# 2a = int(input("请输入第一个整数:"))b = int(input("请输入第二个整数:"))x, y = a, bif x >= y: passelse: x, y = y, xwhile x%y != 0: x, y = y, x%yprint("最大公约数为:{},最小公倍数为{}".format(y, int(a*b/y)))
3.统计不同字符个数。用户从键盘键入一行字符,编写一个程序,统计并输出其中英文字符、数字、空格和其他字符的个数
x = input("请输入一串字符:")counts = {}for i in x: if i in counts: counts[i] += 1 else: counts[i] = 1items = list(counts.items())items.sort(key=lambda x:x[1],reverse = True)for i in range(len(items)): word, counts = items[i] print("{0:5}".format(word,counts))
4.猜数字游戏续。当用户输入的不是整数(如字母、浮点数等)时,程序会终止执行退出
import randomtarget = random.randint(1,1000)count = 0while True: try: guess = eval(input('请输入一个猜测的整数(1-1000):')) except: print('输入有误,退出程序') break count = count + 1 if guess > target: print('猜大了') elif guess < target: print('猜小了') else: print('猜对了') print("此轮的猜测次数是:", count)
5.羊门车问题。有三扇关闭的门,一扇后面停着汽车,其余门后是山羊,只有主持人知道每扇门的背后是什么。参与者可以选择一扇门,在开启它之前,主持人会打开另一扇门,露出后面的山羊,然后允许参赛者更换自己的选择。请问:参赛者更换选择后能否增加猜中汽车的机会?用Random库对这个随机事件进行预测,分别输出参赛者改变选择和坚持选择获胜的概率
from random import*times = 1000000my_first_choice_n=0#初始化不改选择的次数my_change_choice_n=0#初始化更改选择的次数for i in range(times): car_inDoor = randint(0,2)#车在随机的门后面 my_guess = randint(0,2) if car_inDoor == my_guess: my_first_choice_n+=1#猜对了 else: my_change_choice_n+=1#没猜对,肯定改变选择的猜对了print("不改选择:{}".format(my_first_choice_n/times))print("更改选择:{}".format(my_change_choice_n/times))