如何修复TypeError:“ int”对象不可迭代

时间:2019-02-06 22:10:28

标签: python-3.x random pydev

我正在创建一个2D RPG游戏,并希望随着玩家等级每次增加1,基本数的防御统计值将增加4到8之间的随机数。

在上一个while循环中,int()可以正常工作,但是这一点不能,我不记得它是如何修复的。

我有一个拥有Player Shield(自身)的职业牌手:那么我有if陈述,包括小盾,中盾,大盾。每个盾牌都取决于玩家等级,例如;刺客或战士是if语句中的if语句。在播放器类中,如果我有self.S_Defence + =#语句,并且可以看到self.D_Stats = self.S_Defence,但是上面的代码应该将数字更新并将其重置为增加的数字

        self.S_Exp = 600
        while self.S_Exp >= 0 + (self.S_Level * 100):
            self.S_Level += 1
            self.S_Exp -= ((self.S_Level - 1) * 250)
            self.S_Level_Stats = [self.S_Exp, self.S_Level]

            self.Increased_Defence = []
            for loop in self.D_Stats:
                loop += random.randint(4, 8)
                self.Increased_Defence.append(loop)
                self.D_Stats = self.Increased_Defence
                self.D_Stats = [self.S_Defence]

可以预期的是,如果玩家等级增加,则在这种情况下,防守的具体数据应提高4,5、6、7或8

1 个答案:

答案 0 :(得分:0)

编辑:self.D_Stats的定义不是列表,请参见 self.P_Stats = [self.P_HP, self.P_Attack, self.P_Speed]。这不能“相同”地工作,因为(我猜)它应该是:self.D_Stats = [self.S_Defence]

Python for循环需要使用iterable。因此,在此for循环中,self.D_Stats必须是列表或类似列表。

for loop in self.D_Stats:
    loop += random.randint(4, 8)
    self.Increased_Defence.append(loop)
    self.D_Stats = self.Increased_Defence
    self.D_Stats = self.S_Defence

如果self.D_Stats是整数,则使用python range() function,它会根据0 -> <argument>-1或其他参数创建一个可迭代对象。

for loop in range( self.D_Stats ):
    loop += random.randint(4, 8)

for循环的主体看起来也有些奇怪。 self.D_Stats设置了两次,因此self.Increased_Defence的值丢失了。 self.D_Stats应该是一个列表/数组,并且应该.append()被绑定到吗?

基于对代码应该执行的操作的描述,我认为它应该看起来像这样,因为“盾牌防御”似乎与基本防御状态的增加没有任何关系。我们正在提高水平,并“消耗”经验值。因此,while()循环迭代,减少了经验值,但增加了D_Stats。无论如何,这就是我从描述中理解的方式。

while self.S_Exp >= 0 + (self.S_Level * 100):
    self.S_Level += 1
    self.S_Exp -= ((self.S_Level - 1) * 250)
    self.S_Level_Stats = [self.S_Exp, self.S_Level]

    points_increase = random.randint(4, 8)
    self.Increased_Defence.append(points_increase)
    self.D_Stats += points_increase

EDIT2:查看您的代码,如果您使用数据结构来保存某些统计值,我认为它会更整洁,更简洁,更短。武器修改器可以大大简化:

def Weapon(self, Weapon):
    weapon_mods = { "Dagger":[6,0], "Knife":[5,0], "Sword":[7,0], "Axe":[7,-5] } #etc
    if ( Weapon in weapon_mods ):
        attack_mod, speed_mod = weapon_mods[ Weapon ]
        self.P_Attack += attack_mod
        self.P_Speed  += speed_mod
        self.P_Stats = [self.P_HP, self.P_Attack, self.P_Speed]

我认为最好总是 add 修饰符,并使用负/正修饰符。它使逻辑更简单(如果您想制造能够提高攻击速度的武器呢?)