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

我正在尝试编写一个脚本,用非常规骰子模拟骰子游戏。游戏的目标是根据重复实验来确定哪个骰子更好,其中较大的数字/滚动获胜。这是我到目前为止的工作示例:


from random import randint, seed

from datetime import datetime

import itertools as it

seed(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 个骰子的获胜次数。


尚方宝剑之说
浏览 145回答 2
2回答

30秒到达战场

通常,我会使用字典来做这样的事情,但由于你的骰子表示是一个列表(不可散列),你可以将它们转换为 afrozenset或 a tuple。我更喜欢元组,因为它保留了顺序和重复(如果有)。num_rounds = 100dice_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)] += 1max_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 winselse:    return -1 # more than one dice with max wins

白板的微信

如果您谈论的是具有相同点数的骰子,则不存在“最佳”骰子。例如,如果骰子 A 平均赢得骰子 B,骰子 B 赢得骰子 C,那么平均而言,骰子 C 仍然有可能赢得骰子 A。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python