Elif 语句的语法错误

Syntax error with Elif Statements

我正在努力学习 Python,并且我正在制作文字角色扮演游戏作为练习。下面的函数旨在根据百分比随机分配 npc 统计数据,范围从 class 到 class。

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 -(self.statP + self.statS)) 放入一个变量并将其代入来解决这个问题,但是下一个 elif 出现了同样的错误陈述。 我确信我可以通过以类似的方式为所有语句定义条件变量来修复整个函数,但我真的很想知道为什么它不能按原样工作。

我看不出有什么区别

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

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

你的括号不匹配,你在表达式中缺少 ) 括号:

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

你不需要一半的括号;如果在 elif 和表达式之间放置 space,则不需要外部对。接下来,您可以在总和中减少更多的括号(a - b + c 不会轻易混淆)。事实上,您不需要 any 但在算术周围放置一些可能有助于提高可读性:

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

但是仍然不是最易读的;考虑添加函数来分解这些计算。