Python版的文曲星猜数字游戏代码


Posted in Python onSeptember 02, 2013
# -*- coding: utf-8 -*-
import random
#数字类
class NumberItem:
    #数字个数
    _GUESS_NUMBER_COUNT_ = 4
    def __init__(self):
        self._num_ = []
    #长度是否标准    
    def IsFormat(self):
        return self._num_.__len__() == self._GUESS_NUMBER_COUNT_
    #生成随机数    
    def RestRandomNumber(self):
        allNum = range(10)
        for index in range(self._GUESS_NUMBER_COUNT_):
            self._num_.append(allNum.pop(random.randrange(10-index)))
    #校验输入数        
    def CheckNumber(self, input_number):
        result = NumberCheckResult()
        for index in range(self._GUESS_NUMBER_COUNT_):
            if (input_number._num_[index] == self._num_[index]):
                result.Add_A()
            elif(input_number._num_[index] in self._num_):
                result.Add_B()
        return result
    #返回字符串      
    def GetNumber(self):
        return self._num_
    
#竞猜结果 xAxB    
class NumberCheckResult:
    def __init__(self):
        self._guess_A_ = 0
        self._guess_B_ = 0
    def GetCheckResult(self):
        return '%d A %d B' % (self._guess_A_, self._guess_B_)
    def Add_A(self):
        self._guess_A_ += 1
    def Add_B(self):
        self._guess_B_ += 1
    
#竞猜历史项    
class GuessHisItem:
    def __init__(self):
        self._guessNum_ = NumberItem()
        self._guessResult_ = NumberCheckResult()
    def ShowItem(self):
        print self._guessNum_.GetNumber() , ' - ' , self._guessResult_.GetCheckResult()
#游戏类
class GuessNumberGame():
    #机会次数
    _MAX_GUESS_TIMES_ = 8
    def __init__(self):
        self.ResetGameDate()
    #重置游戏数据    
    def ResetGameDate(self):
        self._guessNum_ = NumberItem()
        self._guessHis_ = []
    def GetGuessTimes(self):
        return self._guessHis_.__len__()
    #输入字符串的格式转换
    def ChangeInputNumberFormat(self, numberStr):
        parseNum = NumberItem()
        if (numberStr.isdigit()):
            for eachNum in numberStr:
                parseNum._num_.append(int(eachNum))
        return parseNum
    
    #打印竞猜历史
    def ShowGuessHis(self):
        print ''
        print '你已经猜了 %d次, 总共%d次机会' % (self.GetGuessTimes(), self._MAX_GUESS_TIMES_)
        print ''
        for eachItem in self._guessHis_:
            eachItem.ShowItem()
        print ''
    def ShowHelp(self):
        print ''
        print '输入 \'help\' 显示命令列表.'
        print '输入 \'his\' 显示竞猜历史'
        print '输入 \'cheat\' 显示作弊结果'
        print '输入 \'quit\' 结束游戏'
        print ''
    def ShowCheat(self):
        print ''
        print '要猜的数字是 ', self._guessNum_.GetNumber()
        print ''
        
    def StartOneGame(self):
        self.ResetGameDate()
        print '开始猜数字游戏!'
        self._guessNum_.RestRandomNumber()
        print '随机号码 [*' + ',*'*(self._guessNum_._GUESS_NUMBER_COUNT_-1) + ']已经生成,你有%d次机会!' % self._MAX_GUESS_TIMES_
        #猜中标志
        guess_result = False
        quit_flag = False
        while (self.GetGuessTimes() < self._MAX_GUESS_TIMES_ 
               and guess_result != True and quit_flag != True):
            print '你还剩%d次机会,输入你猜的数字:' % (self._MAX_GUESS_TIMES_- self.GetGuessTimes())
            input_str = raw_input();
            if (input_str == 'help'):
                self.ShowHelp()
            elif(input_str == 'his'):
                self.ShowGuessHis()
            elif(input_str == 'cheat'):
                self.ShowCheat()
            elif(input_str == 'quit'):
                quit_flag = True
            else:
                #转换输入并校验
                hisItem = GuessHisItem()
                hisItem._guessNum_ = self.ChangeInputNumberFormat(input_str)
                if (hisItem._guessNum_.IsFormat() != True):
                    print '数字格式错误, 重新输入!'
                else:
                    #竞猜历史
                    hisItem._guessResult_ = self._guessNum_.CheckNumber(hisItem._guessNum_)
                    self._guessHis_.append(hisItem)
                    hisItem.ShowItem()
                    #猜中
                    if (hisItem._guessResult_._guess_A_ == NumberItem._GUESS_NUMBER_COUNT_):
                        guess_result = True
                        print '恭喜,你猜中了数字' , self._guessNum_.GetNumber() , ' 用了%d次机会' % self.GetGuessTimes()
                    elif(self.GetGuessTimes() == self._MAX_GUESS_TIMES_ ):
                        print ''
                        print '挑战失败,你已经猜了%d次,' % self.GetGuessTimes(), '正确的数字是', self._guessNum_.GetNumber()
        return quit_flag
                        
    def StartGame(self):
        quit_flag = False
        while(quit_flag != True):
            quit_flag = self.StartOneGame()
            if (quit_flag != True):
                print ''
                print '再玩一局?(Y/N)'
                input_str = raw_input();
                if (input_str != 'Y'):
                    quit_flag = True
        print '再见!'
        
###### MAIN #######
if __name__ == '__main__':
    game = GuessNumberGame()
    game.StartGame()       
Python 相关文章推荐
小结Python用fork来创建子进程注意事项
Jul 03 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
Python 爬虫的工具列表大全
Jan 31 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
python实现猜拳小游戏
Apr 05 Python
Python发送邮件的实例代码讲解
Oct 16 Python
Anaconda 查看、创建、管理和使用python环境的方法
Dec 03 Python
基于Keras的格式化输出Loss实现方式
Jun 17 Python
Python基于Twilio及腾讯云实现国际国内短信接口
Jun 18 Python
Python 使用dict实现switch的操作
Apr 07 Python
Python机器学习之KNN近邻算法
May 14 Python
pytyon 带有重复的全排列
Aug 13 #Python
python不带重复的全排列代码
Aug 13 #Python
python在多玩图片上下载妹子图的实现代码
Aug 13 #Python
python实现的一只从百度开始不断搜索的小爬虫
Aug 13 #Python
python用于url解码和中文解析的小脚本(python url decoder)
Aug 11 #Python
python 合并文件的具体实例
Aug 08 #Python
python备份文件以及mysql数据库的脚本代码
Jun 10 #Python
You might like
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
JS焦点图切换,上下翻转
2011/05/12 Javascript
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python实现Windows电脑定时关机
2018/06/20 Python
详解python3中的真值测试
2018/08/13 Python
对Django中内置的User模型实例详解
2019/08/16 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
Python实现画图软件功能方法详解
2020/07/28 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
蛋糕店创业计划书
2014/05/06 职场文书
信访工作经验交流材料
2014/05/23 职场文书
七一建党节演讲稿
2014/09/11 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers