2016-08-29 25 views
0

這個節目想找到1000張素數,並將它們打包到一個列表功能保持做同樣的事情

下面的代碼:

num = raw_input('enter a starting point') 
primes = [2] 
num = int(num) 
def prime_count(num): 

    if num % 2 == 0: #supposed to check if the number is divided by 2 evenly 
     num = num +1 #if it is, then add 1 to that number and check again 
     return num 


    elif num % num == 0: 
     primes.append(num) #supposed to add that prime to a list 
     num = num + 1 #add 1 and check again 
     return num 


while len(primes) <= 999: 
    prime_count(num) 

那麼,當我運行它實際發生: 它要求我的raw_input然後去根據不同的東西是什麼我選擇爲輸入:

  • 如果讓我選擇一個素數,假設3,它運行,並增加了3秒999的列表,而不是將它添加只有一個的T IME和正在進行嘗試4
  • 如果讓我選擇一個非黃金,假設4,它只是打破了,在那之後我甚至不能打印出清單

我到底做錯了什麼?

更新: 我固定它,但是當我有了這個,我發現了一個錯誤運行(類型錯誤:不支持的操作數類型爲%:「NoneType」和「INT」)

number = raw_input('enter a starting point') 
primes = [2] 
number = int(number) 
def prime_count(x): 

    if x % 2 == 0: #supposed to check if the number is divided by 2 evenly 
     number = x +1 #if it is, then add 1 to that number and check again 
     return number 



    else: 
     for i in range(3, x-1): 
      if x % i == 0: 
       primes.append(x) #supposed to add that prime to a list 
       number = x + 1 #add 1 and check again 
       return number 


while len(primes) <= 999: 
    number = prime_count(number) 
+0

你似乎不理解局部變量和全局變量之間的區別,或者函數參數和返回值的工作方式。爲了幫助,我建議你重命名'prime_count'之外的所有變量。 –

+0

您需要了解Python中的範圍規則。 'num'被視爲'prime_count'中的局部變量。無論如何,這裏用戶輸入的意義何在? –

回答

0

你永遠不會使用prime_count的返回值。試試這個:

while len(primes) <= 999: 
    num = prime_count(num) 

你已經使用的名稱num作爲兩個prime_count內部參數(也是一個局部變量)設置混亂你的自我了,也可以作爲全局變量。即使它們具有相同的名稱,由於Python對變量範圍的規則,它們也是不同的變量。

此外,prime_count(可能無意)利用了primes是一個全局變量的事實。由於您不是分配給它,而只是調用一個方法(追加),代碼將工作,而不使用global關鍵字。

但是,您的算法甚至不正確。 if num % num == 0「如果一個數除以它自己的餘數爲零」這將總是爲真。這個程序會找到很多不是素數的「素數」。

真正的Python程序在全球範圍內做的很少;你目前的代碼只是要求混淆。我建議你先從這個模板開始,然後再讀一下現有的Python代碼。

def add_three(a_param): 
    a_local_var = 3  # This is *different* than the one in main! 
          # Changes to this variable will *not* affect 
          # identically-named variables in other functions 

    return a_local_var + a_param 

def main(): 
    a_local_var = 2 

    result = add_three(a_local_var) 

    print result # prints 5 

if __name__ == '__main__': 
    main() 
+0

我認爲錯誤是在問題下面的評論中已經提到的,而不是你在這裏指出的 –

+0

我寫了其中一條評論。他的變量名稱會發生​​衝突,但代碼應該起作用。 –

+0

我沒有看到這個代碼應該如何工作沒有可變的衝突。如果沒有變量衝突,程序只會測試num%2 == 0和num%n == 0.這不是一個primetest可以工作的方式。 – Phidelux

相關問題