Elif语句语法错误

2024-04-24 07:36:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力学习Python,我正在制作一个文本rpg作为练习。下面的函数是根据百分比随机分配npc统计数据的,每个班级的数据都不一样。你知道吗

def mob_Stat_Assign(self, level): 
    statCount = (3 * self.level)
    while(statCount > 0):
        statRoll = random.randrange(1, 101)            
        if(statRoll >= (100 - self.statS)):
            self.strength += 1
        elif((statRoll >= (100 - (self.statP + self.statS)) and (statRoll < (100 - self.statS))):
            self.perception += 1
        elif((statRoll >= (100 - (self.statE + self.statP + self.statS) and (statRoll <(100 - (self.statP + self.statS)))):
            self.endurance += 1
        elif((statRoll >= (100 - (self.statC + self.statE + self.statP + self.statS)) and (statRoll < (100 - (self.statE + self.statP + self.statS)))):
            self.charisma += 1
        elif((statRoll >= (100 - (self.statI + self.statC + self.statE + self.statP + self.statS)) and (statRoll < (100 - (self.statC + self.statE + self.statP + self.statS)))):
            self.intelligence += 1
        elif((statRoll >= (100 - (self.statA + self.statI + self.statC + self.statE + self.statP + self.statS)) and (statRoll < (100 - (self.statI + self.statC + self.statE + self.statP + self.statS))
            self.agility += 1 
        else:
            self.luck += 1
        statCount -= 1

当我试图编译时,我得到一个错误,指出无效语法,并突出显示第一个elif语句末尾的冒号。你知道吗

我把(100-(自我状态+ 自我统计))在变量中,并将其子对象化,但在下一个elif语句中出现了相同的错误。 我确信我可以通过为所有语句以类似的方式为条件定义变量来修复整个函数,但是我真的很想知道为什么这不能按原样工作。你知道吗

我看不出

(statRoll >= (100 - (self.statP + self.statS))

以及

x = (100 - (self.statP + self.statS))
(statRoll >= x)

Tags: and函数文本selfstats错误语句level
1条回答
网友
1楼 · 发布于 2024-04-24 07:36:48

括号不匹配,表达式中缺少一个)右括号:

elif(
    (
        statRoll >= (
            100 - (self.statP + self.statS)
        ) and (
            statRoll < (100 - self.statS)
        # ?
    )
):

你不需要一半的括号;如果你在elif和表达式之间加一个空格,你就不需要外层的一对了。下一步,您可以在和中剪切更多的括号(a - b + c不容易混淆)。如果事实上,您不需要任何,但是在算法周围放置一些可能有助于提高可读性:

elif statRoll >= (100 - self.statP + self.statS) and statRoll < (100 - self.statS):

将此应用于所有测试,再加上一点PEP-8重新安排,可以得到:

if statRoll >= (100 - self.statS):
    self.strength += 1
elif (statRoll >= (100 - self.statP + self.statS) and
        statRoll < (100 - self.statS)):
    self.perception += 1
elif (statRoll >= (100 - self.statE + self.statP + self.statS) and 
        statRoll < (100 - self.statP + self.statS)):
    self.endurance += 1
elif (statRoll >= (100 - self.statC + self.statE + self.statP + self.statS) and
        statRoll < (100 - self.statE + self.statP + self.statS)):
    self.charisma += 1
elif (statRoll >= (100 - self.statI + self.statC + self.statE + 
                   self.statP + self.statS) and
        statRoll < (100 - self.statC + self.statE + self.statP + self.statS)):
    self.intelligence += 1
elif (statRoll >= (100 - self.statA + self.statI + self.statC + 
                   self.statE + self.statP + self.statS) and
        statRoll < (100 - self.statI + self.statC + self.statE +
                    self.statP + self.statS)):
    self.agility += 1 
else:
    self.luck += 1

但是仍然不是最可读的;考虑添加函数来分解这些计算。你知道吗

相关问题 更多 >