Python 3.x 如何修复TypeError:';int';对象是不可编辑的

Python 3.x 如何修复TypeError:';int';对象是不可编辑的,python-3.x,random,pydev,Python 3.x,Random,Pydev,我正在创建一个2D RPG游戏,希望当玩家的等级每次增加1时,基础数字的防御属性增加4到8之间的随机数 在上一个while循环中,int()可以正常工作,但这个不行,我不记得它是如何被修复的 我有一个职业玩家,我有def盾(self):然后我有小盾,中盾,大盾的if语句。每个盾牌取决于玩家等级,例如;在盾牌if语句中包含if语句的刺客或战士。在玩家类if语句中,我有self.S_Defence+=#,正如你可以看到的那样,self.D_Stats=self.S_Defence,但是上面的代码应该

我正在创建一个2D RPG游戏,希望当玩家的等级每次增加1时,基础数字的防御属性增加4到8之间的随机数

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


我有一个职业玩家,我有def盾(self):然后我有小盾,中盾,大盾的if语句。每个盾牌取决于玩家等级,例如;在盾牌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。编辑:
self.D_Stats
的定义不是一个列表,请参见定义
self.P\u统计数据=[self.P\u生命、self.P\u攻击、self.P\u速度]
。这不是“一样”的,因为(我猜)它应该是:
self.D\u Stats=[self.S\u Defence]

Python
for
循环需要采用。所以在这个
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,它从
0->-1
创建一个iterable,或者使用额外的参数

for loop in range( self.D_Stats ):
    loop += random.randint(4, 8)
for
循环的主体看起来也有点奇怪<代码>自我防御统计设置两次,因此
自我防御增强值将丢失。
self.D_Stats
是否应该是一个列表/数组,并且应该是
.append()
ed

基于代码应该做什么的描述,我认为它应该看起来像这样,因为“盾牌防御”似乎与基础防御属性没有任何关系。我们正在提高等级,并“耗尽”经验点。因此,
while()
循环迭代,减少经验点,但增加
D_统计值。这就是我从描述中理解它的方式

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值,它会更整洁、更简洁。武器修改器可以大大简化:

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]

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

编辑:
self.D_Stats
的定义不是一个列表,请参见
self.P\u统计数据=[self.P\u生命、self.P\u攻击、self.P\u速度]
。这不是“一样”的,因为(我猜)它应该是:
self.D\u Stats=[self.S\u Defence]

Python
for
循环需要采用。所以在这个
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,它从
0->-1
创建一个iterable,或者使用额外的参数

for loop in range( self.D_Stats ):
    loop += random.randint(4, 8)
for
循环的主体看起来也有点奇怪<代码>自我防御统计设置两次,因此
自我防御增强值将丢失。
self.D_Stats
是否应该是一个列表/数组,并且应该是
.append()
ed

基于代码应该做什么的描述,我认为它应该看起来像这样,因为“盾牌防御”似乎与基础防御属性没有任何关系。我们正在提高等级,并“耗尽”经验点。因此,
while()
循环迭代,减少经验点,但增加
D_统计值。这就是我从描述中理解它的方式

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值,它会更整洁、更简洁。武器修改器可以大大简化:

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]

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

for
循环之前,什么是
self.D_Stats
?我有一个职业玩家,我有def-Shield(self):然后我有小盾、中盾、大盾的if语句。每个盾牌取决于玩家等级,例如;在盾牌if语句中包含if语句的刺客或战士。在玩家类if语句中,我有self.S_defense+=#,正如你在上面看到的self.D_Stats=self.S_defense,但是上面的代码应该更新并将数字重置为一个增加的数字。你能解释一下()
loop。最后一行是更新要更新的self.D_Stats,等于前面的数字+random.randint(4,8)。例如,基本统计(30)+现在等于34的随机数(4)。最后一行只是重申self.D_Stats(防御统计)等同于self.S_防御(盾牌防御)
\u Stats
列表/阵列的目的是什么?例如,代码将玩家成员变量复制到以下列表中:
self.P\u Level\u Stats=[self.P\u Exp,self.P\u Level]
。为什么不直接使用
self.P_Exp
self.P_Level
?在
for
循环之前的
self.D_Stats
是什么?我有一个职业玩家,我有def-Shield(self):然后我有小盾、中盾、大盾的if语句。每个盾牌取决于玩家等级,例如;在盾牌if语句中包含if语句的刺客或战士。在玩家类if语句中,我有self.S_Defence+=#和你可以看到的self.D_Stats=self.S_Defence,但是上面的代码