第四章课后习题-用Python实现羊车门问题,最大公约数计算,猜字游戏,统计不同字符个数。

目录

前言

4.1 猜数游戏

random库中的两个常用函数:

eval()函数

4.2 统计不同字符个数

两个内置的字符串处理函数:

chr(x)

ord(x)

4.3 最大公约数的计算

4.5 猜字游戏续

4.6 羊车门问题

总结


前言

案例包括猜数游戏,统计不同字符个数,最大公约数计算,羊车门问题等几个问题的源代码。每道题中涉及的函数与其他知识点,会在代码后列出解释及相应的案例,如果看完代码,有疑惑,可以进行查阅。


4.1 猜数游戏

题目:程序中预设一个0~9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了”;小于预设的数,显示“遗憾,太小了”,如此循环,直至猜中该数,显示“预测N次,你猜中了!”,其中N是用户输入数字的次数。

import random
random.seed(250)#此处设种子数为250
a = random.randint(0,9)#随机产生一个预设整数
N = 1#用户的猜测次数
b = eval(input('请输入一个0-9的整数:'))#用户输入的猜测值
while(b!=a):#猜测值与预设值不相等,一直循环
    if (b > a):
        N += 1
        b = eval(input("遗憾,你的预测太大了,请重新输入:"))
    else:
        N += 1
        b = eval(input("遗憾,你的预测太小了,请重新输入:"))
print("恭喜你猜对了,共猜{}次".format(N))#循环结束,输出猜测次数。

random库中的两个常用函数:

seed(a=None)

      初始化随机数种子,默认值为当前系统时间。通俗来说,生成随机数之前可以通过seed()函数指定随机数种子,随机数种子一般是一个整数,只要种子相同,每次生成的随机数序列也相同。这种情况便于测试和同步数据。

示例如下:

>>>seed(250)#随机数种子赋值250

>>>"{}".format(randint(0,9))

'4'

>>>"{}".format(randint(0,9))

'0'

>>>seed(250)#再次给随机数种子赋值250

>>>"{}".format(randint(0,9))

'4'

#可以看到,在赋值相同种子数后,产生的随机数也相同

randint(a,b) 

生成一个[a,b]之间的整数

>>>randint(0,9)

4

eval()函数

作用:将输入的字符串转变为Python语句,并执行该语句

>>>x = 1

>>>eval("x+1")

2

4.2 统计不同字符个数

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

str = input("请输入包含任意符号的一串字符:")
digit = 0
hanzi = 0
letter_upper = 0
letter_lower = 0
other = 0
space = 0
for i in str:
    if chr(48)<=i<=chr(57):#判断数字
        digit += 1
    elif i ==' ':#判断空格
        space +=1
    elif 97<=ord(i)<=122:#判断小写字母
        letter_lower += 1
    elif 65<=ord(i)<=90:#判断大写字母数
        letter_upper += 1
    elif 19968<=ord(i)<=40869:#判断汉字
        hanzi += 1
    else:#其他字符
        other += 1
print("digit={},hanzi={},upper_letter={},lower_letter={},other={},"\
      "space={}".format(digit,hanzi, letter_upper,letter_lower,other,space))

两个内置的字符串处理函数:

chr(x)

返回Unicode编码x对应得单字符

ord(x)

返回字符x对应的Unicode编码

4.3 最大公约数的计算

a = eval(input("请输入两个整数:"))
b = eval(input(""))
c = a
d = b
if(a>=b):
    r = a%b
else:
    r = b%a
    t = b
    b = a
    a = t
while(r!=0):
    a = b
    b = r
    r = a % b
print("{}和{}的最大公约数是{},最小公倍数是{:.0f}".format(c,d,b,c*d/b))

4.5 猜字游戏续

问题:对于程序练习题4.4程序,当用户输入的不是整数(如字母浮点数等)时,程序会终止执行退出。改编该程序,当用户输入出错时给出“输入内容必须为整数!”的提示,并让用户重新输入。

import random
a = random.randint(0,100)#随机产生一个整数
N = 1#用户的猜测次数
b = eval(input('请输入一个0-9的整数:'))
while(b!=a):
    try:
        if (type(b) == type(100)):
            if (b > a):
                N += 1
                b = eval(input("遗憾,你的预测太大了,请重新输入:"))
            else:
                N += 1
                b = eval(input("遗憾,你的预测太小了,请重新输入:"))
        else:
            b = eval(input('请重新输入一个0-100的整数'))
    except NameError:
        print("输入必须为整数")
        b = eval(input("请重新输入:"))
print("恭喜你猜对了,共猜{}次".format(N))#循环结束,输出猜测次数

4.6 羊车门问题

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

import random
a = eval(input("请输入总共选择多少次:"))
num1 ,num2 = 0,0

#选手不更换选择的情况
for i in range(a):
    people = random.randint(1, 3)#1代表车,2,3代表山羊
    if people == 1:
        num1 += 1#选中时次数加一
print("不更换选择时的选中车的概率是{:.3f}".format(num1/a))
#选手更换选择的情况:
for i in range(a):
    people = random.randint(1, 3)  # 1代表车,2,3代表山羊
    if people == 2:
        num2 += 1#当人选中山羊且选择更换时,主持人已经打开了另一扇山羊,所以一定可以选中汽车
    elif people == 3:
        num2 += 1#同理
    else:
        pass#此时人选中的是汽车,当他选择更换时,则错过机会
print("更换选择时她选中汽车的概率是:{:.3f}".format(num2/a))

总结


以上就是本节内容,仅仅简单介绍了random的简单应用案例,代码不足的地方还请评论区告诉我,或者有任何疑问都可以来留言。

  • 6
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不褈名好难

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值