为了账号安全,请及时绑定邮箱和手机立即绑定

如何存储从多个列表生成的随机整数

如何存储从多个列表生成的随机整数

尚方宝剑之说 2021-07-04 21:35:30
我正在尝试编写一个脚本,用非常规骰子模拟骰子游戏。游戏的目标是根据重复实验来确定哪个骰子更好,其中较大的数字/滚动获胜。这是我到目前为止的工作示例:from random import randint, seedfrom datetime import datetimeimport itertools as itseed(datetime.now())def find_the_best_dice(dices):assert all(len(dice) == 6 for dice in dices)for dice1, dice2 in it.combinations(dices, 2):    num_rounds = 100    num_dice1_wins = 0    num_dice2_wins = 0    for _ in range(num_rounds):       dice1_result = dice1[randint(0, 5)]       dice2_result = dice2[randint(0, 5)]       if dice1_result > dice2_result:          num_dice1_wins += 1       elif dice2_result > dice1_result:          num_dice2_wins += 1     return ("index of winning dice or -1 if tie")find_the_best_dice(dices=[[1, 1, 6, 6, 8, 8], [2, 2, 4, 4, 9, 9], [3, 3, 5, 5, 7, 7]])我面临的问题是不知道如何存储超过 2 个骰子的获胜次数。
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

通常,我会使用字典来做这样的事情,但由于你的骰子表示是一个列表(不可散列),你可以将它们转换为 afrozenset或 a tuple。我更喜欢元组,因为它保留了顺序和重复(如果有)。


num_rounds = 100

dice_wins = {tuple(x):0 for x in dices}

for dice1, dice2 in it.combinations(dices, 2):

    for _ in range(num_rounds):

        dice1_result = dice1[randint(0, 5)]

        dice2_result = dice2[randint(0, 5)]

        if dice1_result > dice2_result:

            dice_wins[tuple(dice1)] += 1

        elif dice2_result > dice1_result:

            dice_wins[tuple(dice2)] += 1

max_win = max(list(dice_wins.values()))

die_with_max_win = [dice for dice in dices if dice_wins[tuple(dice)] == max_win]


if len(die_with_max_win) == 1:

    return die_with_max_win[0] # only dice with that many wins

else:

    return -1 # more than one dice with max wins


查看完整回答
反对 回复 2021-07-13
?
白板的微信

TA贡献1883条经验 获得超3个赞

如果您谈论的是具有相同点数的骰子,则不存在“最佳”骰子。例如,如果骰子 A 平均赢得骰子 B,骰子 B 赢得骰子 C,那么平均而言,骰子 C 仍然有可能赢得骰子 A。


查看完整回答
反对 回复 2021-07-13
  • 2 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信