小游戏介绍

猜数字小游戏会根据不同的设置选项,进入到不同难度的游戏模式。找到规律后就会发现不是盲目随便猜的,详细玩法见下面的介绍。python3环境下代码可以直接可用。

源码

import random

import time

# 自定义判断是否为数字

def is_number(s):

try:

float(s)

return True

except ValueError:

return False

# 猜数字小游戏主功能函数

def guessNumber():

print('''

*******************************************************************************

数字猜猜猜玩法介绍:

1、程序开始后会生成一个数字,根据设置,可为整数或小数,每轮游戏中该数字保持不变

2、输入你猜测的这个数是多少,如果输错会让你继续输入,直到猜对(如果设置了最多次

数限制,达到限制后会自动退出本轮游戏)

3、可以设置是否提示目标数字所在的区间

4、如果连续3次输入的不是数字,会强制退出本轮游戏。

5、一轮游戏结束后如果选择继续玩游戏则重新开始一轮,如果选择不继续玩游戏则退出游戏

6、如果设置的开始数小于结尾数,则会对换两个数的位置

*******************************************************************************

''')

# 设置游戏参数(起始和结尾数后续改为游戏难易程度,根据不同的难易程度自动生成随机开始和结尾数)

print('******请先设置游戏参数******')

# 难度选择,0-目标数字在0-100之间,1-目标数字在-10000-10000之间,2-目标数字在-100000-100000之间,3-开始和结束数字随机,其他-目标数字在0-1000之间

print('难易程度说明:0-目标数字在0-1000之间,1-目标数字在-10000-10000之间,2-目标数字在-100000-100000之间,3-开始和结束数字随机,其他-目标数字在0-500之间')

easyOrHard = input('请选择难易程度:')

if easyOrHard == '0':

startNum = 0

endNum = 999 + random.random()

elif easyOrHard == '1':

startNum = -10000 + random.random()

endNum = 9999 + random.random()

elif easyOrHard == '2':

startNum = -100000 + random.random()

endNum = 99999 + random.random()

elif easyOrHard == '3':

startNum = random.uniform(-100000000, 0)

endNum = random.uniform(0.1, 100000000)

else:

startNum = 0

endNum = 499 + random.random()

limitCount = input('设置最多尝试次数(正整数n-限制n次,其他-不限制):')

withDecimal = input('设置是否带小数(1-带小数,其他-不带小数):')

decimals = input('设置小数的最大位数(必须为整数且大于等于1,否则默认为1,并且该参数只是限制小数的最大位数,不一定是小数的实际位数):')

isTellMaxAndMin = input('设置是否显示目标数所处的区间(0-不显示,其他-显示):')

isNeedHelp = input('是否需要提示(y-需要,其他-不需要):')

if not is_number(limitCount) or int(float(limitCount)) < 1:

limitCount = 0

limitCount = int(float(limitCount))

if not is_number(decimals) or int(float(decimals)) < 1:

decimals = 1

decimals = int(float(decimals))

try:

# 游戏开关

is_start_now = input('参数设置完成,是否现在开始游戏?[y-开始,q-退出,其他-稍后开始],请选择:').lower()

while (is_start_now != 'y'):

if is_start_now == 'q':

print('已退出游戏')

return False

is_start_now = input('是否现在开始游戏?[y-开始,q-退出,其他-稍后开始],请选择:').lower()

# 游戏开始,并开始计时

gameWheel = 1

wheelsCostTimeDict = {}

while is_start_now == 'y':

if gameWheel > 1:

isResetGameParams = input('是否重新设置游戏参数(y-重新设置,其他-不重新设置),请选择:')

if isResetGameParams == 'y':

print(

'难易程度说明:0-目标数字在0-1000之间,1-目标数字在-10000-10000之间,2-目标数字在-100000-100000之间,3-开始和结束数字随机,其他-目标数字在0-500之间')

easyOrHard = input('请选择难易程度:')

if easyOrHard == '0':

startNum = random.random()

endNum = 999 + random.random()

elif easyOrHard == '1':

startNum = -10000 + random.random()

endNum = 9999 + random.random()

elif easyOrHard == '2':

startNum = -100000 + random.random()

endNum = 99999 + random.random()

elif easyOrHard == '3':

startNum = random.uniform(-100000000, 0)

endNum = random.uniform(0.1, 100000000)

else:

startNum = random.random()

endNum = 499 + random.random()

limitCount = input('设置最多尝试次数(正整数n-限制n次,其他-不限制):')

withDecimal = input('设置是否带小数(1-带小数,其他-不带小数):')

decimals = input('设置小数的最大位数(必须为整数且大于等于1,否则默认为1,并且该参数只是限制小数的最大位数,不一定是小数的实际位数):')

isTellMaxAndMin = input('设置是否显示目标数所处的区间(0-不显示,其他-显示):')

isNeedHelp = input('是否需要提示(y-需要,其他-不需要):')

if not is_number(limitCount) or int(float(limitCount)) < 1:

limitCount = 0

limitCount = int(float(limitCount))

if not is_number(decimals) or int(float(decimals)) < 1:

decimals = 1

decimals = int(float(decimals))

# 生成目标数字

if startNum > endNum:

startNum, endNum = endNum, startNum

if str(withDecimal) != '1':

startNum, endNum = int(startNum), int(endNum)

randomNum = random.randint(startNum, endNum)

randomNumType = '整数'

else:

startNum, endNum = float(startNum), float(endNum)

startNum_decimal_len, endNum_str_decimal_len = len(str(startNum).split('.')[1]), len(

str(endNum).split('.')[1])

decimal_len_max = max(startNum_decimal_len, endNum_str_decimal_len)

if decimal_len_max > decimals:

decimal_len_max = decimals

randomNum = round(random.uniform(startNum, endNum), decimal_len_max)

startNum = round(startNum, decimal_len_max)

endNum = round(endNum, decimal_len_max)

randomNumType = '小数'

# 开始游戏

if limitCount > 0:

limitCountInfo = '你只有 %d 次机会!' % (limitCount,)

else:

limitCountInfo = '不限制次数'

if str(isTellMaxAndMin) == '0':

print('第 %d 局游戏开始,目标数字已生成,%s' % (gameWheel, limitCountInfo))

else:

print('第 %d 局游戏开始,目标数字已生成,大小介于[%s, %s]之间,%s' % (gameWheel, str(startNum), str(endNum), limitCountInfo))

count = 0

countError = 0

start = time.time()

while 1:

try:

if str(withDecimal) != '1':

yourNum = int(float(input('请输入你认为正确的数字:')))

else:

yourNum = float(input('请输入你认为正确的数字:'))

count += 1

except:

countError += 1

if countError < 3:

print('输入的不是数字!')

continue

else:

print('连续3次输入非数字,本轮游戏终止!')

wheelsCostTimeDict[gameWheel] = -1

gameWheel += 1

break

countError = 0

if limitCount > 0:

biggerMsg = '大了,你的数字比目标数字大【第 %d 次,剩余 %d 次机会】' % (count, limitCount - count)

smallerMsg = '小了,你的数字比目标数字小【第 %d 次,剩余 %d 次机会】' % (count, limitCount - count)

else:

biggerMsg = '大了,你的数字比目标数字大【第 %d 次】' % (count,)

smallerMsg = '小了,你的数字比目标数字小【第 %d 次】' % (count,)

if yourNum > randomNum:

print(biggerMsg)

elif yourNum < randomNum:

print(smallerMsg)

else:

end = time.time()

costAllSeconds = round(end - start, 3)

print('恭喜,你猜对了!目标数字为 %s,共猜 %d 次,用时 %d 小时 %d 分钟 %s 秒' % (

str(randomNum), count, costAllSeconds / 3600, (costAllSeconds % 3600) / 60,

'{:g}'.format(costAllSeconds % 60)))

wheelsCostTimeDict[gameWheel] = costAllSeconds

gameWheel += 1

break

if limitCount > 0 and count >= limitCount:

print('你尝试了 %d 次均未猜中,次数已达到限制,终止!【目标数字为 %s】' % (count, str(randomNum)))

wheelsCostTimeDict[gameWheel] = -2

gameWheel += 1

break

# 达到限制次数的一半或者不限制次数时已猜测超过10次,会连续询问3次是否需要提示

if randomNum > 0:

isPositiveNumber = '大于0的数'

else:

isPositiveNumber = '小于等于0的数'

if limitCount % 2 == 0:

halfLimitCount = int(limitCount / 2)

else:

halfLimitCount = int(limitCount / 2) + 1

if isNeedHelp == 'y' and ((limitCount == 0 and count in [10, 11, 12]) or (

limitCount > 0 and count in [halfLimitCount, halfLimitCount + 1, halfLimitCount + 2])):

randomNumInfo = input('你有3次提示机会,是否需要?(y/y1-第1个提示,y2-第2个提示,y3-第3个提示,y4-第4个提示,其他-不需要),请选择:').lower()

if randomNumInfo == 'y' or randomNumInfo == 'y1':

print('目标数字的位数为【%d】' % (len(str(abs(randomNum)))), )

elif randomNumInfo == 'y2':

print('目标数字是一个【%s】' % (randomNumType,))

elif randomNumInfo == 'y3':

print('目标数字是一个【%s】' % (isPositiveNumber,))

elif randomNumInfo == 'y4' and randomNumType == '小数':

print('目标数字小数部分的位数为【%d】' % (len(str(abs(randomNum)).split('.')[1]),))

elif randomNumInfo == 'y4' and randomNumType == '整数':

print('目标数字中的一个数为【%s】' % (random.choice(str(abs(randomNum))),))

nextWheel = input('再玩一局?(q-退出游戏,其他-继续游戏),请选择:').lower()

if nextWheel == 'q':

break

wheelsCostTimeItems = wheelsCostTimeDict.items()

successWheelCostTimeList = [v for k, v in wheelsCostTimeItems if v > 0]

if successWheelCostTimeList:

maxCostTime = max(successWheelCostTimeList)

minCostTime = min(successWheelCostTimeList)

else:

maxCostTime = 0

minCostTime = 0

maxCostTimeWheelList = [k for k, v in wheelsCostTimeItems if v == maxCostTime]

minCostTimeWheelList = [k for k, v in wheelsCostTimeItems if v == minCostTime]

gameWheel = gameWheel - 1

if minCostTime < 3600:

minMsg = '%d 分钟 %s 秒' % (minCostTime / 60, '{:g}'.format(minCostTime % 60))

else:

minMsg = '%d 小时 %d 分钟 %s 秒' % (

minCostTime / 3600, (minCostTime % 3600) / 60, '{:g}'.format(minCostTime % 60))

if maxCostTime < 3600:

maxMsg = '%d 分钟 %s 秒' % (maxCostTime / 60, '{:g}'.format(maxCostTime % 60))

else:

maxMsg = '%d 小时 %d 分钟 %s 秒' % (

maxCostTime / 3600, (maxCostTime % 3600) / 60, '{:g}'.format(maxCostTime % 60))

print('游戏已退出,战绩如下:')

print('您总共玩了 %d 局,成功 %d 局,失败 %d 局' % (

gameWheel, len(successWheelCostTimeList), gameWheel - len(successWheelCostTimeList)))

if len(successWheelCostTimeList) > 1:

print('成功局中第 %s 局用时最短,最短用时 %s' % (minCostTimeWheelList, minMsg))

print('成功局中第 %s 局用时最长,最长用时 %s' % (maxCostTimeWheelList, maxMsg))

if len(successWheelCostTimeList) == 1:

print('第 %s 局成功,用时 %s' % (maxCostTimeWheelList, maxMsg))

return True

except Exception as e:

print('遇到异常,退出游戏!')

return e

if __name__ == '__main__':

guessNumber()

体验结果示例

*******************************************************************************

数字猜猜猜玩法介绍:

1、程序开始后会生成一个数字,根据设置,可为整数或小数,每轮游戏中该数字保持不变

2、输入你猜测的这个数是多少,如果输错会让你继续输入,直到猜对(如果设置了最多次

数限制,达到限制后会自动退出本轮游戏)

3、可以设置是否提示目标数字所在的区间

4、如果连续3次输入的不是数字,会强制退出本轮游戏。

5、一轮游戏结束后如果选择继续玩游戏则重新开始一轮,如果选择不继续玩游戏则退出游戏

6、如果设置的开始数小于结尾数,则会对换两个数的位置

*******************************************************************************

******请先设置游戏参数******

难易程度说明:0-目标数字在0-1000之间,1-目标数字在-10000-10000之间,2-目标数字在-100000-100000之间,3-开始和结束数字随机,其他-目标数字在0-500之间

>请选择难易程度:0

>设置最多尝试次数(正整数n-限制n次,其他-不限制):5

>设置是否带小数(1-带小数,其他-不带小数):1

>设置小数的最大位数(必须为整数且大于等于1,否则默认为1,并且该参数只是限制小数的最大位数,不一定是小数的实际位数):2

>设置是否显示目标数所处的区间(0-不显示,其他-显示):1

>是否需要提示(y-需要,其他-不需要):n

>参数设置完成,是否现在开始游戏?[y-开始,q-退出,其他-稍后开始],请选择:y

第 1 局游戏开始,目标数字已生成,大小介于[0.0, 999.57]之间,你只有 5 次机会!

>请输入你认为正确的数字:500

小了,你的数字比目标数字小【第 1 次,剩余 4 次机会】

>请输入你认为正确的数字:700

小了,你的数字比目标数字小【第 2 次,剩余 3 次机会】

>请输入你认为正确的数字:900

大了,你的数字比目标数字大【第 3 次,剩余 2 次机会】

>请输入你认为正确的数字:800

小了,你的数字比目标数字小【第 4 次,剩余 1 次机会】

>请输入你认为正确的数字:750.91

小了,你的数字比目标数字小【第 5 次,剩余 0 次机会】

你尝试了 5 次均未猜中,次数已达到限制,终止!【目标数字为 871.98】

>再玩一局?(q-退出游戏,其他-继续游戏),请选择:y

>是否重新设置游戏参数(y-重新设置,其他-不重新设置),请选择:y

难易程度说明:0-目标数字在0-1000之间,1-目标数字在-10000-10000之间,2-目标数字在-100000-100000之间,3-开始和结束数字随机,其他-目标数字在0-500之间

>请选择难易程度:tt

>设置最多尝试次数(正整数n-限制n次,其他-不限制):15

>设置是否带小数(1-带小数,其他-不带小数):0

>设置小数的最大位数(必须为整数且大于等于1,否则默认为1,并且该参数只是限制小数的最大位数,不一定是小数的实际位数):

>设置是否显示目标数所处的区间(0-不显示,其他-显示):

>是否需要提示(y-需要,其他-不需要):r

第 2 局游戏开始,目标数字已生成,大小介于[0, 499]之间,你只有 15 次机会!

>请输入你认为正确的数字:250

大了,你的数字比目标数字大【第 1 次,剩余 14 次机会】

>请输入你认为正确的数字:100

小了,你的数字比目标数字小【第 2 次,剩余 13 次机会】

>请输入你认为正确的数字:200

小了,你的数字比目标数字小【第 3 次,剩余 12 次机会】

>请输入你认为正确的数字:230

大了,你的数字比目标数字大【第 4 次,剩余 11 次机会】

>请输入你认为正确的数字:220

大了,你的数字比目标数字大【第 5 次,剩余 10 次机会】

>请输入你认为正确的数字:210

小了,你的数字比目标数字小【第 6 次,剩余 9 次机会】

>请输入你认为正确的数字:215

小了,你的数字比目标数字小【第 7 次,剩余 8 次机会】

>请输入你认为正确的数字:217

小了,你的数字比目标数字小【第 8 次,剩余 7 次机会】

>请输入你认为正确的数字:218

小了,你的数字比目标数字小【第 9 次,剩余 6 次机会】

>请输入你认为正确的数字:219

恭喜,你猜对了!目标数字为 219,共猜 10 次,用时 0 小时 1 分钟 2.979 秒

>再玩一局?(q-退出游戏,其他-继续游戏),请选择:q

游戏已退出,战绩如下:

您总共玩了 2 局,成功 1 局,失败 1 局

第 [2] 局成功,用时 1 分钟 2.979 秒

python猜数字游戏实例_python3实现猜数字小游戏:根据设置参数进行猜数字游戏...相关推荐

  1. python3小游戏源代码_Python3制作仿“FlappyBird”小游戏|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...

  2. 游戏玩家行为基本模式的初探小汇(转)

    游戏玩家行为基本模式的初探小汇(转)[@more@] 众所周知,游戏的设计应该以玩家为中心,游戏的成功与否决定于玩家对此款游戏的满意度.那么,玩家在游戏中究竟是处于一种什么样的位置?玩家有哪些基本的行 ...

  3. python猜数字游戏续_python3实现猜数字游戏

    本文实例为大家分享了python3实现猜数字游戏的具体代码,供大家参考,具体内容如下 需求目标: 需求:猜数字游戏 1: 开始游戏产生一个1~100随机数 2: 用户输入,游戏根据输入值提示大或者小 ...

  4. python猜数字游戏实例_Python案例:猜数字小游戏,由浅入深!

    本案例只适合新手,老司机请绕路. 游戏介绍:程序自己有一个数字,用户输入一个数字,两个数字进行比较. 可以学到的知识点:input函数.字符串.while循环.if条件判断语句.break语句. 一. ...

  5. 10次机会 js 猜数_JS猜数字游戏实例讲解

    本文实例为大家分享了JS实现猜数字游戏的具体代码,供大家参考,具体内容如下 猜数字游戏: 1)利用JS的Math内置对象,实现在1-50内选取一个整数随机数作为游戏答案 2)输入数字进行判断,共有10 ...

  6. 猜数字游戏 : 共给玩家10次机会,若第一次就猜对了,显示‘您真是个天才’,若10也没猜对,显示“您太笨了,下次努力吧!”, 若是第2-10次猜对了,只简单的显示:“恭喜您猜对了”。

    猜数字游戏 : 共给玩家10次机会,若第一次就猜对了,显示'您真是个天才',若10也没猜对,显示"您太笨了,下次努力吧!", 若是第2-10次猜对了,只简单的显示:"恭喜 ...

  7. python怎么输入一个数字并调用_Python3 实例(一)

    原标题:Python3 实例(一) Python Hello World 实例 以下实例为学习Python的第一个实例,即如何输出"Hello World!": 实例 # -*- ...

  8. 类的成员变量: 猜数字游戏:一个类A有一个成员变量v,有一个初值100。定义一个类,对A类的成员变量v进行猜。如果大了则提示大了,小了则提示小了。等于则提示猜测成功。

    package com.leiclass.cle; import java.util.Scanner; public class Test1 { /** * 类的成员变量:   猜数字游戏:一个类A有 ...

  9. 1、猜数字游戏:一个类A有两个成员变量v、num,v有一个初值100。定义一个方法guess,对A类的成员变量v,用num进行猜。如果大了则提示大了,小了则提示小了。等于则提示猜测成功。在main方法

    定义一个类,其中封装成员变量v-猜数的目标, num-猜测的数据 guess方法根据num和v比对结果生成对应的提示信息 import java.util.Scanner; public class ...

最新文章

  1. 【CyberSecurityLearning 附】域的复习+小综合实验(重要!)
  2. EJS学习(三)之语法规则中
  3. 大型情感剧集Selenium:2_options设置 #华为云·寻找黑马程序员#
  4. 10g CRS Clustware Installation安装图
  5. hash ruby 定义 嵌套_【译】rails的嵌套属性(Nested Attributes)使用
  6. 三相同步电机怎么接线图_三相异步电机的正反转原理图解
  7. c语言以顺序结构存储的二叉树的非递归遍历,一种二叉树非递归遍历算法的C语言实现...
  8. IBM 2005-H16光钎交换机密码重置
  9. ue5-预计算可视性体积(PVS)
  10. Edge检查更新时出错:无法连接到Internet。如果使用防火墙,请将 MicrosoftEdgeUpdate.exe 加入允许列表中。
  11. aspx 微型_如何使用微型可编程机器人向孩子介绍编码
  12. 达梦数据库SQL学习
  13. Objective-C 之父 Brad Cox 逝世,创建过乐队、推动苹果软件生态
  14. 2020下半年,最接地气的字节跳动Android面经分享(已收offer
  15. LED驱动电源有几种保护方式
  16. linux系统安装pe,Linux下制作Linux+WINPE启动盘装机必备:
  17. 傅老师课堂:Oracle高级查询之OVER (PARTITION BY ..) 1
  18. SD敢达服务器源码,《SD敢达OL》服务器账号数据合并规则
  19. 简历还能这样写——程序员
  20. Windows Server 2012补丁下载

热门文章

  1. [Python工具]-批量处理excel数据
  2. 利用计算机硬件实现加密,一种结合硬件对数据进行加密的计算机硬件加密方法与流程...
  3. 5G时代即将来临,你的手机要被淘汰了吗?
  4. C端企业信息查询网站对比分析:企查查vs天眼查vs启信宝
  5. 高风险路段路侧交通安全设施的设计与提升
  6. 【分布式】熔断、降级傻傻分不清楚-熔断和降级的真实关系
  7. 都说不要让Macbook始终保持100%充电状态,但你知道为什么吗?
  8. 【Hexo博客搭建】将其部署到GitHub Pages(二):如何初始化并部署?
  9. 轻量级 HTTP 服务器
  10. 读书笔记数据科学入门————数据科学导论