首页 > 解决方案 > 在三个骰子的列表中滚动两个骰子时找到最大值

问题描述

我有以下函数,它将两 (2) 个六面骰子作为输入,并确定其中哪个骰子的数量更大。 请注意,骰子不一定有数字 1-6。

def count_number_of_wins(die_1, die_2):

    die_1_larger = 0
    die_2_larger = 0

    for i in range(6):
        for j in range(6):
            if die_1[i] > die_2[j]:
                die_1_larger += 1
            elif die_1[i] < die_2[j]:
                die_2_larger +=1
        

    return (die_1_larger, die_2_larger)

现在,我使用这个函数来确定其中哪个骰子是“最好的”三个骰子的输入列表。我拿了一份骰子列表,并确定其中一个骰子是否比列表中的其他骰子更好。如果骰子获胜的频率更高,则骰子“更好”。在这种情况下,我返回其从 0 开始的索引。如果不存在这样的骰子,则返回-1。

这是用于该功能的功能:

def determine_best_die(dice):
    assert all(len(dice) == 6 for die in dice)

    wins = [0] * len(dice)
    
    for i in range(len(dice)):
        for j in range(i+1, len(dice)):
            a, b = count_number_of_wins(dice[i], dice[j])
            if a > b:
                wins[i] = wins[i] + 1
            else:
                wins[j] = wins[j] + 1
    for i in wins:
        if (i == (len(dice)-1)):
            return wins.index(i)

此功能在这种情况下失败:

[1, 1, 6, 6, 8, 8], [2, 2, 4, 4, 9, 9], [3, 3, 5, 5, 7, 7]

我希望它返回-1,它返回0。

任何人都可以看到问题出在determine_best_die()函数中吗?

谢谢!

标签: python

解决方案


def count_number_of_wins(die_1, die_2):

    die_1_larger = 0
    die_2_larger = 0

    for i in range(6):
        for j in range(6):
            if die_1[i] > die_2[j]:
                die_1_larger += 1
            elif die_1[i] < die_2[j]:
                die_2_larger +=1
        

    return (die_1_larger, die_2_larger)

def determine_best_die(dice):
    assert all(len(die) == 6 for die in dice)

    wins = [0] * len(dice)
    
    for i in range(len(dice)):
        for j in range(i+1, len(dice)):
            a, b = count_number_of_wins(dice[i], dice[j])
            if a > b:
                wins[i] = wins[i] + 1
            else:
                wins[j] = wins[j] + 1
    for i in wins:
        if (i == (len(dice)-1)):
            return wins.index(i)
    return -1

我添加了 -1 的情况,当没有骰子赢得其余所有骰子时,就会发生这种情况。断言语句也在检查 len(dice) 而不是 len(die)

print (determine_best_die([[3,3, 6, 6, 8, 8], [2, 2, 4, 4, 9, 9], [3, 3, 5, 5, 7, 7]])) 

返回 0,因为第一个骰子赢得了第二个和第三个骰子,而原始失败的测试用例

print (determine_best_die([[1, 1, 6, 6, 8, 8], [2, 2, 4, 4, 9, 9], [3, 3, 5, 5, 7, 7]]))

返回 -1


推荐阅读