2016-12-07 63 views
-3
t = int(raw_input()) 
while t: 
    original_arrangement = raw_input() 
    no_of_pairs = 0 
    for i in range(0,len(original_arrangement)): 
     if original_arrangement[i]=="<" and original_arrangement[i+1]==">": 
      no_of_pairs+=1 
    print "%d" %(no_of_pairs) 
    t-=1 

在這裏,我得到IndexError:串索引超出範圍,儘管適當的縮進和範圍規定

string index out of range on line 6 

我不明白爲什麼會這樣爲range(0,len(original_arrangement))應該可以正常工作,我的指數應該從範圍0n-1

+0

此外,我發現如果輸入後1(即,對於original_arrangement)是<>它接受的字符串,如果輸入是><它給IndexError:字符串索引超出範圍 –

+0

如果'original_arrangement'是'「abcde」'和'i'從0到4,在上一次迭代中,您正在檢查''abcde「[i + 1]',這是'abcde'[5]'。長度爲5的字符串中的最大有效索引爲4.因此,您將收到索引錯誤。 –

+0

也許你可以使用類似'爲索引,在枚舉(原始排列)char' – MKesper

回答

1

字符串索引從0開始,結束於len(string)-1,因此當您執行original_arrangement[i+1]時,您將在上次迭代時離開索引。

s = "somerandomstringhere" 

s[0] 
Out[4]: 's' 

len(s) 
Out[5]: 20 

s[len(s)] 
--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-6-db5f35bae095> in <module>() 
----> 1 s[len(s)] 

IndexError: string index out of range 

s[19] 
Out[7]: 'e' 
+0

但範圍(par1,par2)函數是否將par1到par2-1的索引? –

+1

@NishitMengar是的,但是當你在範圍內(0,len(string)):',在你最後一次迭代時,你將有'len(string)-1'作爲你的'i'值。在你的for循環中,你試圖獲得'i + 1'字符串的值,這會導致錯誤。 – Lafexlos

+0

非常感謝!明白! –

0

最大的指數是len(original_arrangement)-1,所以i+1i=len(original_arrangement)-1太大。但是簡單地使用count

t = int(raw_input()) 
while t: 
    original_arrangement = raw_input() 
    no_of_pairs = original_arrangement.count("<>") 
    print no_of_pairs 
    t-=1