Samstag, 12. Januar 2013

Quersumme bilden

Quersumme für eine Zahl n bilden:

Ein Ansatz mit Generator und Stringoperation

def quersumme_bilden(n):
    ''' Gibt die Quersumme für eine Zahl n zueruck

    '''
    return sum(int(a) for a in str(n))



for i in range(10,89):
    print(i,quersumme_bilden(i))
In diesem Fall nutze ich einmal einen Generator anstelle von List Comprehension. Problem hier ist, dass keine Prüfung erfolgt, ob die übergebene Zahl n der Definition entspricht, d. h. ob es sich um eine natürliche Zahl handelt. Ein Fehler wird vom Programm selbst nicht ausgelöst oder behandelt.

Ein zweiter Ansatz mit Modulo und Ganzzahldivision

Auch diese Funktion gibt die Quersumme einer Ganzzahl aus:
def quersumme_bilden(n):
    ''' Ohne n in einen String
    umzuwandeln, soll die Quersumme
    berechnet werden

    '''
    quersumme = 0
    while n > 0:
        quersumme += n % 10
        n = n // 10
    return quersumme

print(format("Eingabe","10s"),format("Quersumme","10s"),sep="  ")
print("-" * 21)
for n in [9873216540,987654321,1004,25,36,29,49,18]:
    print(format(n,"10d"),format(quersumme_bilden(n),"10d"))
Im Augenblick könnte ich nicht sagen, welcher Ansatz schneller ist. Eigentlich sollte der zweite Ansatz performanter sein, weil keine Liste erzeugt und keine Typumwandlung erforderlich ist.

Keine Kommentare:

Kommentar veröffentlichen