How do I fix TypeError: 'int' object is not iterable
How do I fix TypeError: 'int' object is not iterable
我正在创建一个 2D RPG 游戏,并希望随着玩家等级每次增加 1,基数的防御统计数据增加 4 到 8 之间的随机数。
在前面的 while 循环中,int() 工作正常,但这个没有,我不记得它是如何修复的。
我有一个 class 玩家,我有 def Shield(self): 然后我有小盾牌、中盾牌、大盾牌的 if 语句。每个盾牌取决于玩家 class 是什么,例如; Assassin 或 Warrior 里面的 if 语句都是 shield if 语句。在播放器中 classes 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
编辑:self.D_Stats
的定义不是列表,请参阅定义
self.P_Stats = [self.P_HP, self.P_Attack, self.P_Speed]
。这不起作用 "the same" 因为(我猜)它应该是: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
应该是 list/array 并被 .append()
编辑成?
根据对代码应该做什么的描述,我认为它需要看起来像这样,因为 "Shield Defence" 似乎与基础防御统计数据的增加没有任何关系。我们正在提高等级和 "using up" 经验值。所以 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]
我认为最好总是 添加 修饰符,并使用 negative/positive 修饰符。它使逻辑更简单(如果你想制作增加攻击速度的武器怎么办?)
我正在创建一个 2D RPG 游戏,并希望随着玩家等级每次增加 1,基数的防御统计数据增加 4 到 8 之间的随机数。
在前面的 while 循环中,int() 工作正常,但这个没有,我不记得它是如何修复的。
我有一个 class 玩家,我有 def Shield(self): 然后我有小盾牌、中盾牌、大盾牌的 if 语句。每个盾牌取决于玩家 class 是什么,例如; Assassin 或 Warrior 里面的 if 语句都是 shield if 语句。在播放器中 classes 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
编辑:self.D_Stats
的定义不是列表,请参阅定义
self.P_Stats = [self.P_HP, self.P_Attack, self.P_Speed]
。这不起作用 "the same" 因为(我猜)它应该是: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
应该是 list/array 并被 .append()
编辑成?
根据对代码应该做什么的描述,我认为它需要看起来像这样,因为 "Shield Defence" 似乎与基础防御统计数据的增加没有任何关系。我们正在提高等级和 "using up" 经验值。所以 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]
我认为最好总是 添加 修饰符,并使用 negative/positive 修饰符。它使逻辑更简单(如果你想制作增加攻击速度的武器怎么办?)