Python版的文曲星猜数字,python文曲星猜数字,# -*- coding
文章由Byrx.net分享于2019-03-23 08:03:32
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
相关内容
- python wininet封装模块,pythonwininet封装,windows对Inte
- 使用urllib模拟登陆豆瓣电台,抓取红心歌曲表单,增加
- appendInt, appendShort, appendStr,,演示appendInt,
- Python实现的一个简单的状态框架,python实现框架,from
- python通过MySQLdb模块连接查询mysql数据,mysqldbmysql,#!/us
- python超简代码解决约瑟夫环问题,python约瑟夫,a = [ x
- python 日志分析,python,分析日志,取出访问最多的
- 装饰器三个例子,装饰三个例子,import loggi
- 数据结构——链表,数据结构,#utf-8import
- 专用链接解码,链接解码,利用PyQt做界面,将迅
评论关闭