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 实现tar文件压缩解压的实例详解
Aug 20 Python
Python多进程写入同一文件的方法
Jan 14 Python
django2.0扩展用户字段示例
Feb 13 Python
Django ModelForm组件使用方法详解
Jul 23 Python
python django model联合主键的例子
Aug 06 Python
Python数据分析pandas模块用法实例详解
Nov 20 Python
Flask 上传自定义头像的实例详解
Jan 09 Python
tensorflow 实现从checkpoint中获取graph信息
Feb 10 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
Python使用grequests并发发送请求的示例
Nov 05 Python
python实现excel公式格式化的示例代码
Dec 23 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 单引号与双引号的区别
2009/11/24 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
php学习笔记之基础知识
2014/11/08 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
Date对象格式化函数代码
2010/07/17 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
计算机专业个人求职自荐信
2013/09/21 职场文书
公共事业管理本科生求职信
2013/10/07 职场文书
个人现实表现材料
2014/02/04 职场文书
迎元旦广播稿
2014/02/22 职场文书
交通事故责任认定书
2015/08/06 职场文书
2019邀请函格式及范文
2019/05/20 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android