python猜数字统计游戏次数_猜数字游戏的实现(Python3.5)
标签:
最近实现了一个猜数字的游戏,用python写的,本人python技术很渣,在不断百度的情况下,总算完成了这个猜数字的游戏,写上一点心得,也许以后有用。
猜数字游戏规则特别简单,就是用户猜一个4位数字,如果位置正确则记为A,数字正确则记为B(例如:被猜数字1234,用户输入了1456;则返回1A1B)
首先,我定义了一个猜数字的大类,写入了初始化方法后,加了一个生成4位不重复数字的方法,具体逻辑是这样:首先生成一个10位不重复的序列,然后利用List的pop方法,返回结果,然后把每个结果用字符串累加的方法加起来,用while循环控制次数,最后得到4位不重复的数字字符串,其它额外要求根据实际情况增加。这里用到了random模块,所以要import random
第一步:
import random
class guessNumber():
‘‘‘
猜数字游戏:
1、用户输入一组数字后,返回以*A*B的方式返回结果
2、1A代表有一个正确的数字位置正确,1B代表有一个数字正确,但是位置不正确
‘‘‘
def __init__(self):
self.guess_number = ‘‘ #被猜测的数字
#生成随机不重复的4位数,包括首位位0的数字,如(0567)
def genRandomNum(self):
if self.guess_number == ‘‘: #对象中guess_number参数有没有纸,如果有就直接返回传入的值
result = ‘‘ #生成的数字
l1 = [str(i) for i in range(10)] #l1是一个类似[0,1,2,3,4,5,6,7,8,9]序列
while(result.__len__() < 4): #用while循环控制生成数字的位数
tmp = l1.pop(random.randrange(l1.__len__())) #用list的pop方法返回对应的数字,这样可以避免重复
if tmp == ‘0‘: #判断首位是否为0,如果是0,那么需要加上之前去除的元素
l1.append(‘0‘) #把之前删除的“0”重新加上
tmp = l1.pop(random.randrange(l1.__len__())) #再来一次
result += tmp #字符串累加,响应while的循环条件,到4位时停止循环
else:
result += tmp
else:
result = str(self.guess_number) #如果已经设置了guess_number,那么直接返回设置的结果
return result #返回生成的4位不重复的数字(仅限于自动生成,其它途径传入的不算)
if __name__ == ‘__main__‘:
guess = guessNumber()
target = guess.genRandomNum()
print(target)
第二步:实现生成随机不重复的4位数字后,接下来就考虑用户输入的数字了。
用户输入的数字有这么几种情况:
1、长度不符合要求
2、输入其它非数字字符
3、不输入
这些异常都要过滤
在类guessNumber中添加这个方法:
import random
class guessNumber():
‘‘‘
猜数字游戏:
1、用户输入一组数字后,返回以*A*B的方式返回结果
2、1A代表有一个正确的数字位置正确,1B代表有一个数字正确,但是位置不正确
‘‘‘
def __init__(self):
self.guess_number = ‘‘ #被猜测的数字
#因为没有参数,所以在要加静态方法的声明
@staticmethod
def user():
result = ‘‘
while True:
primary_number = input("请输入您猜测的数字:")
#其它准出条件,如果用户输入了q,Q,quit字符,则退出游戏
if primary_number == ‘q‘ or primary_number == ‘Q‘ or primary_number == ‘quit‘:
return 1
#判断用户输入的是不是数字以及长度是不是刚好4位
elif primary_number.isdigit() and len(primary_number) == 4:
tmp = list(str(primary_number)) #把用户输入的数字转换成list方便操作
a1 = tmp.pop(0) #去掉其中两个字符,并穿给对应的变量(为什么这么做?一种实现方法,勿喷。囧)
a2 = tmp.pop(0)
#如果输入的数字大于1000,小于10000
if int(primary_number) > 1000 and int(primary_number) < 10000:
#如果a1和a2有一个在tmp里面,或者tmp里面的两个值相等,那么意味着有重复数字
if a1 in tmp or a2 in tmp or tmp[0] == tmp[1]:
print("您输入的数字不符合要求")
else:
break;
#同上
elif(int(primary_number)<1000 and int(primary_number) >= 100):
if a1 in tmp or a2 in tmp or tmp[0] == tmp[1]:
print("您输入的数字不符合要求")
else:
break;
else:
print("您输入的数字不符合要求")
else:
print("不要输入非数字字符")
result = primary_number #把值给result
return result
if __name__ == ‘__main__‘:
guess = guessNumber()
target = guess.user()
print(target)
第三步:第二步的代码写得很啰嗦,但是不影响使用……,用户输入数字后,需要判断用户输入的数字于被猜测的数字之间差了多远,所以要写一个逻辑判断语句
import random
class guessNumber():
‘‘‘
猜数字游戏:
1、用户输入一组数字后,返回以*A*B的方式返回结果
2、1A代表有一个正确的数字位置正确,1B代表有一个数字正确,但是位置不正确
‘‘‘
def __init__(self):
self.guess_number = ‘‘ #被猜测的数字
self.number = ‘‘ #猜测的数字
self.history = {} #存储猜测的结果
#我把方法命名成提示
def tip(self):
input_list = list(str(self.number)) #将类中的猜测的数转换成一个list
target_list = list(str(self.guess_number)) #将类中的被猜测的数转换成一个list
a = 0 #A的个数
b = "" #B的字符串
for i in range(input_list.__len__()): #遍历猜测的数字,如果其中有一个数字在被猜测的数中,那么b中增加一个B,如果对应位置的数正好相等,那么a自增1
if input_list[i] == target_list[i]:
a += 1
if input_list[i] in target_list and input_list[i] != target_list[i]:
b += ‘B‘
result = ("%sA%sB" % (a, len(b)))
#将猜测的结果写入结果集,不重复记录
tmp = []
for key in self.history:
tmp.append(key)
if self.number in tmp:
pass
else:
self.history[self.number] = result
return result
if __name__ == ‘__main__‘:
a = guessNumber()
a.guess_number = ‘1234‘
a.number = ‘1456‘
print(a.tip()) #应该打印出:1A1B
第四步:整合
import random
class guessNumber():
‘‘‘
猜数字游戏:
1、用户输入一组数字后,返回以*A*B的方式返回结果
2、1A代表有一个正确的数字位置正确,1B代表有一个数字正确,但是位置不正确
‘‘‘
def __init__(self):
self.guess_number = ‘‘ #被猜测的数字
self.number = ‘‘ #猜测的数字
self.history = {} #存储猜测的结果
#生成随机不重复的4位数,包括首位位0的数字,如(0567)
def genRandomNum(self):
if self.guess_number == ‘‘: #对象中guess_number参数有没有纸,如果有就直接返回传入的值
result = ‘‘ #生成的数字
l1 = [str(i) for i in range(10)] #l1是一个类似[0,1,2,3,4,5,6,7,8,9]序列
while(result.__len__() < 4): #用while循环控制生成数字的位数
tmp = l1.pop(random.randrange(l1.__len__())) #用list的pop方法返回对应的数字,这样可以避免重复
if tmp == ‘0‘: #判断首位是否为0,如果是0,那么需要加上之前去除的元素
l1.append(‘0‘) #把之前删除的“0”重新加上
tmp = l1.pop(random.randrange(l1.__len__())) #再来一次
result += tmp #字符串累加,响应while的循环条件,到4位时停止循环
else:
result += tmp
else:
result = str(self.guess_number) #如果已经设置了guess_number,那么直接返回设置的结果
return result #返回生成的4位不重复的数字(仅限于自动生成,其它途径传入的不算)
@staticmethod
def user():
result = ‘‘
while True:
primary_number = input("请输入您猜测的数字:")
#其它准出条件,如果用户输入了q,Q,quit字符,则退出游戏
if primary_number == ‘q‘ or primary_number == ‘Q‘ or primary_number == ‘quit‘:
return 1
#判断用户输入的是不是数字以及长度是不是刚好4位
elif primary_number.isdigit() and len(primary_number) == 4:
tmp = list(str(primary_number)) #把用户输入的数字转换成list方便操作
a1 = tmp.pop(0) #去掉其中两个字符,并穿给对应的变量(为什么这么做?一种实现方法,勿喷。囧)
a2 = tmp.pop(0)
#如果输入的数字大于1000,小于10000
if int(primary_number) > 1000 and int(primary_number) < 10000:
#如果a1和a2有一个在tmp里面,或者tmp里面的两个值相等,那么意味着有重复数字
if a1 in tmp or a2 in tmp or tmp[0] == tmp[1]:
print("您输入的数字不符合要求")
else:
break;
#同上
elif(int(primary_number)<1000 and int(primary_number) >= 100):
if a1 in tmp or a2 in tmp or tmp[0] == tmp[1]:
print("您输入的数字不符合要求")
else:
break;
else:
print("您输入的数字不符合要求")
else:
print("不要输入非数字字符")
result = primary_number #把值给result
return result
def tip(self):
input_list = list(str(self.number)) #将类中的猜测的数转换成一个list
target_list = list(str(self.guess_number)) #将类中的被猜测的数转换成一个list
a = 0 #A的个数
b = "" #B的字符串
for i in range(input_list.__len__()): #遍历猜测的数字
if input_list[i] == target_list[i]:
a += 1
if input_list[i] in target_list and input_list[i] != target_list[i]:
b += ‘B‘
result = ("%sA%sB" % (a, len(b)))
#将猜测的结果写入结果集,不重复记录
tmp = []
for key in self.history:
tmp.append(key)
if self.number in tmp:
pass
else:
self.history[self.number] = result
return result
#在start函数中调用
def start(self):
self.guess_number = guessNumber.genRandomNum(self) #先生成被猜测的数字,写入类中
while True: #呼应user方法的返回值:1
self.number = guessNumber.user() #然后用户开始猜测
if self.number != 1:
result = guessNumber.tip(self)
if result == ‘4A0B‘: #准出条件,还有隐藏的q/Q/quit!
print("恭喜你,你赢了!")
break
else:
print("你猜测的数字是: " + self.number + " 结果是: " + result)
else:
print("游戏结束,欢迎下次游戏!")
break
if __name__ == ‘__main__‘:
game = guessNumber()
game.start()
总结:
1、还可以继续优化
2、可以尝试实现电脑和人脑对局。第一种是猜同一组数字,电脑必须分析并返回最大结果给玩家,但是另外却存储最有可能的数据集合,直到运行出唯一正确答案后直接战胜玩家。另外一种是玩家和电脑对猜对方的数字,先猜正确的先赢。
标签:
原文地址:http://www.cnblogs.com/stanmao/p/5599338.html
python猜数字统计游戏次数_猜数字游戏的实现(Python3.5)相关推荐
- python猜数字统计游戏次数_猜数字游戏(Python)
在Python3中工作.在 我对Python还比较陌生(只有几个星期的知识).在 这个程序给我的提示是写一个随机数游戏,用户必须猜出随机数(1到100之间),如果不正确,就会提示它太低或太高.然后用户 ...
- python随机数产生100个整数(0-100),统计出现次数最多的数字.
import random # 随机数产生100个整数(0-100),放入一个列表中,统计出现次数最多的数字. # 1.存放随机数列表 number = [] # 2.循环100次 for i in ...
- 约战精灵再临服务器维护,约战精灵再临进不了游戏怎么办_无法进入游戏解决方法...
约战精灵再临进不了游戏怎么办?相信有小伙伴遇到了游戏开服后进不了游戏等各种情况,这些情况往往重启游戏也解决不了,比较棘手,本篇就为大家带来约战精灵再临进不了游戏解决方法介绍,一起来看看吧! 约战精灵再 ...
- python猜单词游戏实验原理_猜单词游戏课程设计报告
告 一 . 程 序 功 能 一个猜单词游戏.两人进行游戏时,由一个玩家给出一个单词, 在人与计算机游戏时候, 由计算机给出一个单词, 另一个玩家根据组 成单词的字母个数猜出单词,猜的次数可以指定,若猜 ...
- 统计数组中每个数字出现的次数_剑指Offer(二十八) 数组中次数出现超过一半的数字...
题目描述 思路与解析 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长 ...
- 如何用python完成基本统计信息计算_如何用python计算基本统计值?
如何用python计算基本统计值? 用python计算基本统计值的代码为def getNum(): #从控制台获取多个不确定数据的方法 nums = []; iNumStr = input(" ...
- python十点半游戏代码_十点半游戏完整代码及详细注释.py
# -*- coding: utf-8 -*- #此版本,于2018年12月9日 #游戏类 class Game: #一般游戏进程,从读取存档开始 def Process(self): #初始回合数为 ...
- python大型游戏脚本_论做游戏脚本,Python输过谁?
玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢? 我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按 ...
- 怎么将一个数字高低位互换_多彩数字 多彩童年——东城幼儿园玩具研究教学案例...
玩具是儿童的天使,孩子在天使的陪伴下,创造性地进行着自己的游戏活动.在幼儿众多的玩具中怎样甄别一款好玩的玩具,挖掘出玩具的最大教育价值,让他们在和玩具的互动中快乐地学习呢?下面,我们来看看老师们是怎样 ...
- switch全部游戏列表_敢把游戏当教材,免费提供给学生!EA今年将推出7款NS作品!...
日服eShop销量榜(6.11-6.17) 1. <世界游戏大全51>2. <集合啦!动物森友会>3. <我的世界 地下城>4. <人类:一败涂地>5. ...
最新文章
- Linux CPU信息
- 企业网站外链发布有技巧
- do msgbox loop_【连载1】DDC模块 DO点与强电电气柜的接口形式
- JZOJ__Day 3:【NOIP普及模拟】数数(count)
- DCMTK:OFUUID测试程序
- 面向切面编程--AOP
- 一个老干部对即将从政的儿子的赠言
- 服务器控件下拉框显示隐藏,演练:在 GridView Web 服务器控件中编辑时显示下拉列表...
- TypeError: 'list' object is not callable
- 关于图片或者文件在数据库的存储方式归纳
- 权威DNS、递归DNS以及DNS相关排名
- 计算机系统:计算机系统的基本组成
- 《大型网站技术架构-核心原理与案例分析》(李智慧 著)第2章-大型网站架构模式
- 前端培训课随感,传智、千锋、尚硅谷、渡一
- 全球及中国燃气轮机行业产量规模预测及发展态势研究报告2021-2027年版
- maptalks+three.js+vue webpack项目实现二维地图上贴三维模型
- 修改图片文件后缀,将JPG转换为PNG
- C语言—求数组的对角线和副对角线之和
- UE4 UDP是如何进行可靠传输的
- 如何快速干净彻底的卸载Oracle11g
热门文章
- python查询12306余票_「python」12306余票查询GUI
- 12306一直显示服务器忙,网购春运火车票首日 12306网站又现服务器忙
- 计算机革命的主角和英雄——十大超级老牌黑客
- 谷粒商城P46 gulimall-gateway刷新验证码出现503错误
- Event representations with tensor-based compositions笔记
- PHP 运行后出现The requested URL was not found on this server.
- 【技巧】SourceInsight如何设置为相对路径
- React-笔记整理
- hadoop集群安装配置Kerberos(二):搭建kerberos基础环境(主从kdc)
- [unity] unity学习——弹球游戏