Wie in Python die Quersumme einer Ganzzahl berechnen?
zahl = 123
quersumme = 0
while len(str(zahl)) >= 1:
str_zahl = str(zahl)
quersumme = int(str_zahl[0]) + int(str_zahl[1])
????
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
>>> 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.
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
Mit Zahl // 10 wird direkt nur ganzzahlig dividiert, dann musst du keine Umwandlung zu int machen
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?
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
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
Originelle Idee, funktioniert aber nicht: Die Quersumme von 1234 ist 10. Bei Dir kommt aber immer höchstens 9 raus.
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
Hast recht. Aber für die iterative Quersumme braucht man keine Schleife (siehe diese Antwort).
die Quersumme soll nicht größer als 9 sein!