我正在创建一个文本RPG,其中一个游戏命令是statistics
。它打印所有玩家的统计数据,其中一个是Defense Strength
,这是由玩家库存的第二和第三(1,2)个位置中的防守项目决定的。游戏中的所有项目都是item
类的实例,并具有属性Str
(强度)。播放器的广告资源是一个包含5个广告位(永不更改)的列表,空广告位用None
表示。
要打印播放器的防御强度,对于清单列表中的每个项目,如果它不是None,或者在布尔语句中为True,我想添加其Str
值(总是一个int)创建总和。
这就是我所拥有的:
print('- Defense Strength:', sum(i.Str for i in Inventory[1:3] if Inventory[i]))
然而,这失败了错误TypeError: list indices must be integers, not NoneType
我该如何解决这个问题??
PS:即使我只迭代2个索引,我想只用1行创建这个语句,因为它非常简单。
答案 0 :(得分:2)
使用if i
代替if Inventory[i]
,您尝试使用NoneType
进行索引
您已经在对Inventory
项进行了迭代,因此if i
会过滤NoneTypes
。
你基本上是这样做的:
l = [1,2,None,None]
for i in l:
if l[i]: # trying to access list using None as an index
print (i)
TypeError: list indices must be integers, not NoneType
当你应该做的时候:
for i in l:
if i: # check if element is not None
print (i)
1 # prints values that are not None
2