您好我正在MIT 6.00 Intro to Computer Science通过练习Open课程的练习问题来学习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行遇到语法错误。我只想知道我在那里做错了什么。不要担心其他错误,我应该能够解决这些错误。我只是坚持这个。感谢。
答案 0 :(得分:2)
您在第8行和最后一行中缺少右括号。实际上,相应的左括号是不必要的,你也可以改写这一行:
return countSubStringMatchRecursive(target,key,s,x)
另外,正如@rodion在评论中指出的那样,最后elif
放错了:
,删除了在左括号之前的那个。
谈论括号:在Python中你不必将if ... elif ... else
语句的条件放在括号内,你应该删除它们。
答案 1 :(得分:1)
你在第8行有一个不匹配的paren。在最后添加另一个关闭的paren
return (countSubStringMatchRecursive(target,key,s,x))
同样的事情也适用于你的最终退货声明。
答案 2 :(得分:0)
您的括号不匹配。移除该行开头附近的(
或在末尾添加)
。
答案 3 :(得分:0)
有几个问题:
此外,您的上一个elif
后面有:
,需要
删除。即,
elif: expression:
应该是
elif expression:
你的上一个陈述也缺少一个结束语
return (countSubStringMatchRecursive(target,key,s,x)
应该是
return (countSubStringMatchRecursive(target,key,s,x))
最后,@ drewk关于看PEP 8的建议很好。我会定期回去查看。
此外,您还有许多不必要的()
..它们不会造成任何伤害,但它们不是必需的,可能会降低代码的可读性。
答案 4 :(得分:0)
return (countSubStringMatchRecursive(target,key,s,x)
您错过了结束)
。但你也不需要开放的那个; return
语句的语法为return <expr>
,因此任何有效表达式都可以直接跟随return
。任何有效的表达式仍然是一个有效的表达式,如果用括号括起来,则表示完全相同的东西,但大多数只是在不需要时添加噪音。