程序练习题

4.1猜数游戏
代码如下(加入了异常捕获):

import random
num = random.randint(1,9)
counts =1
try:
        guess_num = eval(input('请输入1-9之内的整数:'))
        while  guess_num  != num:
                if guess_num > num:
                        print('遗憾,太大了')
                elif guess_num < num:
                        print('遗憾,太小了')
                counts += 1
                guess_num = eval(input('请继续输入数字:'))
        print('预测{}次,你猜中了!'.format(counts))
except NameError:
        print('请输入数字!')

运行结果如下:

请输入1-9之内的整数:a
请输入数字!
>>> 
请输入1-9之内的整数:8
遗憾,太小了
请继续输入数字:9
预测2次,你猜中了!

4.2 统计不同字符的个数
代码如下:

#统计字符.py
a,b,c,d,e = 0, 0, 0, 0, 0
Str = input()
for item in Str:
        if 0x4e00 <= ord(item) < 0x9fa6:
                a += 1
        elif ord('0') <= ord(item) <= ord('9'):
                b += 1
        elif ord('a') <= ord(item) <= ord('z') or ord('A') <= ord(item) <= ord('Z'):
                c += 1
        elif ord(' ') == ord(item):
                d += 1
        else:
                e += 1
print('中文字符有{}个,数字字符有{}个,英文字符有{}个,空格字符有{}个,其他字符有{}个。'.format(a,b,c,d,e))

结果如下:

Hello World!你好 世界。:)
中文字符有4个,数字字符有0个,英文字符有10个,空格字符有2个,其他字符有4个。

4.3 最大公约数与最小公倍数
代码如下:

#最大公约数与最小公倍数
a,b = eval(input('请输入两个需要求解的数(用逗号隔开):'))
c = max(a,b)
d = min(a,b)
while c % d != 0:
        e = c % d
        c = d
        d = e #辗转相除法
f = (a*b)/e          
print('最小公约数是{},最大公倍数是{}'.format(e,int(f)))

运行结果

请输入两个需要求解的数(用逗号隔开):7,8
最小公约数是1,最大公倍数是56
请输入两个需要求解的数(用逗号隔开):15,25
最小公约数是5,最大公倍数是75

4.4 猜数游戏续

#猜数游戏续
import random
num = random.randint(0,100)
counts = 0
try:
        guess_num = eval(input('请输入1-100之内的整数:'))
        while  guess_num  != num:
                if guess_num > num:
                        print('遗憾,太大了')
                elif guess_num < num:
                        print('遗憾,太小了')
                counts += 1
                guess_num = eval(input('请继续输入数字:'))
        print('预测{}次,你猜中了!'.format(counts))
except NameError:
        print('请输入数字!')

运行结果

请输入1-100之内的整数:70
遗憾,太大了
请继续输入数字:40
遗憾,太大了
请继续输入数字:20
遗憾,太大了
请继续输入数字:10
遗憾,太大了
请继续输入数字:3
遗憾,太小了
请继续输入数字:7
遗憾,太小了
请继续输入数字:9
遗憾,太大了
请继续输入数字:8
预测7次,你猜中了!
请输入1-100之内的整数:30
遗憾,太大了
请继续输入数字:5
遗憾,太小了
请继续输入数字:10
遗憾,太小了
请继续输入数字:15
遗憾,太小了
请继续输入数字:20
遗憾,太大了
请继续输入数字:17
预测5次,你猜中了!

4.5 猜数游戏续

#猜数游戏续
import random
num = random.randint(0, 100)
counts = 1
guess_num = input('请输入1-100之内的整数(仅键入空格退出):')

while guess_num != '':
    try:
        guess_num  = eval(guess_num)
        #eval不能判断非整数的数字,加入isinstance(obj, int)判断输入是否为整数
        if guess_num > num and isinstance(guess_num, int):
            print('遗憾,太大了')
            counts += 1
            guess_num = input('请继续输入数字:')
        elif guess_num < num and isinstance(guess_num, int):
            print('遗憾,太小了')
            counts += 1
            guess_num = input('请继续输入数字:')
        elif guess_num == num and isinstance(guess_num, int):
            print('预测{}次,你猜中了!'.format(counts))
            break
        else:
            print('输入内容必须为整数!')
            counts += 1
            guess_num = input('请继续输入数字:')
    except:
        print('输入内容必须为整数!')
        counts += 1
        guess_num = input('请继续输入数字:')

运行结果

请输入1-100之内的整数(仅键入空格退出):3.3
输入内容必须为整数!
请继续输入数字:15
遗憾,太小了
请继续输入数字:80
遗憾,太大了
请继续输入数字:a
输入内容必须为整数!
请继续输入数字:70
遗憾,太小了
请继续输入数字:76
遗憾,太大了
请继续输入数字:73
遗憾,太小了
请继续输入数字:72
遗憾,太小了
请继续输入数字:71
遗憾,太小了
请继续输入数字:75
遗憾,太大了
请继续输入数字:74
预测11次,你猜中了!
Process finished with exit code 0

4.6 羊车门问题

import random

num, counts_1, counts_2 = 0, 0, 0
while num < 10000:
    doors = [1, 2, 3]
    car_door = random.randint(1, 3)#该门后有车
#   print("有车的是第{}号门".format(car_door))
    guess_num = random.randint(1, 3)#参赛者选择的门
#   print("参赛者选择第{}号门".format(guess_num))
    doors.remove(car_door)#将有车的门从主持人的选择中移除
    if car_door != guess_num:
        doors.remove(guess_num)#当参赛者没有选到有车的门时,将参赛者选择的门移除,此时主持人仅能选择剩下的门
        sheep_1 = doors[0]
    else:#当参赛者选择有车的门,主持人随机选择一个有羊的门
        sheep_1 = doors[random.randint(0, 1)]
#   print("第{}号门后有羊".format(sheep_1))

    if guess_num == car_door:
        counts_1 += 1#不改变选择选择正确的次数

    doors = [1, 2, 3]
    doors.remove(sheep_1)
    doors.remove(guess_num)
    guess_num = doors[0]
    if guess_num == car_door:
        counts_2 += 1#改变选择选择正确的次数
    num += 1

print("不改变选择正确的概率为:{:.2%}".format(counts_1/10000))
print("改变选择正确的概率为:{:.2%}".format(counts_2/10000))

运行结果,根据结果显示,换门会将猜对的概率由1/3提高至1/2:

不改变选择正确的概率为:33.64%
改变选择正确的概率为:66.36%

Process finished with exit code 0

4.7 异常处理改造实例1(温度转换实例),使其能够接受并处理用户的任何输入

TempStr = input('请输入带有符号的温度值(仅输入回车结束):')
while TempStr != '':
    try:
        if TempStr[-1] in ['F', 'f']:
            C = (eval(TempStr[0:-1]) - 32)/1.8
            print('转换后的温度是{:.2f}C'.format(C))
            break
        elif TempStr[-1] in ['C', 'c']:
            F = 1.8*eval(TempStr[0:-1]) + 32
            print('转换后的温度是:{:.2f}F'.format(F))
            break
        else:
            print('输入格式有误,请重新输入')
            TempStr = input('请输入带有符号的温度值(仅输入回车结束):')
    except:
        print('输入格式有误,请重新输入')
        TempStr = input('请输入带有符号的温度值(仅输入回车结束):')

运行结果:

请输入带有符号的温度值(仅输入回车结束):a
输入格式有误,请重新输入
请输入带有符号的温度值(仅输入回车结束):23
输入格式有误,请重新输入
请输入带有符号的温度值(仅输入回车结束):33C
转换后的温度是:91.40F

Process finished with exit code 0
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐