Python版的文曲星猜数字,python文曲星猜数字,# -*- coding


# -*- 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()#该片段来自于http://byrx.net

评论关闭