基于变量参数泛化函数

2024-10-06 12:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的第一篇文章,我是一个初学者程序员。我希望你能帮助我成为一个更好的人。你知道吗

我试图为五(05)名玩家建立一个循环多米诺游戏模型。在每轮比赛中,只有四(04)名球员参加,两人一组(02)。下面的公式对固定数量的5名玩家起作用。你知道吗

我的具体问题是如何使它通用于任何数量的球员,以及如何使这一个更有效。(我想这是可能的,因为我是个新手)。你知道吗

谢谢。你知道吗

Results to be modeled

代码:

import numpy

def calculo(*args):

    wints= numpy.zeros(len(args),dtype=int)

    for i, item in enumerate(args):

        if i is 0:
            if item[0]>item[1]:
                wints+=[1,1,0,0,0] # players 12
            else:
                wints+=[0,0,1,1,0] # players 34

        if i is 1:
            if item[0]>item[1]:
                wints+=[1,0,0,0,1] # players 15
            else:
                wints+=[0,1,1,0,0] # players 23

        if i is 2:
            if item[0]>item[1]:
                wints+=[1,0,0,1,0] # players 14
            else:
                wints+=[0,1,0,0,1] # players 25

        if i is 3:
            if item[0]>item[1]:
                wints+=[1,0,1,0,0] # players 13
            else:
                wints+=[0,0,0,1,1] # players 45

        if i is 4:
            if item[0]>item[1]:
                wints+=[0,1,0,1,0] # players 24
            else:
                wints+=[0,0,1,0,1] # players 35

    return wints

print(calculo([118,28],[128,66],[26,133],[111,0],[57,109]))

Tags: numpy数量ifis文章玩家argsitem
1条回答
网友
1楼 · 发布于 2024-10-06 12:33:46

很难理解您要做什么,但您可以先减少冗余代码,如下所示:

def calculo(items):
    wints = numpy.zeros(len(items), dtype=int)

    if items[0][0] > items[0][1]:
        wints += [1,1,0,0,0] # players 12
    else:
        wints += [0,0,1,1,0] # players 34

    if items[1][0] > items[1][1]:
        wints += [1,0,0,0,1] # players 15
    else:
        wints += [0,1,1,0,0] # players 23

    if items[2][0] > items[2][1]:
        wints += [1,0,0,1,0] # players 14
    else:
        wints += [0,1,0,0,1] # players 25

    if items[3][0] > items[3][1]:
        wints += [1,0,1,0,0] # players 13
    else:
        wints += [0,0,0,1,1] # players 45

    if items[4][0] > items[4][1]:
        wints += [0,1,0,1,0] # players 24
    else:
        wints += [0,0,1,0,1] # players 35

    return wints

这里似乎有一种模式。。。你知道吗

def one_hot_encode(players, n):
    arr = numpy.zeros(n + 1, dtype=int)
    arr[players] = 1
    return arr[1:]

def calculo(scores, pairings, n_players):
    wints = numpy.zeros(n_players, dtype=int)

    for (s1, s2), (p1, p2) in zip(scores, pairings):
        winner = p1 if s1 > s2 else p2
        wints += one_hot_encode(winner, n_players)

    return wints

scores = [[118, 28], [128, 66], [26, 133], [111, 0], [57, 109]]
pairings = [ [[1,2],[3,4]], [[1,5],[2,3]], [[1,4],[2,5]], [[1,3],[4,5]], [[2,4],[3,5]] ]
print(calculo(scores, pairings, 5))

输出:

[3 2 2 0 3]

您可以根据需要生成配对。你知道吗

相关问题 更多 >