Есть ли причина, по которой я получаю один и тот же ввод снова и снова, хотя я использую np.random.choice ()? - PullRequest
2 голосов
/ 23 октября 2019

Мне говорят, что кто-то, играющий в Dungeons and Dragons (D & D), бросает честный кубик со значениями 1-20 (одно значение на сторону), и что в зависимости от персонажа, я полагаю, есть модификатор для каждого действия, которое персонаж может совершить,В этом случае модификатор 11 для открытия двери. Если бросок кубика + модификатор больше 15, действие будет успешным, и если персонаж не откроет дверь, действие завершится неудачей. В этой части вопроса мы хотим сделать массив из семи бросков костей и счета для этого персонажа с модификатором 11.

Это то, что я пробовал до сих пор

import numpy as np
from datascience import *

modifier = 11
possible_rolls = np.arange(20)
roll_result = np.random.choice(possible_rolls)
modified_result = roll_result + modifier
num_observations = 7

def simulate_observations():
    """Produces an array of 7 simulated modified die rolls"""
    possible_rolls = np.arange(20)
    roll_result = np.random.choice(possible_rolls)
    modified_result = roll_result + modifier
    array = make_array()
    for i in np.arange(num_observations):
        array = np.append(array, modified_result)
    return array

observation_array = simulate_observations()
print(observation_array)

Я ожидаю получить различный диапазон выходных данных, основанный на случайном броске костей, и затем добавив это значение в модификатор, а затем, наконец, поместив это окончательное значение в массив с именем array, но все, что я получаю, это массивэто выглядит как [20.,20.,20.,20.,20.,20.,20.]. Любые идеи относительно того, где я могу быть? Я на 90% уверен, что моя проблема в моем цикле for, поскольку я не совсем понял, что именно я делаю в них, но я не могу точно определить, в чем проблема.

1 Ответ

0 голосов
/ 23 октября 2019

Это потому, что вы вызываете np.random.choice только один раз, а не один раз в каждой итерации в цикле for

import numpy as np
from datascience import *

modifier = 11
possible_rolls = np.arange(20)
roll_result = np.random.choice(possible_rolls)
modified_result = roll_result + modifier
num_observations = 7

def simulate_observations():
    """Produces an array of 7 simulated modified die rolls"""
    possible_rolls = np.arange(20)

    array = make_array()
    for i in np.arange(num_observations):
       # moved roll_result inside the loop
       roll_result = np.random.choice(possible_rolls)
       modified_result = roll_result + modifier
       array = np.append(array, modified_result)
    return array

observation_array = simulate_observations()
print(observation_array)
# [20. 11. 24. 11. 15. 16. 26.]

Но вы также можете избежать цикла for и выполнить непосредственно

def simulate_observations():
    """Produces an array of 7 simulated modified die rolls"""
    possible_rolls = np.arange(modifier,20+modifier)
    return np.random.choice(possible_rolls,size=num_observations).tolist()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...