def isIn(char, aStr):
'''
char: a single character
aStr: an alphabetized string
returns: True if char is in aStr; False otherwise
'''
# Your code here
if aStr == "":
return False;
elif len(aStr) == 1 and aStr!= char:
return False;
elif len(aStr) == 1 and aStr == char:
return True;
elif aStr[(len(aStr)//2)] == char:
return True;
else:
# if char < aStr[(len(aStr)//2)]:
return isIn(char, aStr[:(len(aStr)//2)])
return isIn(char, aStr[(len(aStr)//2):])
print(isIn("s", "frostbite")) 发布于 2018-03-18 08:10:14
您的代码几乎是正确的,但是您有一个问题:
else:
# if char < aStr[(len(aStr)//2)]:
return isIn(char, aStr[:(len(aStr)//2)])
return isIn(char, aStr[(len(aStr)//2):]) 第一个return将退出函数,返回True或False,因此第二个将永远不会被调用。
如果在函数开始时添加一个print(char, aStr),或者在调试器中使用断点(实际上应该至少尝试这两个中的一个),就会发现这正是问题所在。使用s、i和e,第二个isIn(char, aStr[(len(aStr)//2):])将返回True,但您永远不会调用它。
S,如果其中一个返回True,则返回False,如果两者都返回False,则返回False。要做到这一点,最简单的方法是使用or,与使用英语的方式完全相同:
else:
# if char < aStr[(len(aStr)//2)]:
return isIn(char, aStr[:(len(aStr)//2)]) or isIn(char, aStr[(len(aStr)//2):])更改后,您的函数现在正确地找到了'frostbite'中的每个字母。
https://stackoverflow.com/questions/49345744
复制相似问题