2017-03-21 13 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個の整数からなる配列A与えられた関数を記述することで、すべて2桁の数字

+4

'return'は** in **ループなので、' for'ループは一度だけ実行されます** ** once ** ...さらに '9

+0

エラーが発生する:UnboundLocalError:割り当て前に参照されるローカル変数 'sum' 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 
>>>