以随机顺序执行任务

时间:2014-03-18 05:46:38

标签: python random

我有以下功能将点数分配给caracters统计数据。:

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等统计数据的得分远远低于agility }或stamina。我怎样才能以随机顺序为每个统计数据分配点数,即,它总是首先分配agility然后再分配inteligence

2 个答案:

答案 0 :(得分:1)

这很简单! ;-) 我认为这样代码会更短更清晰。我希望你觉得它很有用。

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

答案 1 :(得分:1)

我以相反的方式解决这个问题 - 而不是试图用随机数填充每个统计数据,选择随机增加哪个数据并重复。

这将导致更多甚至更多的'统计数据并使角色在最大点处具有一个统计数据而其余部分在零点处不太常见。

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]