实例10:猜数游戏
猜数游戏是一个古老的密码破译类、益智类小游戏,通常由两个人参与,一个人设置一个数字,一个人猜数字,当猜数字的人说出一个数字,由出数字的人告知是否猜中:若猜测的数字大于设置的数字,出数字的人提示“很遗憾,你猜大了”;若猜测的数字小于设置的数字时,出数字的人提示“很遗憾,你猜小了”;若猜数字的人在规定的次数内猜中设置的数字,出数字的人提示“恭喜,猜数成功”。
本实例要求编写程序,实现遵循上述规则的猜数字游戏,并限制猜数机会只有5次。
实例目标
- 掌握while循环的使用
- 了解break的基本用法
- 了解导入random模块的方式
实例分析
本案例的猜数字游戏是针对1-100以内的整数数字进行猜测,猜测的数字由Python中random模块中randint()方法随机产生;因为规定玩家有5次机会,所以可以使用for循环与range()函数控制循环次数,在进行猜数过程中还需要对玩家输入的内容进行判断,这里可以使用if-elif语句判断,如使用isdigit()方法判断玩家输入的内容是否是数字;使用比较运算符判断玩家输入的数字是否符合在规定范围内;判断玩家输入的数字是否与产生的随机数相等,如果相等输出“恭喜你用了x次猜对了”,当输入次数达到5次时,则输出“很遗憾,x次机会已用尽,游戏结束,答案为y”。根据以上分析可整理出以下实现思路:
(1)使用import语句导入random模块
(2)使用random模块中的randint()方法生成一个100以内的随机整数
(3)使用for循环控制玩家猜测的次数
(3)使用input ()函数接收玩家输入的数据
(4)判断输入数据的数据是否为数字
(5)判断输入的数据是否在指定范围内
(6)判断玩家输入的数据是否与生成的随机数一致,如果一致使用break语句跳出循环
(7)如果玩家输入的数据与生成额随机数不一致,给出相应提示
(8)当玩家猜测5次后,仍没有猜对,结束程序
代码实现
import random
print("猜数字游戏,输入一个1-100以内的数字")
random_num = random.randint(1, 100)
# print(random_num) # 打开注释可查看生成的随机数
for frequency in range(1,6):
number = input("请输入一个数字:")
if number.isdigit() is False:
print('请输入一个正确的数字')
elif int(number) < 0 or int(number) > 100:
print("请输入1-100范围的数字")
elif random_num == int(number):
print("恭喜你用了%d次猜对了" % frequency)
break
elif random_num > int(number):
print("很遗憾,你猜小了")
else:
print("很遗憾,你猜大了")
if frequency == 5:
print("很遗憾,%d次机会已用尽,游戏结束,答案为%d" % (frequency, random_num))
首先使用random模块中的randint()方法随机生成一个整数并赋值给变量random_num,然后使用for循环遍历5次判断用户猜测的数字是否正确,在for循环中将用户输入的内容赋值给变量number,并对输入的内容进行判断:如果输入的内容不是数字或者输入的数字范围不在1-100之间,使用print()函数分别输出“请输入一个正确数字”或“请输入1-100范围的数字”;如果用户输入的数字符合要求,判断输入的数字与随机生成的数字是否相等。如果猜测的数字与随机生成的数字相等,使用print()函数输出“恭喜你用了x次猜对了”,并使用break跳出while循环;如果输入的数字小于或大于随机生成的数字,那么使用print()函数输出“很遗憾,你猜小了”或“很遗憾,你猜大了”,当变量frequency值为5时,使用print()函数输出正确结果。
代码测试
运行代码,控制台输出结果如下(猜数成功):
猜数字游戏,输入一个1-100以内的数字
请输入一个数字:12
很遗憾,你猜小了
请输入一个数字:14
恭喜你用了2次猜对了
运行代码,控制台输出结果如下(猜数失败):
猜数字游戏,输入一个1-100以内的数字
请输入一个数字:1
很遗憾,你猜小了
请输入一个数字:1
很遗憾,你猜小了
请输入一个数字:1
很遗憾,你猜小了
请输入一个数字:1
很遗憾,你猜小了
请输入一个数字:1
很遗憾,你猜小了
很遗憾,5次机会已用尽,游戏结束,答案为25