这是我试图解决的问题:
我们可以使用二分搜索的概念来确定一个角色 只要字符串按字母顺序排序,就在字符串中。
首先,针对角色测试字符串的中间字符 你正在寻找(“测试角色”)。如果它们是相同的,我们 完成了 - 我们找到了我们正在寻找的角色!
如果它们不相同,请检查测试字符是否“小于” 中间人物。如果是这样,我们只需考虑下半部分 字符串;否则,我们只考虑字符串的上半部分。 (请注意,您可以使用Python的< function来比较字符。)
实现实现上述功能的函数isIn(char,aStr) 递归地想要测试char是否在aStr中。 char将是一个单一的 character和aStr将是一个按字母顺序排列的字符串。该 function应该返回一个布尔值。
在设计功能时,请仔细考虑基础 案件应该是。
这是我试图做的代码。我遇到了错误,但是我在理解如何解决这个问题的基础知识方面落后了。
def isIn(char, aStr):
'''
char: a single character
aStr: an alphabetized string
returns: True if char is in aStr; False otherwise
'''
# Your code here
middle_char = len(aStr)/2
if char == middle_char:
True
elif char == "" or char == 1:
False
elif char < aStr[:middle_char]:
return isIn(char,aStr(middle_char)
else:
return isIn(char, aStr(middle_char))
答案 0 :(得分:2)
你落后的一个原因是,当你还没有掌握写简单的陈述时,你正试图写一个递归函数。这里有大约10行活动代码,包括至少4个语法错误和2个语义错误。
退出并使用增量编程。写几行代码,测试它们,然后不要前进,直到你确定它们按预期工作。插入诊断print
语句以便随时检查值。例如,从强制馈送值开始,没有实际的函数调用,如下所示:
# def isIn(char, aStr):
'''
char: a single character
aStr: an alphabetized string
returns: True if char is in aStr; False otherwise
'''
char = 'q'
aStr = "abcdefghijklmnopqrstuvwxyz"
print "parameters:", char, aStr
middle_char = len(aStr)/2
print len(aStr), middle_char
print "if", char, "==", middle_char, ":"
这为您提供了输出
parameters: q abcdefghijklmnopqrstuvwxyz
26 13
if q == 13 :
显然,一个字符不将等于整数13。
在你继续前进之前解决这个问题。 然后您可以尝试实际编写第一个if
语句。
看看它是如何工作的?
答案 1 :(得分:0)
middle_char = len(aStr)/2
if char == middle_char:
中间字符是长度的一半(即整数值) 它不会等于你的char值。
middle_index = len(aStr)//2
middle_char = aStr[middle_index]
实际得到中间的char值。注意整数除法(//
)。我们想确保结果索引是一个整数。
elif char == "" or char == 1:
你已经测试过(很好地试过)剩下一个字符的情况,你不需要专门处理它。您还需要在尝试提取值之前测试空字符串。
elif char < aStr[:middle_char]:
这里你实际上尝试并索引到字符串。不幸的是,你实际上正在做的是切片,看看字符串的中间字符(中间字符向前)是否等于你的char
。如果你正在查看一个字符串,这只会匹配。例如isin('d', 'd')
return isIn(char,aStr(middle_char)
else:
return isIn(char, aStr(middle_char))
- 第一次返回)
时缺少括号
- aStr()
不是函数。您需要[
和]
- 你试图只传递一个char进入递归调用。您需要对字符串进行切片并将生成的子字符串传递给递归字符串
- 这两个(忽略缺少的括号)都是相同的调用。你需要一个用aStr
的前半部分和下半部分的一个来打电话。
你的任务是考虑基本情况。他们是(我列出他们因为你几乎让他们看到了):
- 空字符串(返回False
)
- mid char = search char(return True
)
- 中间字符&gt;搜索字符(搜索左子字符串)
- 中间字符&lt;搜索字符(搜索右子字符串)
请注意,不需要显式检查长度为1的非匹配字符串,因为这会将空字符串传递给下一个调用
你要考虑的事情:为什么需要对字符串进行排序?如果字符串没有排序会发生什么?
工作实施:
def isin (char, str):
if not str:
return False
mid_index = len(str)/2
mid_char = str[mid_index]
return True if mid_char == char else isin(char, str[:mid_index] if mid_char > char else str[mid_index+1:])
不要只使用此代码。此代码仅供您参考,因此您可以了解它正在做什么,并在您理解后重写代码。如果您不理解它,那么复制代码是没有意义的。它将来不会帮助你。
你似乎对你需要做什么有了一般性的想法(我猜你已经在课堂上讨论了这个问题),但是在 how (语法等)方面缺乏知识。
我建议您在自己的时间内完成the python tutorial,并完成练习。它将依次向您介绍该语言的功能,这将对您有所帮助。
祝你好运!