5、编程示例:猜数字
上集回顾:
- 布尔型(bool):True、False
- 条件控制:if ... else ...
猜数字游戏就是小P会想一个随机数,然后玩家通过输入数字去猜测。如果输入的数字不是随机数,小P会反馈大了还是小了,直到输入的数字和随机数一样就算成功。可以比一比谁用的次数更少!
一、随机数
为了编程实现这个小游戏,首先要生成一个随机数,Python已经准备好了一个random库,可以直接拿来使用。该库提供了一个random()函数,返回一个随机数N满足0<= N < 1:
>>> import random
>>> random.random()
0.5805537271589438
>>> random.random()
0.38519804422612247
>>> random.random()
0.45042797351175534
可以发现每次结果都不相同。不过这个浮点数位数有点多,要猜这个随机数不知道要猜多久……还好Python还提供了另外一个函数randint(a, b),该函数返回随机整数 N 满足 a <= N <= b。
>>> random.randint(0, 1)
1
>>> random.randint(0, 1)
0
>>> random.randint(0, 1)
1
>>> random.randint(0, 1)
0
>>> random.randint(0, 1)
0
>>> random.randint(0, 1)
0
这个好猜,50%的概率!如果要猜100以内的数就需要写成:random.randint(0, 100)。
二、输入交互
随机数搞定了,下面就是怎么输入的问题了。Python提供了一个input()函数,可以让玩家在命令行进行输入交互。调用该函数时还可以加入提示语,提示语会显示在最前面用作输入提示:
>>> input("请输入一个数字:")
请输入一个数字:100
'100'
>>> x = input("请输入一个数字:")
请输入一个数字:50
>>> print(x)
50
>>> type(x)
<class 'str'>
实现发现input的输入的都是字符串类型,如果想要整数还需要进行一次转换:
>>> y = int(x)
>>> print(y)
50
>>> type(y)
<class 'int'>
三、while循环
输入交互也搞定了,好像还有个问题,现在玩家只能猜一次,而游戏需要玩家在没猜对之前能够一直猜。这时候就需要用到while循环,在一定条件下循环执行代码块,直到条件不成立退出循环。例如计算从1加到100的总和:
>>> total = 0
>>> index = 0
>>> while index < 100 :
... index = index + 1
... total = total + index
...
>>> print(total)
5050
四、开始编程
万事俱备,开始编程:
>>> randNum = random.randint(0, 100) # 1,生成一个随机数N:0 <= N <= 100
>>> while True : # 2,一直循环让玩家猜数字
... inputStr = input("请输入一个数字: ") # 3,存储用户输入的数字
... inputNum = int(inputStr) # 4,把输入的字符串转换成整数
... if inputNum > randNum : print("啊哦,您输入的数字大了!") # 5, 如果玩家输入的数字 大于 随机数
... elif inputNum < randNum : print("哦吼,您输入的数字小了!") # 6, 否则,如果输入的数字 小于 随机数
... else : # 7, 再否则,就是相等了
... print("Bingo,你赢了!")
... break # 退出循环,结束游戏
...
请输入一个数字: 50
啊哦,您输入的数字大了!
请输入一个数字: 25
啊哦,您输入的数字大了!
请输入一个数字: 12
哦吼,您输入的数字小了!
请输入一个数字: 18
啊哦,您输入的数字大了!
请输入一个数字: 15
啊哦,您输入的数字大了!
请输入一个数字: 14
Bingo,你赢了!
五、Python文件
程序写完了,玩了一把还挺好玩的,但是想再玩一把的话还要再敲一遍代码?能不能把写好的代码保存一个地方,想玩就执行一下就行了?当然有的,只要把一个文本保存成以.py结尾的文件名,就是一个Python文件了。然后在命令行执行python xxx.py就能执行Python文件了。比如我们打开一个记事本,输入上面的代码,并保存成guess.py,然后执行python guess.py,就能愉快的玩耍了!
# guess.py
import random
# 1,生成一个随机数N:0 <= N <= 100
randNum = random.randint(0, 100)
# 2,一直循环让玩家猜数字
while True :
# 3,存储玩家输入的数字
inputStr = input("请输入一个数字: ")
# 4, 把输入的字符串转换成整数
inputNum = int(inputStr)
# 5, 如果玩家输入的数字 大于 随机数
if inputNum > randNum : print("啊哦,您输入的数字大了!")
# 6, 否则,如果输入的数字 小于 随机数
elif inputNum < randNum : print("哦吼,您输入的数字小了!")
# 7, 再否则,就是相等了
else :
print("Bingo,你赢了!")
break # 退出循环,结束游戏
执行结果:
执行结果
注:Windows用户一定要显示记事本的扩展名.txt
本集技能总结:
- 随机数:random.random()、random.randiint()
- 输入交互:input()
- while循环:当条件成立时,循环执行代码块
- Python文件:xxx.py
终于写完了,本来还以为掌握的技能差不多了,结果又临时恶补了3项技能。不过总算完成了,可以愉快的玩耍了!
下集见!