【问题标题】:Learning Python else syntax error学习 Python else 语法错误
【发布时间】:2012-06-11 01:04:30
【问题描述】:

您好,我正在通过MIT 6.00 Intro to Computer Science 的公开课程练习题来学习 Python。

我正在尝试做练习题 1 第 2 部分创建一个递归函数来计算目标中键的实例。到目前为止我的代码...

from string import *
def countSubStringMatchRecursive (target, key,x,s):
   if (find(target,key)==find(target,key,s)) and (find(target,key)==find(target,key,(find(target,key)))):#if first and last
      return (1)
   elif (find(target,key)==find(target,key,s))and (find(target,key)!=find(target,key,(find(target,key)))):#if first but not last
      x=1
      s= find(target,key)
      return (countSubStringMatchRecursive(target,key,s,x)
   elif (find(target,key,s))==-1 and (find(target,key)!=find(target,key,s)):#if last but not first
      return (x+1)
   elif:(find(target,key,s))!=-1 and (find(target,key)!=find(target,key,s)):#if not last and not first
      x=x+1
      s= find(target,key,s)
      return (countSubStringMatchRecursive(target,key,s,x)

我在第 8 行遇到语法错误。我只想知道我在那里做错了什么。不要担心其他错误,我应该能够解决这些错误。我只是坚持这一点。谢谢。

【问题讨论】:

  • 您的最后一个elif 在表达式前有一个冒号。也可能是个问题。
  • 如果您遵循PEP 8 中的指南,其他人会发现您的 Python 代码更容易阅读。你也会发现它更容易阅读!!!

标签: python syntax if-statement python-2.7


【解决方案1】:

您在第 8 行和最后一行中缺少右括号。实际上,相应的左括号是不必要的,您不妨将这些行重写为:

return countSubStringMatchRecursive(target,key,s,x)

此外,正如 cmets 中的@rodion 所指出的,最后一个elif 有一个错位的:,请删除左括号之前的那个。

关于括号:在 Python 中,您不必将 if ... elif ... else 语句的条件放在括号内,您应该删除它们。

【讨论】:

  • 感谢您的评论,非常有帮助。从那以后,我已经解决了问题,并且发现了更多问题,并且工作正常。 :)
【解决方案2】:

您的括号不匹配。删除行首附近的( 或在行尾添加)

【讨论】:

  • 感谢您的评论,非常有帮助。从那以后,我已经解决了问题,并且发现了更多问题,并且工作正常。 :)
【解决方案3】:

第 8 行有一个不匹配的括号。在末尾添加另一个关闭括号

return (countSubStringMatchRecursive(target,key,s,x))

同样的事情也适用于您的最终退货声明。

【讨论】:

  • 感谢您的评论,非常有帮助。从那以后,我已经解决了问题,并且发现了更多问题,并且工作正常。 :)
【解决方案4】:

有几个问题:

  1. 您在第 8 行缺少一个结束括号
  2. 函数体需要缩进。 (更新:已修复)
  3. 另外,您的最后一个 elif 后面有一个 :,这需要 删除。即,

    elif: expression:
    

    应该是

    elif expression:
    
  4. 你的最后一个语句也缺少一个结束括号

    return (countSubStringMatchRecursive(target,key,s,x)
    

    应该是

    return (countSubStringMatchRecursive(target,key,s,x))
    

最后@drewk 的建议是看看PEP 8 是一个很好的建议。我会定期返回并亲自查看。

此外,您还有许多不必要的 ()s .. 它们不会造成任何伤害,但它们不是必需的,并且可能会降低代码的可读性。

【讨论】:

  • 感谢您的评论,非常有帮助。从那以后,我已经解决了问题,并且发现了更多问题,并且工作正常。 :)
【解决方案5】:
return (countSubStringMatchRecursive(target,key,s,x)

您缺少一个结束)。但是你也不需要开场白。 return 语句的语法是return <expr>,所以任何有效的表达式都可以直接跟在return 后面。任何有效的表达式仍然是有效的表达式,如果你用括号括起来,它的含义完全相同,但主要是在不需要时增加噪音。

【讨论】:

  • 感谢您的评论,非常有帮助。从那以后,我已经解决了问题,并且发现了更多问题,并且工作正常。 :)
猜你喜欢
  • 2013-07-16
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多