2016-10-07 112 views
0

我不確定我的代碼出了什麼問題。我正在嘗試編寫一個程序來查找數字的主要因式分解,並遍歷數字。我的代碼是縮進錯誤 - python

import math 
import time 

def primfacfind(n1,n2): 
    while n1 < n2: 
     n = n1 
     primfac=[] 

     time_start = time.clock() 

     def primes(n): 
      sieve = [True] * n 
      for i in xrange(3,int(n**0.5)+1,2): 
       if sieve[i]: 
        sieve[i*i::2*i]=[False]*((n-i*i-1)/(2*i)+1) 
      return [2] + [i for i in xrange(3,n,2) if sieve[i]] 

     print primes(n) 

     def factfind(lsp,n): #finds factors of n among primes 
      for i in lsp: 
       if n%i==0: 
        primfac.append(i) 
       else: 
        i+=1 

     factfind(primes(n),n) 
     print primfac 

     def simplify(lsp): 
      for i in lsp: 
       if lsp.count(i) > 1: 
        i+=1 #should simplify to 3^2 instead of 3,3; unfinished 

     time_end = time.clock() 
     time_elapsed = time_end - time_start 
     print time_elapsed 

     n1+=1 

print primfacfind(6,15) 

給出的錯誤是

Traceback (most recent call last): 
    File "python", line 15 
    sieve = [True] * n 
     ^
IndentationError: expected an indented block 

我已經在我的壓痕檢查一遍又一遍,而且我不確定,什麼是錯的。當程序不在整體函數和while循環中時,該程序起作用,但我不明白這應該如何改變。如果答案代碼儘可能簡單明白,我會很感激,因爲我對Python有點新鮮。

任何幫助這個錯誤,將不勝感激。謝謝!

+5

你很可能混合了空格和製表符。獲得一個文本編輯器,可以修復 –

+0

@MosesKoledoye,我正在使用repl.it,一個在線編譯器,並且我一直在點擊Tab鍵... – heather

+0

某處可能存在錯誤的空間。很難說。有沒有辦法在你的電腦上使用python?文本編輯器是蜜蜂膝蓋。另外,雖然有時候您想要在其他函數中定義函數,但在這種情況下,它們應該在外部定義。這也可能有助於縮進問題。 –

回答

2

下載類似Sublime的東西並突出顯示代碼。空格將是點,標籤將是破折號。

-1

我把這段代碼放到我的編輯器中,編譯得很好。所以我去了第12行,在那裏你有sieve = [True] * n,並擺脫了縮進,所以它的縮進與def primes(n):以上的行相同,我能夠重新創建你的錯誤。

也許嘗試添加比您想象的更多的縮進。如果你想要一個不同的編輯器,你也可以試試Enthought Canopy,這是免費的。

+0

我會建議反對Enthought Canopy,除非你真的需要做統計數據分析類型的東西,因爲它是相當重的。這看起來更簡介 - python的東西。一個文本編輯器和命令行就是你所需要的,對於初學者來說,無論如何都能學習這些東西。 –