2017-03-21 4 views
-1

Was ist mit diesem Code falsch ist, bitte:Arbeiten mit Python Arrays

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 

Die Aufgabe ist es, eine Funktion zu schreiben, die ein Array A, bestehend aus N ganzen Zahlen angegeben, gibt die Summe aller zweistelligen Zahlen

+4

Das 'return' ist ** in ** der Schleife, also wird die 'for'-Schleife nur einmal ausgeführt ** ... Außerdem würden Sie' 9

+0

verwenden Ich bekomme einen Fehler:" UnboundLocalError: lokale Variable 'sum' referenziert vor Zuweisung "wenn I Entfernen Sie die return-Anweisung aus der for-Schleife. Der angenommene Bereich für Array-Elemente ist [-2,147,483,648..2,147,483,647] – user189963

+0

Was ist der Fehler ??? – chbchb55

Antwort

0

Dies wird

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 

Beachten Sie die Arbeit machen, dass es keine Notwendigkeit, zwischen positiven und negativen Zahlen zu trennen ist. Nimm einfach den absoluten Wert. Außerdem müssen Sie die Variable sumofarr am Anfang initialisieren. Es ist auch besser, nicht sum als Name für die Variable zu verwenden, da dies bereits als Name der Funktion in Python verwendet wird.

0

das Problem mit Ihrem Code ist, dass Sie nicht sum initialisieren können, haben nicht die richtige Vertiefung, überschreiben das Eingabeargument und die Prüfung, ob eine Zahl von 2 Ziffer ist komplizierter, dass es

sein muß

hier ist eine einfachere Version

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

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

oder mit der build-in Summe und ein Generator Ausdruck

Verwandte Themen