首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修复TypeError:'int‘对象不可迭代

如何修复TypeError:'int‘对象不可迭代
EN

Stack Overflow用户
提问于 2019-02-06 22:10:27
回答 1查看 539关注 0票数 1

我正在创建一个2D RPG游戏,并且希望防御属性从一个基数增加到4到8之间的随机数,因为玩家的等级每次增加1。

在前面的while循环中,int()工作得很好,但是这个没有,我不记得它是如何被修复的。

我有一个职业玩家,我有盾(自我):然后我有小盾,中盾,大盾的if语句。每个盾牌取决于玩家类是什么,例如;刺客或勇士,它们是盾if语句中的if语句。在player类if语句中,我有self.S_Defence += #,正如您在上面看到的,self.D_Stats = self.S_Defence,但是上面的代码应该更新数字并将其重置为增加的数目。

代码语言:javascript
运行
复制
        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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-06 22:18:24

编辑:self.D_Stats的定义不是一个列表,参见self.P_Stats = [self.P_HP, self.P_Attack, self.P_Speed]的定义。这是不一样的,因为(我猜)应该是:self.D_Stats = [self.S_Defence]

Python for循环需要接受一个https://pythonbasics.org/iterable/。因此,在这个for循环中,self.D_Stats必须是一个列表,或者类似的列表。

代码语言:javascript
运行
复制
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 function,它可以从0 -> <argument>-1创建一个可迭代的,或者使用额外的参数。

代码语言:javascript
运行
复制
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。无论如何,这就是我从描述中理解它的方式。

代码语言:javascript
运行
复制
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:查看您的代码,我认为如果使用数据结构来保存一些stat值,它会更整洁、更简洁和更短。武器改性剂可以大大简化:

代码语言:javascript
运行
复制
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]

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54563344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档