user3290553
user3290553

Reputation: 87

PYTHON: Unable to loop properly

EDIT: Thank you, the question has been answered!

The program works properly, asides from the fact that it does not loop to allow the user to play a new game. ie, after entering too many, too few, or the perfect amount of change, the program asks "Try again (y/n)?: " as it should. But I can't find out why it doesn't loop... And when it loops, it doesn't need to include the large paragraph about explaining the game. Just the line about "Enter coins that add up to "+str(number)+" cents, one per line." Any tips?

#Setup

import random
playagain = "y"

#Main Loop

if (playagain == "y"):

    number = random.randint(1,99) #Generation of how many cents
    total = 0 #Running sum of guessed coins.

    print("The purpose of this exercise is to enter a number of coin values")
    print("that add up to a displayed target value. \n")
    print("Enter coins values as 1-penny, 5-nickel, 10-dime,and 25-quarter.")
    print("Hit return after the last entered coin value.\n")
    print("Enter coins that add up to "+str(number)+" cents, one per line.\n")

    while (True):
        if (total == 0):
            word = "first"
        else:
            word = "next"

        guess = str(input("Enter "+str(word)+" number: ")) #Records coin value

        #Entry Validation
        if (guess == ""): #When user is done guessing.
            if (total < number):
                print("Sorry - you only entered "+str(total)+" cents.\n")
                break
            elif (total > number):
                print("Sorry -  total amount exceeds "+str(number)+" cents.\n")
                break
            else:
                print("Correct!")
                break
        elif (int(guess) == 1) or (int(guess) == 5) or (int(guess) == 10) or (int(guess) == 25): 
            total = total + int(guess)        

        else:
            print("Invalid entry")
playagain = str(input("Try again (y/n)?: ")) #BRETT: I can't seem to get this to loop properly.

Upvotes: 0

Views: 135

Answers (4)

cybfox
cybfox

Reputation: 308

Your "Main loop" is not a loop, it is just an if statement. Also it is better to use raw_input because input will eval your input. Try something along the lines of this:

playagain = 'y'
#Main loop
while playagain == 'y':
    print "do gamelogic here..."
    playagain = raw_input("Try again (y/n)?: ")

Inside your gamelogic, you could use a boolean to check wether you need to print the game explanation:

show_explanation = True
while playagain == 'y':
    if show_explanation:
        print "how to play is only shown once..."
        show_explanation = False

    print "Always do this part of the code"
    ...

    playagain = raw_input("Try again (y/n)?: ")

Upvotes: 0

J&#246;rg Beyer
J&#246;rg Beyer

Reputation: 3671

Indent the last line as far as the while True line. And change the if (playagain == "y"): to a

while (playagain == "y"):

Upvotes: 0

hydronium
hydronium

Reputation: 316

You set playagain to y/n, but the code doesn't go back around to the beginning if playagain is equal to 'y'. Try making if playagain == "y" into while playagain == "y". That way, it goes through the first time and keeps going back to the beginning if playagain is still set to "y".

Also, indent your last line (playagain = str(....)) so it's part of the while playagain == "y" loop. If it's not, then the code will be stuck in an infinite loop because playagain isn't being changed inside the while loop.

Upvotes: 0

frmdstryr
frmdstryr

Reputation: 21362

By using break, you're completely leaving the while loop and never checking the playagain condition. If you want to see if the user wants to play again put the 'playagain' check in another while loop.

#Setup

import random
playagain = "y"

#Main Loop

while (playagain == "y"):

    number = random.randint(1,99) #Generation of how many cents
    total = 0 #Running sum of guessed coins.

    print("The purpose of this exercise is to enter a number of coin values")
    print("that add up to a displayed target value. \n")
    print("Enter coins values as 1-penny, 5-nickel, 10-dime,and 25-quarter.")
    print("Hit return after the last entered coin value.\n")
    print("Enter coins that add up to "+str(number)+" cents, one per line.\n")

    while (True):
        if (total == 0):
            word = "first"
        else:
            word = "next"

        guess = str(input("Enter "+str(word)+" number: ")) #Records coin value

        #Entry Validation
        if (guess == ""): #When user is done guessing.
            if (total < number):
                print("Sorry - you only entered "+str(total)+" cents.\n")
                break
            elif (total > number):
                print("Sorry -  total amount exceeds "+str(number)+" cents.\n")
                break
            else:
                print("Correct!")
                break
        elif (int(guess) == 1) or (int(guess) == 5) or (int(guess) == 10) or (int(guess) == 25): 
            total = total + int(guess)        

        else:
            print("Invalid entry")
    playagain = str(input("Try again (y/n)?: ")) #BRETT: I can't seem to get this to loop properly.

Upvotes: 1

Related Questions