python - 即使我使用 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()
推荐阅读
- java - LinkedList java.lang.IndexOutOfBoundsException:索引:0,大小:1
- flutter - 如何使用 ValueListenableProvider
- java - 数组作为新的和非新的
- python - 计算文件中所有单词的词频
- javascript - 我得到承诺{
} 作为返回值并在异步范围内调用给我 undefined 立即 - kubernetes - 在升级前挂钩中的 if 条件中使用升级前 .Values - Helm 图表
- javascript - React - event.target 返回之前点击的元素的 innerText 而不是当前点击的元素
- java - 对静态方法或返回 lambda 的静态方法的方法引用
- javascript - 禁止 JavaScript POST 到 URL
- c# - C# 签名与公钥匹配