2013-01-19 51 views
2

我可以告訴我爲什麼下面的代碼生成這樣的結果?奇怪的Python代碼結果

def weird(s): 
    print s 

    for ii in range(len(s)): 
     for jj in range(ii, len(s)+1): 
      print ii, jj 

    return 

if __name__=="__main__": 
    ss="acaacb" 
    weird(ss) 

結果:

acaacb 
0 0 
0 1 
0 2 
0 3 
0 4 
0 5 
0 6 

如若II迭代的通過值爲0至5?

+1

python中的縮進問題;你確定你把那個回報放在你想要的地方嗎? –

回答

2

看着你的原始代碼粘貼,你的縮進看起來有點奇怪,可能是由於混合了製表符和空格(這很難確定,因爲有時候空白不會被粘貼到SO中, 。看看每一行:

'\n' 
'\n' 
' def weird(s):\n' 
'  print s\n' 
'  \n' 
'  for ii in range(len(s)):\n' 
'   for jj in range(ii, len(s)+1):\n' 
'    print ii, jj\n' 
'    \n' 
'  return\n' 
'\n' 
' if __name__=="__main__":\n' 
'\t ss="acaacb"\n' 
'\t weird(ss)\n' 

空白問題可能會導致奇怪的錯誤,其中代碼實際上不像您認爲的那樣縮進。您可以通過運行使用

python -tt your_program_name.py 

程序測試這個理論,然後切換到使用四個空格而不是製表符。

+0

謝謝!這正是我的問題。我有一些問題:(1)如何看SO(2)中的原始代碼如何避免混合空白和製表符(3)混合的潛在原因是什麼?我首先使用notepad ++編寫代碼,然後在出錯時使用eclipse進行調試 – sma

13

不,您在外部for循環內部放置了return語句。在第一次迭代結束時,您退出該函數。這就是return聲明的作用;無論當前正在執行什麼循環結構,它都會結束函數。

刪除return語句,循環將繼續一直運行到i = 5

+0

這是一個錯字,返回語句在外部循環之外。結果保持不變,很奇怪。 – sma

+0

@pegausbupt:正如DSM指出的那樣,這意味着您有混合的選項卡和空格。配置您的編輯器只能使用空格進行縮進。 –