如何修复类型错误:“诠释”对象不是可迭代

问题描述 投票:1回答:1

我创建一个2D RPG游戏,并希望从基数国防STAT由随机数4和8之间增加为1,每次玩家的等级上升。

在前面的while循环中的int()工作正常,但这个不会,我不记得是怎么固定的。

我有一类球员,我有高清盾(个体经营):那我要是有小盾,盾中,大盾的声明。每个屏蔽取决于玩家类是什么,如;刺客或战士这是如果屏蔽层内的语句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]

什么是预期的是,如果球员水平的提高,在这种情况下,国防部的具体STAT应该由4,5,6,7或8增加

python-3.x random pydev
1个回答
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()ed什么?

基于对代码应该做些什么的描述,我觉得它需要寻找这样的事情,作为“盾牌防御”似乎没有任何关系的基础防御统计增加。我们正在不断提高,以及“使用了”经验值。所以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]

我认为这是更好地随时添加改性剂,并使用正/负调节剂。它使逻辑简单(如果你想增加攻击速度的武器是什么?)

© www.soinside.com 2019 - 2024. All rights reserved.