错误:'int'不是可订阅的[Python]

时间:2018-03-16 01:54:17

标签: python

我正在写一个文字冒险游戏作为练习。我是Python的新手。我试图将字典中的敌人伤害保存为范围:

giant_rat = {'name':'Giant Rat', 'Health':15, 'attack':random.randrange(1, 4)}
player = {'health':20, 'weapon':None, 'holding':None}

所以我以后要做的就是访问这个范围并选择一个随机数 在该范围内并从玩家的健康状况中减去它。

atkDmg = giant_rat['attack']
player['health'] -= atkDmg

这给了我错误。这不应该工作吗? atkDmg是一个整数,播放器['health']也是如此,所以我不确定为什么它会给我一个错误?

此外,如果有更聪明的方法来实现这一点,那么我愿意接受建议。我想编写程序,以便我所要做的就是添加一个新的敌人(而不是仅仅在战斗函数循环中放入我想要的范围。)

我希望这是有道理的。

谢谢!

编辑:好的,这是实际的代码。我认为上面的代码与我的代码相同,但我想它不是:

# Weapon Stats
weapon = {'Bone':(4, 9), 'None':random.randrange(2, 5)}

# Player Stats
player = {'weapon':'None', 'Health':20, 'Holding':'None'}

# enemy
giant_rat = {'name':'Giant Rat', 'Health':15, 'attack':(1, 4)}

然后这是给我错误的代码:

atkDmg = weapon[player['weapon']]
enemy['Health'] -= atkDmg
def battleLoop():

    enemyList = [giant_rat, giant_spider]
    enemy = random.randrange(2)
    stdio.writeln('Suddenly a ' + enemyList[enemy]['name'] + ' appears!')
    attackLoop(enemy)

更新2:实际上,我已经弄明白了。在上面的代码中,我忘了给敌人分配敌人的值。我认为应该解决我的问题。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

显示的代码完全没有问题,如下所示:

>>> import random
>>> giant_rat = {'name':'Giant Rat', 'Health':15, 'attack':random.randrange(1, 4)}
>>> player = {'health':20, 'weapon':None, 'holding':None}
>>> atkDmg = giant_rat['attack']
>>> atkDmg
3
>>> player['health'] -= atkDmg
>>> player['health']
17

因此,您的问题几乎肯定在于您显示的某些代码 。根据您收到的错误消息,您很可能会使用某种整数覆盖player

>>> player = 42
>>> player['health'] -= atkDmg
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable