MrJagsterS
MrJagsterS

Reputation: 1

Program stays stuck in while loop but doesn't run program?

this is a crabs simulator. Im having trouble with my while loop. Where it says

while val == True:

Is where the problem happens. It stays in the while loop but nothing happens. If you find anything, I will be most grateful. Here is the full code. (I have tried to validate everything)

import time
import random
control1 = False
control2 = True
x = True
val = True
z = True
def throw(n):
    for i in range(1,n+1):
        dice_1 = random.randint(1,6);dice_2 = random.randint(1,6)
        print "roll",i,", die 1 rolled",dice_1,"and die 2 rolled",dice_2,",total",dice_1+dice_2
        time.sleep(2)
    return n

while z == True:
    if x == True:
        while control1 == False:
            try:
                amount_1 = int(raw_input("Welcome to crabs.\nHow many times would you like to roll:"))
                control1 = True
            except ValueError:
                print ("Enter a valid number.")
            throw(amount_1)
            x = False
    else:
        while val == True:
            roll_again = raw_input("Would you like to roll again: ")
            if roll_again == "1":
                val = False
                while control2 == True:
                    try:
                        amount_2 = int(raw_input("How many times would you like to roll:"))
                        control2 = False
                    except ValueError:
                        print ("Enter a valid number.")
                    throw(amount_2)
                    z = True
            elif roll_again == "2":
                val = False
                exit()
            else:
                val = True

Upvotes: 0

Views: 130

Answers (3)

runDOSrun
runDOSrun

Reputation: 10985

It's stuck in an endless loop after the else branch (of if x) is executed, because you set the value to False. In the next iteration you then say while val == True and since this statement is not False and there is no other statement to consider, you run in an endless loop.

To see what I mean simply add a print statment here:

else:
    print val
    while val == True:
        roll_again = raw_input("Would you like to roll again: ")
        if roll_again == "1":

Now, I don't know if you need all those booleans for your actual program, but if I'd to make it work, I'd start eliminating the booleans I don't need. I think you have a too complex structure.

Edit: Here's a suggestion to make the program simpler.

import time
import random
x = True
z = True
def throw(n):
    for i in range(1,n+1):
        dice_1 = random.randint(1,6);dice_2 = random.randint(1,6)
        print "roll",i,", die 1 rolled",dice_1,"and die 2     rolled",dice_2,",total",dice_1+dice_2
        time.sleep(2)
    return n


def ask(x):
    if x: 
        print "Welcome to crabs."
    try:
        amount = int(raw_input("How many times would you like to roll:"))
    except ValueError:
        print ("Enter a valid number.")
    throw(amount)

while z:
    ask(x)
    x = False
    roll_again = raw_input("Would you like to roll again: ")
    if roll_again == "1":
        continue
    else:
        break

Upvotes: 0

hlee
hlee

Reputation: 339

Put this line:

print z, x, val

Underneath that while statement.

You'll see that after you respond to the "Would you like to roll again: " question with "2", both x and val are false. That means that it'll go through every part of your if..else statement and just keep looping back infinitely.

Upvotes: 0

lyschoening
lyschoening

Reputation: 18728

After your first run through the program x and val are both False, but z is still True. As a result, the outer loop just keeps on rolling.

Upvotes: 2

Related Questions