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代码来实现服务器和代理服务器
Jun 23 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
Sep 05 Python
python获取程序执行文件路径的方法(推荐)
Apr 26 Python
对Python信号处理模块signal详解
Jan 09 Python
python xpath获取页面注释的方法
Jan 14 Python
在Python中使用Neo4j的方法
Mar 14 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 Python
Python高级特性之闭包与装饰器实例详解
Nov 19 Python
Python 面向对象部分知识点小结
Mar 09 Python
PyCharm永久激活方式(推荐)
Sep 22 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
用Python可视化新冠疫情数据
Jan 18 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安全配置 如何配置使其更安全
2011/12/16 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
ExtJS下grid的一些属性说明
2009/12/13 Javascript
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
Python字符串格式化输出方法分析
2016/04/13 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
临床医学大学生求职信
2013/09/28 职场文书
新闻报道策划方案
2014/06/11 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
第二次离婚起诉书
2015/05/18 职场文书
患者身份识别制度
2015/08/06 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android