2016-02-28 2 views
1

Я хочу, чтобы этот цикл while менял числа с каждой итерацией (как с подсчетом, так и с случайным int.), Но когда я запускаю программу, цикл просто продолжается с одинаковыми номерами в count и случайная ИНТ .:Подсчет/случайный int in while loop

# 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,".") 
+2

змеиные глаза в кости игры обычно означает пару из них, а не только какой-либо пары. –

+0

Чтобы избавиться от безвозмездного пробела в выводе, рассмотрите 'print (" {}. Номер штампа 1 {}, а число 2 - {}. ". Format (count, die1, die2))'. –

ответ

2

Вы должны сделать random вызов также внутри цикла while иначе они не будут меняться. И другое дело, что вы сравните == и установить = счетчик:

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,".") 

Пытаюсь тестовый прогон дает мне:

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 . 

Одна альтернатива, которая почти идентична, но использует break вместо условий на в то время как цикл будет:

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,".") 
4

Каждый раз, когда вы вызовrandom.randint(1,4), вы создаете один случайный номер. Он не волшебным образом меняется на новое случайное число всякий раз, когда вы печатаете его.

Создайте новые случайные числа с random.randint(1, 4) внутри вашей петли while.

Вторая проблема заключается в том, что count == count + 1 проверяет равенство (и возвращает False в вашем случае). Для выполнения задания используйте оператор присваивания = или count += 1 для увеличения count на единицу.

Если вы хотите генератор, который бесконечно выплевывает случайные числа, написать одно:

>>> 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 
1

Не знаю, почему вам нужна переменная sides, поэтому я оставил его вне. Вы хотите катить матрицу в каждом цикле, что означает, что вам необходимо назначить die1 и die2 случайному числу в каждом цикле.

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,".") 
0

Вы можете использовать цикл с iter выплюнуть пары случайных чисел, enumerate будет делать подсчет, для змеиных глаз вы также должны проверять, что оба являются 1 не случайным соответствием пары:

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)) 

Выход:

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.'