使用Python数组

使用Python数组,python,arrays,python-2.7,Python,Arrays,Python 2.7,此代码有什么问题,请: 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

此代码有什么问题,请:

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,返回所有两位数的总和,这将完成此任务

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中已经被用作函数名。

代码的问题是没有初始化
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
或使用内置和和和生成器表达式

>>> sum( i for i in test if 10 <= abs(i) < 100 )
80
>>> 
>>总和(如果10>>

<代码> <代码>返回是在循环中,所以< <代码> > 循环只执行一次。此外,您不认为<代码> 9 < i<100 >代码>是一个更优雅的测试吗?它是一个没有多角的情况下的一个内衬。如果要考虑负数,也可以使用<代码> 9 ABS(i)<100
…当我从for循环中删除return语句时,我收到一个错误:“UnboundLocalError:赋值前引用的局部变量'sum'。数组元素的假定范围为[-2147483648..2147483647]错误是什么???您从未定义sum,您只是尝试添加到它。在函数体中,您需要一个
sum=0
它的第一个错误是第5行中的缩进。
>>> sum( i for i in test if 10 <= abs(i) < 100 )
80
>>>