2016-12-03 4 views
-1

Der Versuch, ein Stück Code zu schreiben, der die Ziffern einer Zahl summiert. Ich sollte auch hinzufügen, dass ich möchte, dass das Programm die Ziffern summiert, bis die Summe nur 1 Ziffer ist. Wenn Sie mit 1969 beginnen, sollte es zuerst 1 + 9 + 6 + 9 hinzufügen, um 25 zu erhalten. Da der Wert 25 mehr als eine einzelne Ziffer hat, sollte der Vorgang wiederholt werden, um 7 als final zu erhalten Antworten.RECURSIVE-Funktion, die Ziffern der Eingabe summiert

Ich habe mich nur gefragt, wie ich das durchziehen und vielleicht auch rekursiv machen könnte. Dies ist, was ich bisher habe

def sum_digits3(n): 
    r = 0 
    while n: 
     r, n = r + n % 10, n // 10 
    return r 
+0

siehe: [Digitale Wurzel ohne Schleifen] (http://stackoverflow.com/q/40875066/6732794) (edit: anderen Link entfernt) –

Antwort

3

Konvertieren Sie zwischen Strings und Ints, verwenden Sie sum().

>>> def foo(n): 
    n = str(n) 
    if len(n) == 1: 
     return int(n) 
    return foo(sum(int(c) for c in n)) 

>>> foo(1969) 
7 
>>> 

def foo(n): 
    n = str(n) 
    if len(n) == 1: 
     return int(n) 
    return foo(sum(int(c) for c in n)) 
+0

@leaf, sorry, kopieren und Pasten von Idle - tippen Sie es in Idle so ein und es funktioniert. Ein Idle-Feature, ohne das ich leben könnte. – wwii

+0

Das ist in Ordnung. Aber aus irgendeinem Grund läuft es gut in meinem IDLE zu. Ich denke, deine Absicht ist in Ordnung :) –

1

Es ist so einfach wie explizit die Rekursion beteiligt.

def sum_digits3(n): 
    r = 0 
    while n: 
     r, n = r + n % 10, n // 10 
    if len(str(r))>1: 
     return sum_digits3(r) 
    return r 

Aber ich muss zugeben, dass ich die Links von verdächtigen Hund lesen werde. Und die Antwort von wwii ist klüger als meine.

Verwandte Themen