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 Django做网页
Nov 04 Python
Python素数检测的方法
May 11 Python
python实现在控制台输入密码不显示的方法
Jul 02 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
python命名空间(namespace)简单介绍
Aug 10 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
Sep 30 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
jupyternotebook 撤销删除的操作方式
Apr 17 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垃圾回收机制引用计数器概念分析
2013/06/24 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
php实现查看邮件是否已被阅读的方法
2013/12/03 PHP
php汉字转拼音的示例
2014/02/27 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
基于jquery的无刷新分页技术
2011/06/11 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
python实现双人五子棋(终端版)
2020/12/30 Python
计算机网络专业个人的自我评价
2013/10/17 职场文书
粗加工管理制度
2014/02/04 职场文书
商场中秋节活动方案
2014/02/07 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
银行进社区活动总结
2014/07/07 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
详解如何用Python实现感知器算法
2021/06/18 Python