2010-12-28 2 views
3

Я хочу написать программу на питоне, которая будет одновременно имитировать 3 кости, но я хочу, чтобы 3 кости всегда имели разные числа друг от друга каждый раз они свернуты. ex на первом рулоне я получаю 2,1,6, что хорошо, но я не хочу прог. чтобы копировать дубликаты для ex 2,4,2. (3,3,3, также было бы неприемлемым)Я хочу бросить 3 кости с независимыми номерами друг от друга

# generating random numbers 1 - 6 
die1 = random.randint(1, 6) 

die2 = random.randrange(1, 6) 

die3 = random.randrange(1, 6) 

это все, что я до сих пор, им начинающий ... Спасибо

+0

взгляните на этот вопрос, если вы заинтересованы в самом алгоритме, а также, а не только в решении http://stackoverflow.com/questions/311703/algorithm-for -sampling-without-replacement –

+2

Примечание: * независимый * в этом контексте обычно понимается как означающий, что результат одного штампа не влияет на результат другие. Это почти полная противоположность тому, что вы хотите. Я думаю, что слово, которое вы ищете, отличается *. –

ответ

8

Попробуйте random.sample:

>>> sides = 6 
>>> dice = random.sample(range(1, sides + 1), 3) 
[3, 6, 1] 

Я бы посоветовал вам пересмотреть, есть ли хорошая идея иметь переменные, называемые die1, die2, die3.

Обычно лучше использовать список, как в приведенном выше примере.

3

Это будет работать:

a = range(1,7) 
random.shuffle(a) 
a[:3] 
+0

Красивый подход. Гораздо лучше, чем катить три независимых кубика, а затем повторно прокатывать дубликаты. – kindall

2

Это не обычное поведение трех костей, но вы можете сделать:

import random 
[die1, die2, die3] = random.sample(xrange(1, 7), 3) 

Вот документация по random.sample() и xrange() для справки.

0

Если вы собираетесь свернуть несколько раз, лучше хранить диапазон (1,7) где-то и использовать функцию выборки вместо воспроизведения в случайном порядке (один obvously, потому что «перетасовка» перемешивает весь диапазон)

посмотрите на это:

import random,time 
N=80000 
a = range(1,7) 
t= time.clock() 
for i in xrange(N): 
    random.shuffle(a) 
    a[:3] 
t= time.clock()-t 
print t 

t= time.clock() 
for i in xrange(N): 
    dice = random.sample(range(1, 6 + 1), 3) 
t= time.clock()-t 
print t 

t= time.clock() 
for i in xrange(N): 
    dice = random.sample(a, 3) 
t= time.clock()-t 
print t 
Смежные вопросы