2016-06-21 6 views
0

Der Zweck ist Schreiben einer Funktion namens digit_sum, die eine positive Ganzzahl n als Eingabe nimmt und die Summe aller Ziffern dieser Zahl zurückgibt.codecademy Übung macht den Meister digit_sum

Zum Beispiel: digit_sum (1234) sollte 10 zurück, die 1 + 2 + 3 + 4.

https://www.codecademy.com/zh/courses/python-intermediate-en-rCQKw/0/4?curriculum_id=4f89dab3d788890003000096#

(angenommen, dass die Zahl, die Sie immer positiv angegeben werden.)

Ihre Funktion schlägt auf digit_sum (1000) fehl. Es gibt 12 zurück, wenn es 1 zurückgeben sollte.

Wenn ich die dig = [] oberen auf die def digit_sum, der Kurs aufgetreten Alarm, dass "digit_sum (1000) Ergebnis ist 12 statt 1", aber ich habe dieses Programm ausgeführt auf meinem lokalen Notizblock + Powershell, ok, das Ergebnis ist richtig.

danach legte ich die dig = [] in die erste Zeile der Funktion, dann funktionierte es normal.

ich nicht 2 Punkte bekommen haben ....

  1. Was ist der Unterschied zwischen ist "dig = []" innen/außen der Funktion
  2. , wenn die "dig = []" außerhalb der Funktion ist falsch, warum kann ich es erfolgreich auf meinem lokalen laufen ....?

Vielen Dank für Jungs, mir zu helfen ......

dig=[] 
def digit_sum(n): 
    u=str(n) 
    for i in u: 
     dig.append(i) 
     s=0 
     for number in dig: 
      int(number) 
      s=s+int(number) 
    return s 

Antwort

1

So ist der Unterschied zwischen innen/außen Stelle. Wenn Sie außerhalb platzieren, erstellen Sie eine globale Liste. Von dort sind Sie ständig anfügen, dass die Liste nie gelöscht wird! Also, wenn ich digit_sum(1234) laufen lasse, bekomme ich richtig 10. Wenn ich sofort danach digit_sum(1000), dig==['1','2','3','4','1','0','0','0'] laufen lasse, die dann alle diese addieren und durcheinander bringen.

Wenn Sie graben = [] innerhalb die Funktion, erstellt es eine neue, lokale Liste - von ihm nicht jedes Mal geändert wird, ist es für jede Drehung eine neue leere Liste ist.

Der Grund, warum Sie es richtig bekommen, ist manchmal, weil die Funktion Nebenwirkungen hat, also Reihenfolge des Anrufens und Geschichte des Anrufens Angelegenheiten. Versuchen Sie, Nebenwirkungen der Funktionen zu vermeiden - entweder ändern Sie keine Liste, oder kopieren Sie die Liste> ändern Sie diese Kopie>return die Kopie, wenn Sie die neue Liste zuweisen möchten (oder einfach mit der neuen Liste arbeiten.)

+0

Ok .... Ich habe es ... das Ergebnis der letzten Rotation wird in der globalen var verlassen werden ........... Vielen Dank !! – NoDinner

0

Etwas wie:

def digit_sum(n): 
    dig=0 # this is the result os the sum 
    number=str(n) #transform the number into string so we can iterate 
    for i in range(len(number)): 
     dig=dig+int(number[i]) #transform the char to int 
    return dig #return the sum 

ich die Nummer nehmen (zB 123) und ich verwandeln es in einen String So kann ich die Länge der Zeichenfolge (die Anzahl der Ziffern) erhalten. Dann füge ich sie einfach hinzu (nachdem sie in Ganzzahlen umgewandelt wurden) und gebe das Ergebnis zurück

dig=[] bedeutet, dass Sie eine Array-Variable deklarieren, die nicht das ist, was Sie hier wollen. Wenn es in der Funktion deklariert ist, bedeutet das, dass wenn die Funktion endet, die Variable "verschwunden" ist, können Sie sie nicht zurückrufen. Es wird nur in der Funktion existieren. Wenn es vor der Funktion ist, existiert die Variable bis zum Ende Ihres Programms.

Ihre Aptenpt ist nicht korrekt. Sie möchten Ihr Array mit der Zahl DANN zusammenfassen. Tatsächlich, wenn Sie Ihrem Array eine Nummer zuweisen, summieren Sie dann. Zum Beispiel wird 123 Summe: 1 dann 1 + 2 dann 1 + 2 + 3

+0

Also eigentlich, wenn ich die Ausgrabung außerhalb der Funktion setzen, wird das letzte Mal Ergebnis in der Grabung gelassen werden, nicht wahr? – NoDinner

+0

Genau da die Variable außerhalb der Funktion erklärt nicht – Hearner

+0

am Ende der Funktion beenden Ok ... total verstehen .... thx so viel Kerl – NoDinner

0

Die vorherige Antwort ist in Ordnung. Sie Ihre Aufmerksamkeit auf focuse, so dass Sie Fehler in der Zukunft vermeiden könnte: Wenn Sie schreiben:

u=str(n) 
    for i in u: 
     dig.append(i) 

Sie hängen Sie nicht die Ziffern der Nummer auf der Grabung. Stattdessen fügst du die Ziffern 0, 1, 2, 3 usw. hinzu. Genau das können aber die Zahlen sein. Da die For-Schleife vom Anfang bis zum Ende eines Strings, einer Liste usw. und der Variablen nach dem Wort For nur ein Zähler ist, beginnt sie bei 0 und endet am Ende des Objekts. Tha ist, warum die Antwort von Hearner richtig ist: die Nummer [i] s sind nicht die i summiert.

for i in range(len(number)): 
    dig=dig+int(number[i]) 
+0

Ja. Vielen Dank für Ihre geduldige Antwort ... schönes Wochenende – NoDinner