Elif语句的语法错误

时间:2015-08-02 18:16:54

标签: python if-statement syntax-error

我正在尝试学习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 - (self.statP + self.statS))放入一个变量并在其中进行修改来修复此问题,但是在下一个elif语句中出现了相同的错误。 我确信我可以通过以类似的方式为所有语句定义条件的变量来修复整个函数,但我真的想知道为什么它不能按原样运行。

我没有看到

之间的区别
(statRoll >= (100 - (self.statP + self.statS))

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

1 个答案:

答案 0 :(得分:0)

你的括号不匹配,你在表达式中遗漏了一个结束)的parens:

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

然而,仍然不是最可读的;考虑添加功能来分解这些计算。