Search code examples
pythonfunctionif-statementlogic

Python if and else statement not expected output


I am trying to make an animal quiz using python 3.9. On one of the questions getting it wrong 3 times doesn't start a new question like it should. Instead it is just blank. On the person's first and second attempt everything works smoothly. Any and all help is appreciated. Here is my code:

def check_guess(guess, answer):
    global score
    global name
    still_guessing = True
    attempt = 0
    while still_guessing and attempt < 3:
        if guess == answer:
            print('Correct wow, i expected worse from someone named %s' % name)
            if attempt == 0:
                score = score + 3
            elif attempt == 1:
                score = score + 2
            elif attempt == 2:
                score = score + 1
            still_guessing = False
        elif attempt <= 1:
            print('HAAAAAAAAAAAAAAAAAAAAAAAAAAAA IMAGINE NOT GETTING THAT RIGHT!!!')
            print('L bozo + ratio')
            guess = input('Try again ')
            attempt = attempt + 1
    if attempt == 3:
        print('the correct answer was %s' % answer)
        print('There is always next time!!')
        still_guessing = False
score = 0
print('Welcome to the animal quiz')
print()
print('In this game you will have to guess the animal')
name = input('What is your name? ')
print('Cool name, I feel like i heard of it before hmmm %s..' % name)
print()
print('Enough stalling onto the game!!!')
guess1 = input('Which bear lives in the north pole ')
check_guess(guess1.strip().lower(), 'polar bear')

Solution

  • You have to put the if attempt == 3 in your while loop, because the loop while run infinitely until the guess is right, so when attempt's value is 3, it will do nothing because it is still in a loop and there is no if statement telling it what to do once the value is 3.

    EDIT: Also change the loop conds to still guessing and attempt <= 3

    attempt = 0
    def check_guess(guess, answer):
        global score
        global name
        global attempt
        still_guessing = True
    
        while still_guessing and attempt <= 3:
            print(f"attempt {attempt}")
            if attempt == 2:
                print('the correct answer was %s' % answer)
                print('There is always next time!!')
                still_guessing = False
        
            else:
                print('HAAAAAAAAAAAAAAAAAAAAAAAAAAAA IMAGINE NOT GETTING THAT RIGHT!!!')
                print('L bozo + ratio')
                guess = input('Try again ')
                attempt = attempt + 1
    
            if guess == answer:
                print('Correct wow, i expected worse from someone named     %s' % name)
                if attempt == 0:
                    score = score + 3
                elif attempt == 1:
                    score = score + 2
                elif attempt == 2:
                    score = score + 1
                still_guessing = False