Python version of the number of the game code

  • 2020-04-02 13:10:11
  • OfStack


# -*- coding: utf-8 -*-
import random
# Digital class 
class NumberItem:

    # Digital number 
    _GUESS_NUMBER_COUNT_ = 4
    def __init__(self):
        self._num_ = []

    # Length standard     
    def IsFormat(self):
        return self._num_.__len__() == self._GUESS_NUMBER_COUNT_

    # Generate random number     
    def RestRandomNumber(self):
        allNum = range(10)
        for index in range(self._GUESS_NUMBER_COUNT_):
            self._num_.append(allNum.pop(random.randrange(10-index)))

    # Check input         
    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

    # Return string       
    def GetNumber(self):
        return self._num_

    
# Quiz results  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

    
# Guess the history section     
class GuessHisItem:
    def __init__(self):
        self._guessNum_ = NumberItem()
        self._guessResult_ = NumberCheckResult()

    def ShowItem(self):
        print self._guessNum_.GetNumber() , ' - ' , self._guessResult_.GetCheckResult()
# games 
class GuessNumberGame():
    # Opportunity number 
    _MAX_GUESS_TIMES_ = 8
    def __init__(self):
        self.ResetGameDate()

    # Reset game data     
    def ResetGameDate(self):
        self._guessNum_ = NumberItem()
        self._guessHis_ = []

    def GetGuessTimes(self):
        return self._guessHis_.__len__()

    # Format conversion of the input string 
    def ChangeInputNumberFormat(self, numberStr):
        parseNum = NumberItem()
        if (numberStr.isdigit()):
            for eachNum in numberStr:
                parseNum._num_.append(int(eachNum))

        return parseNum

    
    # Print quiz history 
    def ShowGuessHis(self):
        print ''
        print ' You've guessed it  %d time ,  In total, %d Second chance ' % (self.GetGuessTimes(), self._MAX_GUESS_TIMES_)
        print ''

        for eachItem in self._guessHis_:
            eachItem.ShowItem()
        print ''

    def ShowHelp(self):
        print ''
        print ' The input  'help'  Display a list of commands .'
        print ' The input  'his'  Show quiz history '
        print ' The input  'cheat'  Show cheating results '
        print ' The input  'quit'  End of the game '
        print ''

    def ShowCheat(self):
        print ''
        print ' The number to guess is  ', self._guessNum_.GetNumber()
        print ''
        
    def StartOneGame(self):

        self.ResetGameDate()

        print ' Start the Numbers game !'

        self._guessNum_.RestRandomNumber()

        print ' A random number  [*' + ',*'*(self._guessNum_._GUESS_NUMBER_COUNT_-1) + '] Have been generated , Do you have %d Second chance !' % self._MAX_GUESS_TIMES_

        # Guess logo 
        guess_result = False
        quit_flag = False

        while (self.GetGuessTimes() < self._MAX_GUESS_TIMES_ 
               and guess_result != True and quit_flag != True):

            print ' You have left %d Second chance , Enter the number you guessed :' % (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:
                # Transform the input and validate it 
                hisItem = GuessHisItem()

                hisItem._guessNum_ = self.ChangeInputNumberFormat(input_str)
                if (hisItem._guessNum_.IsFormat() != True):
                    print ' Number format error ,  Enter again !'
                else:
                    # Quizzes history 
                    hisItem._guessResult_ = self._guessNum_.CheckNumber(hisItem._guessNum_)
                    self._guessHis_.append(hisItem)

                    hisItem.ShowItem()

                    # guess 
                    if (hisItem._guessResult_._guess_A_ == NumberItem._GUESS_NUMBER_COUNT_):
                        guess_result = True
                        print ' congratulations , You guessed the number ' , self._guessNum_.GetNumber() , '  With the %d Second chance ' % self.GetGuessTimes()
                    elif(self.GetGuessTimes() == self._MAX_GUESS_TIMES_ ):
                        print ''
                        print ' Challenge failure , You've guessed it %d time ,' % self.GetGuessTimes(), ' The correct number is ', 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 ' Play the game again ?(Y/N)'
                input_str = raw_input();

                if (input_str != 'Y'):
                    quit_flag = True
        print ' goodbye !'

        
###### MAIN #######
if __name__ == '__main__':
    game = GuessNumberGame()
    game.StartGame()        


Related articles: