簡體   English   中英

即使我使用 np.random.choice(),我是否有理由一遍又一遍地獲得相同的輸入?

[英]Is there a reason why I am getting the same input over and over even though I am using np.random.choice()?

我知道有人玩龍與地下城 (D&D) 時會擲出一個 1-20 的公平骰子(每邊一個值),並且根據角色,我猜角色可以做出的每個動作都有一個修飾符。 在這種情況下,打開門的修飾符是 11。 如果擲骰 + 修正值大於 15,則動作成功,角色打開門,否則動作失敗。 這部分問題希望我們制作一個包含 7 個骰子的數組,以及該角色的分數,修飾符為 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 循環中,因為我還沒有完全掌握我在它們中到底在做什么,但我似乎無法確定到底是什么問題。

這是因為您只調用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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM