Как вызвать функцию случайного списка, не изменяя ее в Python?

#python #dice

#python #dice

Вопрос:

Мне действительно нужна помощь. Я определил функцию, которая дает x количество бросков для n-сторонней кости. Теперь меня просят рассчитать частоту каждой стороны, и freq1 = 1 , похоже, это не работает, учитывая, что может быть еще много сторон (не только 6), и то, что я сделал, было;

первая функция, которую я определил, была dice(x) ,

 freq_list = list(range(1,(n 1)))
rollfreq = [0]*n
for w in dice(x):
    rollfreq[w-1]  = 1

print zip(freq_list,rollfreq)
 

Я получаю список, такой как [(1,0),(2,4),(3,1)...] so on, который ожидается, но проблема в том, что значение rollfreq не соответствует исходному случайно сгенерированному dice(x) списку. Я предполагаю, что это потому, что, поскольку это RNG, он также изменяет значения dice(x) во втором запуске, так что я не могу ссылаться на мою исходную случайно сгенерированную dice(x) функцию. Есть ли какое-либо решение для этого? Я имею в виду, что я перепробовал почти все, но, по-видимому, это не работает!

Редактировать:

 import random

n = raw_input('Number of the sides of the dice: ')
n = int(n)
x = raw_input('Number of the rolls: ')
x = int(x)

def dice():
    rolls = []
    for i in range(x):
        rolls.append(random.randrange(1, (n 1)))
    return rolls
print dice()
freq_list = list(range(1,(n 1)))
rollfreq = [0]*n
for w in dice():
        rollfreq[w-1]  = 1

print 'The number of frequency of each side:', zip(freq_list,rollfreq)
 

Я добавил код — надеюсь, вы, ребята, поможете мне разобраться в этом, спасибо!

Комментарии:

1. Является ли функция dice чем-то, что вы написали сами? Не могли бы вы также опубликовать код для этого?

2. Спасибо за ваш ответ. Я добавил код в OP.

3. Как насчет присвоения содержимого рулона переменной?

Ответ №1:

Вы дважды вызывали функцию dice(), один раз, когда вы ее печатали, и один раз, когда вы повторяли ее в цикле for . Оттуда приходят разные результаты.

 import random

n = raw_input('Number of the sides of the dice: ')
n = int(n)
x = raw_input('Number of the rolls: ')
x = int(x)

def dice():
    rolls = []
    for i in range(x):
        rolls.append(random.randrange(1, (n 1)))
    return rolls

freq_list = list(range(1,(n 1)))
rollfreq = [0]*n

# Grab the rolls
rolls = dice()
# Print them here
print(rolls)

for w in rolls:
        rollfreq[w-1]  = 1

print 'The number of frequency of each side:', zip(freq_list,rollfreq)
 

Комментарии:

1. nemanjap, большое вам спасибо за исправление, это было именно то, что мне было нужно! Я попытался вызвать ее один раз, но почему-то не смог этого сделать 🙂