Wie in Python die Quersumme einer Ganzzahl berechnen?

11 Antworten

sum(int(x) for x in str(n))

Erklärung:

Ein string ist in python iterierbar.

list("abc") erzeugt also ["a", "b", "c"]

Mit str wandelt man in python eine Zahl in ihre String-Repräsentation zur Basis 10. Also genau das, was wir für die Quersumme brauchen.

Also list(str(123)) erzeugt ["1", "2", "3"]

Da dies eine Liste von Strings erzeugt, muss jede einzelne String-Zahl wieder mit int in eine Zahl umgewandelt werden. Dazu benutzt man am Besten eine list-Comprehension:

Also [int(x) for x in str(123)] erzeugt [1, 2, 3]

Um die Quersumme zu errechnen muss man lediglich die Dezimalstellen einer Zahl miteinander addieren. Da wir die Dezimalstellen so schön durch unsere List-Comprehension extrahieren konnten können wir nun einfach die Liste summieren. Die [] benötigen wir dann nichtmal beim Aufruf von sum.

Also sum(int(x) for x in str(123)) ergibt 6

oder allgemeiner:

sum(int(x) for x in str(n)) ergibt die Quersumme von n
Von Experte Dultus, UserMod Light bestätigt
def Quersumme(zahl):
    result = 0
    while zahl: # solange Zahl nicht Null ist
        result += zahl % 10 # Zahl modulo 10 zum Ergebnis
        zahl = int(zahl / 10) # Zahl durch 10 Dividieren
    return result # Ergebnis zurueckgeben
PythonNeuling00 
Fragesteller
 07.10.2020, 12:53

die Quersumme soll nicht größer als 9 sein!

0
ohwehohach  07.10.2020, 12:54
@PythonNeuling00

Dann ist es aber nicht die Quersumme. Schon die Quersumme von 19 ist ja größer als 9. Willst Du eventuell eine Prüfsumme berechnen?

3
RakonDark  07.10.2020, 12:57
@PythonNeuling00

steht aber nirgendwo die bedingung . wir sehen nur was du schreibst . kurze frage , hast du überhaupt irgendwie ahnung oder machst du nur copy paste und fertig

2
Jangler13  07.10.2020, 13:53

Mit Zahl // 10 wird direkt nur ganzzahlig dividiert, dann musst du keine Umwandlung zu int machen

2

sum(int(x) for x in str(n))

Erklärung:

Ein string ist in python iterierbar.

list("abc") erzeugt also ["a", "b", "c"]

Mit str wandelt man in python eine Zahl in ihre String-Repräsentation zur Basis 10. Also genau das, was wir für die Quersumme brauchen.

Also list(str(123)) erzeugt ["1", "2", "3"]

Da dies eine Liste von Strings erzeugt, muss jede einzelne String-Zahl wieder mit int in eine Zahl umgewandelt werden. Dazu benutzt man am Besten eine list-Comprehension:

Also [int(x) for x in str(123)] erzeugt [1, 2, 3]

Um die Quersumme zu errechnen muss man lediglich die Dezimalstellen einer Zahl miteinander addieren. Da wir die Dezimalstellen so schön durch unsere List-Comprehension extrahieren konnten können wir nun einfach die Liste summieren. Die [] benötigen wir dann nichtmal beim Aufruf von sum.

Also sum(int(x) for x in str(123)) ergibt 6 oder allgemeiner:

sum(int(x) for x in str(n)) ergibt die Quersumme von n

Also eine Möglichkeit wäre es, dass du die letzte Ziffer durch Modulo 10 Rausholst, die Zahl durch 10 teilst, und dann die Ziffer von davor dazu addierst, bis die Zahl kleiner als 10 ist

zahl = 123
quersumme = zahl
while quersumme > 9:
  quersumme = quersumme // 10 + quersumme % 10

So musst nicht dauernd Datentypen umwandeln und du brauchst maximal (Anzahl Ziffern + 1) iterationen

ralphdieter  07.10.2020, 19:02

Originelle Idee, funktioniert aber nicht: Die Quersumme von 1234 ist 10. Bei Dir kommt aber immer höchstens 9 raus.

0
Jangler13  07.10.2020, 19:52
@ralphdieter

Wenn du dir die Kommentare des fragenstellers durchliest, siehst du, dass tatsächlich gewollt ist, dass die Quersumme maximal 9 sein soll. Es ist also die Iterative Quersumme gewollt

0
>>> Quersumme = (lambda x : sum([int(y) for y in str(x)]))
>>> Quersumme(12)
3
>>> Quersumme(123)
6
>>> Quersumme(9)
9
>>> Quersumme(123456789)
45
>>> Quersumme(33456789)
45
>>> Quersumme(6456789)
45
>>> Quersumme(696789)
45
>>> Quersumme(396999)
45
>>> Quersumme(99999)
45

Es könnte sein Das es in Python4 keinen lambda-Operator mehr gibt. Aber in Python3.9.4 gibt wes ihn noch.