python猜数字游戏猜n次_Python版的文曲星猜数字游戏代码

这是一个使用Python编写的猜数字游戏。游戏规则是玩家有固定次数机会猜测一个由四个随机数字组成的序列,每次猜测后,系统会告诉玩家正确数字的位置(A)和正确数字但位置不正确的数量(B)。游戏包含数字生成、输入验证、历史记录等功能,并提供帮助、查看历史和作弊(显示正确答案)等辅助操作。
摘要由CSDN通过智能技术生成

# -*- 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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值