2017-03-21 44 views
-1

什麼是錯的代碼,請:使用Python陣列工作

from array import array 
import math 

def solution(A): 
A = array('i') 
for i in A: 
    if i > 0: 
     digits = int(math.log10(i))+1 
    elif i == 0: 
     digits = 1 
    else: 
     digits = int(math.log10(-i))+2 
     if digits == 2: 
      sum += i  
    return sum 

的任務是寫一個給定的一個數組由N個整數的函數,返回所有兩位數字的總和

+4

**循環中的'return'是**,所以'for'循環只會執行**一次** ...此外,您不會考慮'9

+0

我得到一個錯誤:「UnboundLocalError:本地變量'sum'在賦值之前引用」when I從for循環中刪除return語句。數組元素的假定範圍是[-2,147,483,648..2,147,483,647] – user189963

+0

什麼是錯誤??? – chbchb55

回答

0

這將做的工作

import math 
def solution(A): 
    #A = array('i') 
    sumofarr=0 
    for i in A: 
     if i != 0: 
      digits = int(math.log10(math.fabs(i)))+1 
      if digits == 2: 
       sumofarr += i  
    return sumofarr 
solution([12,3,45]) #output 57 

注意,沒有必要到正數和負數之間分開。只取絕對值。另外,您需要在開始時初始化變量sumofarr。另外最好不要使用sum作爲變量的名稱,因爲這已經在python中用作函數的名稱。

0

與您的代碼的問題是,你不初始化sum,沒有正確的壓痕,覆蓋輸入參數和檢查,如果一個數是2位數的更復雜,它需要是

這裏是一個更簡單的版本

def mysum(A): 
    total = 0 
    for i in A: 
     if 10 <= abs(i) < 100: # abs if you want to include negative numbers 
      total += i 
    return total 

測試

>>> test = [1, 2, 10, 80, 20, -10, -20, 500] 
>>> mysum(test) 
80 

或與內置的總和和發電機表達

>>> sum(i for i in test if 10 <= abs(i) < 100) 
80 
>>>