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)