-1

I am trying to make a code guessing game where the user can choose the range of the code. The user tries to guess the randomly generated code until he/she gets it right. The computer also shows which digits the user gets correct. The problem is that when the user does guess the code correctly, the process just stops even though my codes says to print a congratulations message and go to the play again function. Please can anyone help? Thanks. Code:

import random
import string


def get_range():
    Min = input("ENTER THE MINIMUM NUMBER THE CODE CAN BE: ")
    Max = input("ENTER THE MAXIMUM NUMBER THE CODE CAN BE: ")

    validate_range(Min, Max)


def validate_range(Min, Max):
    Check_Min = Min.isdigit()
    Check_Max = Max.isdigit()

    if Check_Min is not True or Check_Max is not True:
        print("INPUT MUST ONLY INCLUDE INTEGERS! ")
        get_range()
    elif Min == Max:
        print("MINIMUM AND MAXIMUM NUMBER MUST NOT BE EQUIVALENT! ")
        get_range()
    elif Min > Max:
        print("MINIMUM NUMBER MUST NOT BE GREATER THAN MAXIMUM NUMBER!")
        get_range()
    else:
        Random = random.randrange(int(Min), int(Max))
        get_guess(Random)


def get_guess(Random):
    Guess = str(input("ENTER YOUR GUESS: "))
    Check_Guess = Guess.isdigit()

    if not Check_Guess:
        print("INPUT MUST ONLY CONTAIN INTEGERS! ")
        get_guess(Random)
    else:
        validate_guess(Guess, Random)


def validate_guess(Guess, Random):
    Length = len(str(Random))
    Digits_Correct = 0

    if Guess == Random:
        print("WELL DONE! YOU GUESSED THE NUMBER! ")
        play_again()
    else:
        Digits = ["?"] * Length

        for i in range(0, int(Length)):
            if str(Guess)[i] == str(Random)[i]:
                Digits[i] = Guess[i]
                Digits_Correct += 1
            else:
                continue

        if int(Length) > Digits_Correct > 0:
            print("NOT QUITE! YOU GOT", Digits_Correct, " DIGITS CORRECT!")
            print(Digits)
            get_guess(Random)
        elif Digits_Correct == 0:
            print("NONE OF YOUR DIGITS MATCH! ")
            get_guess(Random)


def play_again():
    Choice = input("\n DO YOU WISH TO PLAY AGAIN? (Y/N)")

    if Choice != "Y" or Choice != "N" or Choice != "y" or Choice != "n":
        print("PLEASE ENTER A VALID INPUT! ")
        play_again()
    else:
        get_range()


print("WELCOME TO CODE CRUNCHERS!\n ")
get_range()

2 Answers2

0

I think the problem here is that your Guess is a string and your Random is an integer. To fix this, you can try to convert the Guess to an integer or the Random to a string. Try this:

def validate_guess(Guess, Random):
    Length = len(str(Random))
    Digits_Correct = 0

    if int(Guess) == Random:
        print("WELL DONE! YOU GUESSED THE NUMBER! ")
        play_again()
jvieira88
  • 98
  • 6
0

I think your problem is with types str and int. First of all your Min and Max are strings, so your line: elif Min > Max: print("MINIMUM NUMBER MUST NOT BE GREATER THAN MAXIMUM NUMBER!") does not work correctly. The other problem is that your variables Guess and Random are of different types, so Guess == Random will return False all the time.

Here's correct version of your code.

I've also added a few if cases to be able to quit the program without closing it.

import random
import string


def get_range():
    Min = input("ENTER THE MINIMUM NUMBER THE CODE CAN BE: ")
    Max = input("ENTER THE MAXIMUM NUMBER THE CODE CAN BE: ")
    if Min == 'q':
        return

    validate_range(Min, Max)


def validate_range(Min, Max):
    Check_Min = Min.isdigit()
    Check_Max = Max.isdigit()

    if Check_Min is not True or Check_Max is not True:
        print("INPUT MUST ONLY INCLUDE INTEGERS! ")
        get_range()

    Min = int(Min)
    Max = int(Max)

    if Min == Max:
        print("MINIMUM AND MAXIMUM NUMBER MUST NOT BE EQUIVALENT! ")
        get_range()
    elif Min > Max:
        print("MINIMUM NUMBER MUST NOT BE GREATER THAN MAXIMUM NUMBER!")
        get_range()
    else:
        Random = random.randrange(int(Min), int(Max))
        get_guess(Random)


def get_guess(Random):
    Guess = str(input("ENTER YOUR GUESS: "))
    Check_Guess = Guess.isdigit()

    if not Check_Guess:
        print("INPUT MUST ONLY CONTAIN INTEGERS! ")
        get_guess(Random)
    else:
        validate_guess(Guess, Random)


def validate_guess(Guess, Random):
    Length = len(str(Random))
    Digits_Correct = 0

    if int(Guess) == Random:
        print("WELL DONE! YOU GUESSED THE NUMBER! ")
        play_again()
    else:
        Digits = ["?"] * Length

        for i in range(0, int(Length)):
            if str(Guess)[i] == str(Random)[i]:
                Digits[i] = Guess[i]
                Digits_Correct += 1
            else:
                continue

        if int(Length) > Digits_Correct > 0:
            print("NOT QUITE! YOU GOT", Digits_Correct, " DIGITS CORRECT!")
            print(Digits)
            get_guess(Random)
        elif Digits_Correct == 0:
            print("NONE OF YOUR DIGITS MATCH! ")
            get_guess(Random)


def play_again():
    print("\n DO YOU WISH TO PLAY AGAIN? (Y/N)")
    Choice = input()

    if Choice != "Y" or Choice != "N" or Choice != "y" or Choice != "n":
        print("PLEASE ENTER A VALID INPUT! ")
        play_again()
    else:
        get_range()


print("WELCOME TO CODE CRUNCHERS!\n ")
get_range()