标签:

最近实现了一个猜数字的游戏,用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)相关推荐

  1. python猜数字统计游戏次数_猜数字游戏(Python)

    在Python3中工作.在 我对Python还比较陌生(只有几个星期的知识).在 这个程序给我的提示是写一个随机数游戏,用户必须猜出随机数(1到100之间),如果不正确,就会提示它太低或太高.然后用户 ...

  2. python随机数产生100个整数(0-100),统计出现次数最多的数字.

    import random # 随机数产生100个整数(0-100),放入一个列表中,统计出现次数最多的数字. # 1.存放随机数列表 number = [] # 2.循环100次 for i in ...

  3. 约战精灵再临服务器维护,约战精灵再临进不了游戏怎么办_无法进入游戏解决方法...

    约战精灵再临进不了游戏怎么办?相信有小伙伴遇到了游戏开服后进不了游戏等各种情况,这些情况往往重启游戏也解决不了,比较棘手,本篇就为大家带来约战精灵再临进不了游戏解决方法介绍,一起来看看吧! 约战精灵再 ...

  4. python猜单词游戏实验原理_猜单词游戏课程设计报告

    告 一 . 程 序 功 能 一个猜单词游戏.两人进行游戏时,由一个玩家给出一个单词, 在人与计算机游戏时候, 由计算机给出一个单词, 另一个玩家根据组 成单词的字母个数猜出单词,猜的次数可以指定,若猜 ...

  5. 统计数组中每个数字出现的次数_剑指Offer(二十八) 数组中次数出现超过一半的数字...

    题目描述 思路与解析 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长 ...

  6. 如何用python完成基本统计信息计算_如何用python计算基本统计值?

    如何用python计算基本统计值? 用python计算基本统计值的代码为def getNum(): #从控制台获取多个不确定数据的方法 nums = []; iNumStr = input(" ...

  7. python十点半游戏代码_十点半游戏完整代码及详细注释.py

    # -*- coding: utf-8 -*- #此版本,于2018年12月9日 #游戏类 class Game: #一般游戏进程,从读取存档开始 def Process(self): #初始回合数为 ...

  8. python大型游戏脚本_论做游戏脚本,Python输过谁?

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢? ​ 我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按 ...

  9. 怎么将一个数字高低位互换_多彩数字 多彩童年——东城幼儿园玩具研究教学案例...

    玩具是儿童的天使,孩子在天使的陪伴下,创造性地进行着自己的游戏活动.在幼儿众多的玩具中怎样甄别一款好玩的玩具,挖掘出玩具的最大教育价值,让他们在和玩具的互动中快乐地学习呢?下面,我们来看看老师们是怎样 ...

  10. switch全部游戏列表_敢把游戏当教材,免费提供给学生!EA今年将推出7款NS作品!...

    日服eShop销量榜(6.11-6.17) 1. <世界游戏大全51>2. <集合啦!动物森友会>3. <我的世界 地下城>4. <人类:一败涂地>5. ...

最新文章

  1. Linux CPU信息
  2. 企业网站外链发布有技巧
  3. do msgbox loop_【连载1】DDC模块 DO点与强电电气柜的接口形式
  4. JZOJ__Day 3:【NOIP普及模拟】数数(count)
  5. DCMTK:OFUUID测试程序
  6. 面向切面编程--AOP
  7. 一个老干部对即将从政的儿子的赠言
  8. 服务器控件下拉框显示隐藏,演练:在 GridView Web 服务器控件中编辑时显示下拉列表...
  9. TypeError: 'list' object is not callable
  10. 关于图片或者文件在数据库的存储方式归纳
  11. 权威DNS、递归DNS以及DNS相关排名
  12. 计算机系统:计算机系统的基本组成
  13. 《大型网站技术架构-核心原理与案例分析》(李智慧 著)第2章-大型网站架构模式
  14. 前端培训课随感,传智、千锋、尚硅谷、渡一
  15. 全球及中国燃气轮机行业产量规模预测及发展态势研究报告2021-2027年版
  16. maptalks+three.js+vue webpack项目实现二维地图上贴三维模型
  17. 修改图片文件后缀,将JPG转换为PNG
  18. C语言—求数组的对角线和副对角线之和
  19. UE4 UDP是如何进行可靠传输的
  20. 如何快速干净彻底的卸载Oracle11g

热门文章

  1. python查询12306余票_「python」12306余票查询GUI
  2. 12306一直显示服务器忙,网购春运火车票首日 12306网站又现服务器忙
  3. 计算机革命的主角和英雄——十大超级老牌黑客
  4. 谷粒商城P46 gulimall-gateway刷新验证码出现503错误
  5. Event representations with tensor-based compositions笔记
  6. PHP 运行后出现The requested URL was not found on this server.
  7. 【技巧】SourceInsight如何设置为相对路径
  8. React-笔记整理
  9. hadoop集群安装配置Kerberos(二):搭建kerberos基础环境(主从kdc)
  10. [unity] unity学习——弹球游戏