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获取图片颜色信息的方法
Mar 18 Python
介绍Python中的__future__模块
Apr 27 Python
python实现类的静态变量用法实例
May 08 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
python调用百度语音REST API
Aug 30 Python
python多进程控制学习小结
Oct 31 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
解决pyecharts在jupyter notebook中使用报错问题
Apr 23 Python
pytorch多GPU并行运算的实现
Sep 27 Python
Python+PyQt5实现灭霸响指功能
May 25 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/07/22 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
2014/04/10 PHP
PHP错误处理函数
2016/04/03 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python 修改列表中的元素方法
2018/06/26 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
用pycharm开发django项目示例代码
2019/06/13 Python
pytorch forward两个参数实例
2020/01/17 Python
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
公关关系专员的自我评价分享
2013/11/20 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
员工培训协议书
2014/09/15 职场文书
离职报告格式
2014/11/04 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书
Python实现视频自动打码的示例代码
2022/04/08 Python