0

我正在尝试重新创建一个名为 Dudo 的骰子游戏的单人游戏版本。最相关的信息是六名玩家有六个隐藏的骰子,游戏的重点是猜测桌上总共有多少某种骰子(例如,如果有十个 4 或十二个 5 等)。

为了制作一些人工智能,我使用了二项分布,计算机根据它手中已经有多少这种骰子来猜测存在一定数量的某种骰子的概率。我将这个方程保存在变量机会中:

chance = ((1/3) ** (i - player_dice_type[turn][active_type])) * ((2/3) ** (total_count - i - player_count[turn] + player_dice_type[turn][active_type]))

i是那种骰子的数量(例如六个 5,或七个 5,或八个 5 等)。我有一个玩家有多少种骰子的列表( ),我可以通过子集和player_dice_type为特定玩家选择一个特定的骰子。1/3 与游戏规则有关(通常骰子是 1/6),但这与我的问题无关。turnactive_type

当我打电话给机会时,它只给我 ifplayer_dice_type[turn][active_type] = 0和的值i = 6,因此当计算机有 0 个骰子时,有 6 个骰子在桌子上的概率。

我可以调用iplayer_dice_type[turn][active_type]看到它们不等于 6 或 0。但问题是,如果我复制并粘贴等式,它工作得非常好。当我调用机会时,它仅默认为 6 和 0。

我也尝试过创建一个chancefun(i)返回原始方程的函数,然后说chance = chancefun(i). 我可以将环境中的 i 更改为我想要的任何内容,并chancefun(i)会做出相应的反应,但再一次,变量chance不会。

我将范围界定为标签只是因为我认为它可能以某种方式相关,但我想不出如何相关。我也尝试将变量名从更改chance为一堆其他东西,但仍然没有运气。

4

2 回答 2

1

如果您定义chance为一个变量,则它的值在您创建它时是固定的。i如果您稍后更改值或其他任何内容,它将不会“更新” 。你不能像你定义的那样“调用”机会;它只是一个静态值,而不是一个函数。

如果您执行类似的操作chance = chancefun(i),则设置一次机会的价值,仅此而已。不会chancechancefunc某种方式“链接”变量。

如果您想为不同的参数获得不同的机会值,请将其设为函数并使用所需的参数调用它。就像是:

def chance(i, turn, active_type):
    return ((1/3) ** (i - player_dice_type[turn][active_type])) * ((2/3) ** (total_count - i - player_count[turn] + player_dice_type[turn][active_type]))

我在这里假设player_dice_type并且total_count是全局定义的变量。您将需要决定要chance在全局范围内查找哪些值以及要在每次调用时传递哪些值。

于 2015-06-02T04:44:46.943 回答
0

我认为这个问题与chance一开始就计算一个值并保持这个值有关。当一切启动时,i = 6 并且 player_dice_type 是一个空列表(稍后它会被另一个函数填充)。稍后,我可以在chance = chancefun(i)生成一些数字并更改后输入i,并chance显示该确切值,但再次锁定它。

我可能会继续使用 chancefun(i) 而不使用机会,但我认为将所有内容保存在一个名为的变量下会非常方便,chance因为稍后我必须将多个概率相加

于 2015-06-02T04:45:29.203 回答