import random def AskQuestion(prompt): gotAns = False retVal = "" while(not gotAns): ans = input("{0}? ".format(prompt)) if(ans == ""): print("PLEASE ANSWER THE QUESTION.") else: gotAns = True retVal = ans.upper() return retVal def IsAnInt(input): retVal = True try: i = int(input) except: retVal = False return retVal def GetIntInput(prompt): gotAns = False retVal = 0 while(not gotAns): ans = input("{0}: ".format(prompt)) if(IsAnInt(ans) == True): gotAns = True retVal = int(ans) else: print("YOU DID NOT ENTER AN INTEGER.") return retVal def AskToPlayAgain(): gotAns = False retVal = False while(not gotAns): ans = AskQuestion("DO YOU WANT TO PLAY AGAIN") if(ans == "YES" or ans == "Y"): retVal = True gotAns = True elif(ans == "NO" or ans == "N"): retVal = False gotAns = True else: print("PLEASE ANSWER \"YES\" OR \"NO\".") return retVal def AskToSeeTheRules(): gotAns = False retVal = False while(not gotAns): ans = AskQuestion("DO YOU WANT TO SEE THE RULES") if(ans == "YES" or ans == "Y"): retVal = True gotAns = True elif(ans == "NO" or ans == "N"): retVal = False gotAns = True else: print("PLEASE ANSWER \"YES\" OR \"NO\".") return retVal def GenerateRandomNumber(minimum, maximum, show): random.seed() retVal = random.randint(minimum, maximum) if(show): print("{0}".format(retVal)) return retVal def DisplayRules(): print ("I WILL THINK OF A THREE-DIGIT NUMBER. YOU WILL TRY TO") print ("GUESS MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:") print (" PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION") print (" FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION") print (" BAGELS - NO DIGITS ARE CORRECT") print ("") print ("YOU GET TWENTY TRIES BEFORE YOU LOSE.") print ("") def AskForGuess(attempt): guess = GetIntInput("GUESS #{0}".format(attempt)) if(guess < 0): print("PLEASE GUESS A NON-NEGATIVE NUMBER.") elif(guess < 100 or guess > 999): print("PLEASE GUESS A NUMBER BETWEEN 100 AND 999.") else: return guess def MakeIntFromArray(arrayIn): retVal = (arrayIn[0] * 100) + (arrayIn[1] * 10) + arrayIn[2] return retVal def MakeArrayFromInt(valIn): retArray = [0,0,0] retArray[0] = int(valIn / 100) retArray[1] = int((valIn - (retArray[0] * 100)) / 10) retArray[2] = valIn - (retArray[0] * 100) - (retArray[1] * 10) return retArray def DisplayGameOver(digits): number = MakeIntFromArray(digits) print ("OH WELL, THAT'S TWENTY GUESSES.") print ("MY NUMBER WAS {0}.".format(number)) def CreateTheNumber(): digits = [0,0,0] digits[0] = GenerateRandomNumber(1,9,False) gotDigit = False while(gotDigit == False): digits[1] = GenerateRandomNumber(0,9,False) if(digits[1] != digits[0]): gotDigit = True gotDigit = False while(gotDigit == False): digits[2] = GenerateRandomNumber(0,9,False) if(digits[2] != digits[0] and digits[2] != digits[1]): gotDigit = True return digits def CheckGuess(guess, digits): temp = MakeArrayFromInt(guess) vals = [0,0,0] if(temp[0] == digits[0]): vals[0] = 1 if(temp[1] == digits[1]): vals[1] = 1 if(temp[2] == digits[2]): vals[2] = 1 if(MakeIntFromArray(vals) == 111): return True if(vals[0] == 0): if(temp[0] == digits[1] or temp[0] == digits[2]): vals[0] = 2 if(vals[1] == 0): if(temp[1] == digits[0] or temp[1] == digits[2]): vals[1] = 2 if(vals[2] == 0): if(temp[2] == digits[0] or temp[2] == digits[1]): vals[2] = 2 if(MakeIntFromArray(vals) == 0): print("BAGELS") else: display = "" if(vals[0] == 1): display = display + "FERMI " if(vals[0] == 2): display = display + "PICO " if(vals[1] == 1): display = display + "FERMI " if(vals[1] == 2): display = display + "PICO " if(vals[2] == 1): display = display + "FERMI" if(vals[2] == 2): display = display + "PICO" print(display) return False def Run(): Digits = [0,0,0] Score = 0 Guess = 0 print("*** BAGELS : PYTHON ***") random.seed() Running = True if(AskToSeeTheRules() == True): DisplayRules() while(Running): Attempt = 1 Digits = CreateTheNumber() print ("OK, I HAVE A NUMBER IN MIND.") GameOver = False while(not GameOver): Guess = AskForGuess(Attempt) if(CheckGuess(Guess, Digits) == True): print ("YOU GOT IT!!!") Score = Score + 1 GameOver = True else: Attempt = Attempt + 1 if(Attempt > 20): DisplayGameOver() GameOver = True print("*** GAME OVER ***") Running = AskToPlayAgain() print ("A {0} POINT BAGELS BUFF!".format(Score)) print( "HOPE YOU HAD FUN. BYE!") Run()