以随机顺序执行任务

2024-09-30 23:38:27 发布

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

我有以下函数来为角色分配点:

def randstat(level):
    from random import randint
    points = randint(10,max(20,5*level))

    agility=randint(0,points)
    points -= agility

    stamina=randint(0,points)
    points -=stamina

    strength=randint(0,points)
    points -=strength

    vitality=randint(0,points)
    points -=vitality

    inteligence=randint(0,points)
    points -= inteligence

它的工作原理和我预期的一样,但是当你沿着统计列表往下看的时候,要怀疑的点就少了,所以像inteligencevitality这样的统计比agilitystamina得到的点要少得多。我怎么能按随机顺序给这些属性分配点,也就是说,它不总是先分配agility然后再分配inteligence最后?你知道吗


Tags: 函数fromimport角色defrandomlevelstrength
2条回答

这很简单!;-) 我想这样代码会短得多,清晰得多。我希望你觉得它有用。你知道吗

def randstat(level):
    from random import randint
    from random import shuffle
    points = randint(10,max(20,5*level))

    # Values of stats
    sValues = []

    # Loop as many times as stats
    for i in range(5):
        sValues.append(randint(0,points))
        points -= sValues[-1]

    # Reorder randomly the values of stats
    shuffle(sValues)
    # and assign them to the final variables
    agility, stamina, strength, vitality, intelligence = sValues

我会以相反的方式来做这件事-而不是试图用一个随机数来填充每个属性,选择哪个属性随机递增并重复。你知道吗

这将导致更多的'甚至'统计和使情况下,字符有一个统计在最大点,其余在零远不常见。你知道吗

def randstat(level):
    points = randint(10,max(20,5*level))

    # set all our minimums to zero
    stats = [0, 0, 0, 0, 0]

    for i in range(points):
        stat = randint(0, len(stats)-1); # pick a random stat to increment
        stats[stat] = stats[stat] + 1

    # extract the stats back out of our array
    agility = stats[0]
    stamina = stats[1]
    strength = stats[2]
    vitality = stats[3]
    intelligence = stats[4]

相关问题 更多 >