Danny Garcia
Danny Garcia

Reputation: 227

Counting/random int in while loop

I want this while loop to change numbers with every iteration (both the count and random int.) but when I run the program, the loop just goes on with the same numbers on the count and random int.:

# if 4 sides 
die1 = random.randint(1,4)
die2 = random.randint(1,4)
count = 1 

while sides == 4 and die1 != die2:
    print (count, ". die number 1 is", die1, "and die number 2 is", die2,".")
    count == count + 1

print ("You got snake eyes! Finally! On try number", count,".")

Upvotes: 1

Views: 2552

Answers (4)

Padraic Cunningham
Padraic Cunningham

Reputation: 180441

You can use a for loop with iter to spit out pairs of random numbers , enumerate will do the counting, for snake-eyes you should also be checking that both are 1's not a random matching pair:

from random import randint                                                                   

def repeating_rand(i, j):                                                                    
    for count, (r1, r2 ) in enumerate(iter(lambda: (randint(i, j), randint(i, j)), None), 1):
        if r1 == 1 and r2 == 1:                                                              
            return "You got snake eyes! Finally! On try number {}.".format(count)            
        print("Try no. {}, die number 1 is {} and die number 2 is {}".format(count, r1, r2)) 

Output:

 In [12]: repeating_rand(1, 4)
Try no. 1, die number 1 is 1 and die number 2 is 2
Try no. 2, die number 1 is 4 and die number 2 is 1
Try no. 3, die number 1 is 1 and die number 2 is 2
Try no. 4, die number 1 is 1 and die number 2 is 3
Try no. 5, die number 1 is 1 and die number 2 is 3
Try no. 6, die number 1 is 3 and die number 2 is 4
Try no. 7, die number 1 is 4 and die number 2 is 2
Try no. 8, die number 1 is 1 and die number 2 is 2
Try no. 9, die number 1 is 3 and die number 2 is 2
Try no. 10, die number 1 is 4 and die number 2 is 3
Try no. 11, die number 1 is 1 and die number 2 is 3
Try no. 12, die number 1 is 3 and die number 2 is 4
Out[12]: 'You got snake eyes! Finally! On try number 13.'

Upvotes: 0

MSeifert
MSeifert

Reputation: 152677

You need to do the random calls also inside the while loop otherwise they will not change. And the other thing is that you compare == and not set = the counter:

import random

sides = 4
count = 1 
die1 = random.randint(1,4)
die2 = random.randint(1,4)

while sides == 4 and die1 != die2:
    print (count, ". die number 1 is", die1, "and die number 2 is", die2,".")
    count += 1
    die1 = random.randint(1,4)
    die2 = random.randint(1,4)

print ("You got snake eyes! Finally! On try number", count,".")

Trying a test run gives me:

1 . die number 1 is 4 and die number 2 is 3 .
2 . die number 1 is 2 and die number 2 is 1 .
3 . die number 1 is 1 and die number 2 is 2 .
4 . die number 1 is 3 and die number 2 is 4 .
5 . die number 1 is 1 and die number 2 is 4 .
You got snake eyes! Finally! On try number 6 .

One alternative that is almost identical but uses break instead of conditions on the while loop would be:

import random

sides = 4
count = 1 

def tossdie():
    """Function to create a random integer for a die"""
    return random.randint(1,4)

while True:
    die1 = tossdie()
    die2 = tossdie()
    print (count, ". die number 1 is", die1, "and die number 2 is", die2,".")
    if die1 == die2:
        break
    count += 1

print ("You got snake eyes! Finally! On try number", count,".")

Upvotes: 2

timgeb
timgeb

Reputation: 78700

Each time you call random.randint(1,4), you are creating a single random number. It does not magically change to a new random number whenever you print it.

Generate new random numbers with random.randint(1, 4) inside your while loop.

The second problem is that count == count + 1 checks for equality (and returns False in your case). To do an assignment, use the assignment operator = or count += 1 to increment count by one.

If you want a generator that endlessly spits out random numbers, write one:

>>> import random
>>> def rng(i, j):
...     while True:
...         yield random.randint(i, j)
... 
>>> random_gen = rng(1, 4)
>>> next(random_gen)
2
>>> next(random_gen)
3
>>> next(random_gen)
2
>>> next(random_gen)
2
>>> next(random_gen)
1

Upvotes: 4

Coline Do
Coline Do

Reputation: 96

Not sure why you needed the sides variable, so I left it out. You want to roll the die in every loop, which means you have to re-assign die1 and die2 to a random number in each loop.

import random

# Initial parameters
die1 = random.randint(1,4)
die2 = random.randint(1,4)
count = 1

# Loop and roll die each time
while die1 != die2:
    print(count, ". die number 1 is", die1, "and die number 2 is", die2,".")
    die1 = random.randint(1,4)
    die2 = random.randint(1,4)
    count += 1

# Print on which die roll you got two equal die numbers rolled
print ("You got snake eyes! Finally! On try number", count,".")

Upvotes: 1

Related Questions