python字符串索引超出范围
嗯。因此,我可能是这个星球上最愚蠢的人,但有人能告诉我为什么这会给我一个错误(该程序用于使用对分搜索在按字母顺序排列的字符串中搜索字符):python字符串索引超出范围,python,string,Python,String,嗯。因此,我可能是这个星球上最愚蠢的人,但有人能告诉我为什么这会给我一个错误(该程序用于使用对分搜索在按字母顺序排列的字符串中搜索字符): def isInIter(字符、应用程序代码): 打印('char:'+char) 打印('aStr:'+aStr) isin=False 而(len(aStr)>0): 如果aStr[len(aStr)/2]==字符: isin=True 打破 其他: 如果aStr[len(aStr)/2]>字符: 应科院=应科院[0:len(应科院)/2] 持续 如果a
def isInIter(字符、应用程序代码):
打印('char:'+char)
打印('aStr:'+aStr)
isin=False
而(len(aStr)>0):
如果aStr[len(aStr)/2]==字符:
isin=True
打破
其他:
如果aStr[len(aStr)/2]>字符:
应科院=应科院[0:len(应科院)/2]
持续
如果aStr[len(aStr)/2]
错误:
isInIter('d','cddfggjkkqtwyy')
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-66-1de0eb4793fd> in <module>()
----> 1 isInIter('d','cddfggjkkqtwyy')
/home/user/Study/Ex/lec5_BisectionSearch.py in isInIter(char, aStr)
5 isin = False
6 while(len(aStr) > 0):
----> 7 if aStr[len(aStr)/2] == char:
8 isin = True
9 break
IndexError: string index out of range
isInIter('d','cddfggjkkqtwyy'))
---------------------------------------------------------------------------
索引器回溯(最后一次最近调用)
在()
---->1个isInIter('d','cddfggjkkqtwyy')
/isInIter中的home/user/Study/Ex/lec5_BisectionSearch.py(char,aStr)
5 isin=假
6而(len(aStr)>0):
---->7如果aStr[len(aStr)/2]==字符:
8 isin=真
9休息
索引器错误:字符串索引超出范围
但这是意料之中的:
char = raw_input('char :')
aStr = raw_input('aStr :')
isin = False
while(len(aStr) > 0):
if aStr[len(aStr)/2] == char:
isin = True
break
else:
if aStr[len(aStr)/2] > char:
aStr = aStr[0 : len(aStr)/2]
continue
if aStr[len(aStr)/2] < char:
aStr = aStr[len(aStr)/2 + 1 :]
continue
print isin
char=raw_输入('char:'))
aStr=原始输入(“aStr:”)
isin=False
而(len(aStr)>0):
如果aStr[len(aStr)/2]==字符:
isin=True
打破
其他:
如果aStr[len(aStr)/2]>字符:
应科院=应科院[0:len(应科院)/2]
持续
如果aStr[len(aStr)/2]
我感谢你的帮助。你为什么不使用?你可以打赌它有一个优化的实现
In [1]: s = "cddfggjkkqtwyy"
In [2]: s.index("d")
Out[2]: 1
In [3]: s.index("d") > -1
Out[3]: True
当python执行while循环时,它会等到循环结束时检查退出条件。如果压缩函数,可能会更容易:
def isItIn(streen,carroter):
while len(streen)>0:
if streen[len(streen)/2]==carroter:
return True
if streen[len(streen)/2]>carroter:
streen=streen[0:len(streen)/2]
if len(streen)==0:return False
if streen[len(streen)/2]<carroter:
streen=streen[len(streen)/2+1:]
print isItIn('asdilk','a')
print isItIn('kdsoe','a')
def isItIn(streen,carroter):
而len(streen)>0:
如果streen[len(streen)/2]==carroter:
返回真值
如果streen[len(streen)/2]>carroter:
streen=streen[0:len(streen)/2]
如果len(streen)==0:返回False
如果streen[len(streen)/2],您可以直接搜索,而无需循环搜索。Python提供了“in”关键字,帮助您搜索项目。您可以在一条语句中使用“if char in string”,它告诉您char是否存在于字符串中..isInIter('d','cddfggjkkqtwyy')不会为我提供错误信息吗?工作正常吗?这看起来是一种非常糟糕的搜索字符的方法,但您的代码在我的机器上运行正常。您返回的值位于错误的位置。请再次检查您的代码,并确保行缩进正确!谢谢你的回复,但这是我正在学习的MOOC课程的家庭作业问题。要求是使用对分搜索来实现,而不是任何其他方法。
def isItIn(streen,carroter):
while len(streen)>0:
if streen[len(streen)/2]==carroter:
return True
if streen[len(streen)/2]>carroter:
streen=streen[0:len(streen)/2]
if len(streen)==0:return False
if streen[len(streen)/2]<carroter:
streen=streen[len(streen)/2+1:]
print isItIn('asdilk','a')
print isItIn('kdsoe','a')