> 文档中心 > Python二级 第四章代码和习题(程序的控制结构)

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))