Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python字符串索引超出范围_Python_String - Fatal编程技术网

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')