python实现简单的猜数字游戏

  • Post author:
  • Post category:python



用优雅的python语言实现简单的猜数字游戏,并给出一定的提示,附加一些小亮点,增加游戏体验。

代码如下:

import random
import time #时间模块
#在命令行中输入:time.time()    time 是个模块,我们要调用模块里面的方法
#我们会得到一个秒数,是从(英国时间)1970年1月1日的零点开始到现在一共经过的秒数

import sys   #sys是系统
#print(sys.argv)     #此条语句可以输出系统中的命令行中的参数,#argv,用来取命令行的参数

guess_limit = int(sys.argv[1])    #下标从0开始,取到的是字符型,要变成int类型的
#在用命令行的形式输出结果:1.cmd打开黑窗口,进入到对应位置(存放python代码的要运行的那个文件位置)输出: python 文件名.py [其他的参数列表,用空格隔开]
#guess_limit是最大猜测次数
scores = []   #用于保存战绩

game_count = 0    #游戏的轮数
while (1):
	game_count =  game_count+1   #每执行一次轮数加一
	number = random.randint(1,10)  #在1到10之间随机产生一个数(1和10都包含在内)
	is_right = False    #用于判断是否猜对,默认是错
	begin_time = time.time()
	print("请在1到10之间猜一个数字")
	for i in range(guess_limit):
		guess_number = int(input())   #用户输入所猜的数字

		if(number == guess_number):
			is_right = True
			
			break;   #猜对了游戏就结束,循环终止
		else:
			print("不对哦",end=',') 
			if(number > int(guess_number)):
				print("猜小了",end=',')
			else:
				print("猜大了",end=',')

		if(i < guess_limit-1):   #猜测次数没有到就可以继续猜
			print("重新猜一下叭...")



	#对猜测结果进行处理
	if(is_right == True):
		print("猜对了,你真聪明")
	else:
		print("猜测机会已经用完啦...")

	end_time = time.time()
	used_time = end_time - begin_time  #在游戏开始和结束处都记录时间,两者的时间差就是游戏所用的时间
	used_time = round(used_time,2)     #时间后面有很多位,用round方法只使其只保留两位小数
	print(f"本局游戏共用了{int(used_time)}秒")

	#保存战绩
	scores.append((game_count,is_right,used_time))    #元组
	best_score = min(scores,key=lambda x:x[2] if x[1] else 9999)   #最好的成绩
#取scores中的最小值,默认是对scores中第一个数据进行比较,也就是game_count,但是我们并不是取轮数的最小值,而是取时间的最小值,所以我们要设立key等于时间,求时间的最小值
#key=lambda x: x[2]解释
#lambda匿名函数
#  等价于
#  def 函数(x):
#     return x[2]
#x[2]是指列表或者字符串这样的第三个元素,因为下标从0开始
#在这里key=lambda x:x[2]我们可以理解为给把scores当成数组,取个名字为x,然后我们需要的时间是其中的第三个值,这里的下标是从0开始的,那么used_time对应的就是x[2],此处的if于下面某处代码类似,见下解
#当游戏成功的时候来判断是否存在最好成绩才是合理的,这里要用一个if来对比较的used_time进行筛选。当游戏失败就用used_time和9999比较(也可以是一个其他很大的数,python中数可以一直大下去,在这里取9999)

	print("\n=============历史战绩=================\n")
	for _game_count, _is_right, _used_time in scores:   #把scores里面的三个值拿出来,分别赋值给_game_count,_is_right,_used_time这三个变量
		# if(_is_right):    #普通的if语,对复杂的可以这样处理,对与简单的直接进行赋值的就可以使用下面一种
		# 	label = '成功✌'   #根据_is_right的值给label赋值,最后输出label
		# else:
		# 	label = '失败❌'

		#if的第二种方法
		label = '挑战成功' if(_is_right)   else  '挑战失败'

		best_label = 'MVP' if(_game_count == best_score[0] and best_score[1]) else ''    #在最好的成绩那一轮中加一个MVP标志

		print(f"第{_game_count}轮,{label},用时{_used_time}秒      {best_label} ")

	print("\n======================================")


	#是否游戏判断
	stop = input("按下y重新开一局,按其他键结束游戏(直接回车也可终止游戏)...")
	if(stop != 'y'):
		print("欢迎下次来玩...")
		break
	else:
		print("\n--------------------------------------------\n")

		print("新一轮游戏开始咯",end ='\n')  #默认就是会回车,所以end='\n'可以不写


效果如图所示:


黑窗口游戏体验


在这里比一般的程序多输入了一个参数3,这个参数会被接收,因为我们要用到这个参数,所以当我们不输入这个参数时有bug,如下:


bug


argv可以获取我们输入的参数,在本程序中我们获取输入的第二个参数,当作我们的允许每轮游戏猜测的次数。代码中有解释喔~



版权声明:本文为c1719561053原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。