目录
前言
案例包括猜数游戏,统计不同字符个数,最大公约数计算,羊车门问题等几个问题的源代码。每道题中涉及的函数与其他知识点,会在代码后列出解释及相应的案例,如果看完代码,有疑惑,可以进行查阅。
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的简单应用案例,代码不足的地方还请评论区告诉我,或者有任何疑问都可以来留言。