簡體   English   中英

python字符串索引超出范圍

[英]python string index out of range

好。 所以我可能是這個星球上最愚蠢的人,但是有人可以告訴我為什么這會給我一個錯誤(該程序用於使用二等分搜索來搜索按字母順序排列的字符串中的字符):

def isInIter(char, aStr):
  print('char :'+char)
  print('aStr :'+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
return isin

錯誤:

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

但這按預期工作:

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

我感謝您的幫助。

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

為什么不使用str.index(sub\\[, start\\[, end\\]\\]) 您可以打賭它具有優化的實現。

In [1]: s = "cddfggjkkqtwyy"

In [2]: s.index("d")
Out[2]: 1

In [3]: s.index("d") > -1
Out[3]: True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM