Python 不在不同函数中工作的等效代码行

Python 不在不同函数中工作的等效代码行,python,Python,我有下面的函数,可以随机向技能提供统计信息。它按我所期望的那样工作 def randstat(level): from random import randint points = randint(10,max(20,5*level)) # set all our minimums to zero stats = [0, 0, 0, 0, 0] for i in range(1, points): stat = randint(0,

我有下面的函数,可以随机向技能提供统计信息。它按我所期望的那样工作

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

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

    for i in range(1, points):
        stat = randint(0, len(stats)-1); # pick a random stat to increment
        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]
但是我想简化
stat=randint(0,len(stats)-1)
使用我已经拥有的另一个函数,转到
stat=randlist(stats)

def randlist(list):
    from random import randint
    return(list[randint(0,len(list)-1)])
这给了我一个错误: 例外。索引器错误:列表索引超出范围 当我在另一个函数中有完全相同的代码行时,你知道为什么它会这样做吗? 可能是我忽略的一件很简单的事情。无论如何,先谢谢你

但是我想简化stat=randint(0,len(stats)-1);统计= 排名(统计)

您可以使用
random.choice
在方法中简化它。您的代码还存在一些其他问题,下面是一个改进的版本,它使用了统计数据字典:

import random

def randstat(level): 
    points = random.randint(10,max(20,5*level))
    stats = {'agility': 0,
             'stamina': 0,
             'strength': 0,
             'vitality': 0,
             'intelligence': 0}

    for i in range(1, points):
        stat = random.choice(stats.keys()) # pick a random stat to increment
        stats[stat] += 1

    return stats

您在
randlist
函数中有一个额外的查找,您最终尝试执行以下操作:

stats[stats[stat]] += 1
通过从
randlist
中删除无关的
list[]
来修复此问题,因此您只需返回随机索引(而不是值):


<>但是,请考虑使用不同的数据结构。Python的最佳实践是尽可能避免使用索引算法——这样做往往会产生更易于阅读和维护的代码,并且作为一个不错的奖励,它通常更短。

您会遇到什么错误?不要将
列表
用作变量名;您应该使用
random.choice
而不是
randint
def randlist(list):
    return randint(0, len(list)-1)