我目前正在edx学习编程课程,我的指导如下: 使用对分搜索的思想,编写一个递归算法,检查字符串中是否包含字符,只要字符串是按字母顺序排列的。 我的代码(Python2.7)在这里:
def isitIn(char, aStr):
m = aStr[len(aStr) // 2]
if aStr == '' or len(aStr) == 1 or char == m:
return False
else:
if char < m:
return isitIn(char, aStr[:-1])
elif char > m:
return isitIn(char, aStr[1:])
return isitIn(char, aStr)
我的解释: 我首先从找到字符串的中间字符开始。如果它等于字符,则返回False。如果它不等于字符,则继续检查字符是否低于中间字符,然后使用递归函数创建堆栈并最终返回布尔值True。现在我使用了-1和1索引,因为我不想包含中间字符。
我宁愿得到一些提示,而不是一个解决方案,因为我仍在努力寻找答案,但另一个视角永远不会伤害到我。谢谢!
Error message:
Test: isIn('a', '')
Your output:
Traceback (most recent call last):
File "submission.py", line 10, in isIn
m = aStr[len(aStr) // 2]
IndexError: string index out of range
Correct output:
False
总的来说,你的代码看起来不错。但我会仔细看看你的第一个if陈述。特别是,您要检查字符是否等于中间字符。如果您的角色等于中间角色,您希望返回什么?
另外,你需要确保你的算法可以到达所有的路径。在什么条件下,您的函数将返回True?
这同样有效。也略短:
函数是不返回
True
。我认为它应该在char == m
时返回True
,这样您就可以从if-clause
(即返回False
)中删除它并将其放入另一个if
:另外,您正在调用未定义的
isIn
方法。我想你想递归地调用isitIn
。在比较了
char < m
和char > m
之后,应该将字符串“对分”,因此不要执行return isitIn(char, aStr[:-1])
或return isIn(char, aStr[1:])
,而是传递(在递归调用中)字符串的“一半”。编辑:以防万一,我尝试的代码是:
相关问题 更多 >
编程相关推荐