Wie errechne ich die Quersumme aus einer eingegbene Zahl ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
swaTch
User
Beiträge: 6
Registriert: Mittwoch 22. September 2004, 17:53

Donnerstag 23. September 2004, 20:40

Hi,

ich würde gerne die Quersumme einer eingegebenen Zahl ermitteln lassen. Also z.B. 124. Da ist die Quersumme 7. Wenn möglich sogar für jede Zahlenlänge der Zahl. Ausserdem wäre es noch toll wenn man das Problem über modulo lösen könnte.

tHx schonmal im Vorraus :)
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 23. September 2004, 20:51

Hi swaTch,

Code: Alles auswählen

Zahl = "123456789213476898654438476"
quersumme = sum([int(i) for i in Zahl])
oder wenns kein String ist:

Code: Alles auswählen

def Quersumme(zahl):
    result = 0
    while zahl:
        result += zahl % 10
        zahl = int(zahl / 10)
    return result

Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
swaTch
User
Beiträge: 6
Registriert: Mittwoch 22. September 2004, 17:53

Donnerstag 23. September 2004, 21:15

Hi,

erstmal txh 4 Help aber wenn ich das in meinen Editor (Med) eingebe funktioniert das nicht. Weil ich ja kein Eingabe Feld habe ich muss dazu sagen das ich pYthon ersts eit ca. 1 Woche benutze.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 23. September 2004, 21:49

Hier mal ein ausführlich dokumentiertes Script

Code: Alles auswählen

#!/bin/env python

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

while True: # Schleife
    eingabe = rawinput("Zahl eingeben: ")
    if not eingabe: # wenn nichts eingegeben wurde:
        break       #Schleife beenden
    intzahl = int(eingabe) # in Integer wandeln
    q = Quersumme(intzahl) # Quersumme berechnen
    print "Die Quersumme von %i  ist: %i" % (intzahl, q)
    print

Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Gast

Donnerstag 23. September 2004, 21:52

Okay recht herzlichen Dank. Werde jetzt mal versuchen die einzelnen Befehle nachzuvollziehen.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 3. Oktober 2004, 11:04

Sowas würde doch auch gehen:

Code: Alles auswählen

Zahl = 123456789213476898654438476
Zahl = str(Zahl)
quersumme = sum([int(i) for i in Zahl])
Da reichen doch 3 Zeilen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Sonntag 3. Oktober 2004, 15:06

Hi!

Es reichen sogar 2 :wink::

Code: Alles auswählen

zahl = 1223223476476472364762346234764623462347623478236
quersumme = sum([int(i) for i in str(zahl)])
Gruß, mawe
Gast

Dienstag 5. Oktober 2004, 09:53

Hi, könntest du vielleicht diese zwei Zeichen Code für Python Anfänger wie mich kommentieren?

Gruß
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Dienstag 5. Oktober 2004, 11:16

Hi!

Na ich versuch's mal in mehreren Schritten:
1)

Code: Alles auswählen

zahl = 123456789
Ok, das sollte noch klar sein :wink:
Jetzt wandeln wir die Zahl in einen String um, weil man über den iterieren kann:
2)

Code: Alles auswählen

zahl_als_string = str(zahl)    # -> "123456789"
Als nächstes wollen wir eine Liste mit den einzelnen Ziffern:
3)

Code: Alles auswählen

liste = [int(i) for i in zahl_als_string]    # -> [1,2,3,4,5,6,7,8,9]
Liest sich ganz leicht: Berechne die Integer-Werte für alle i die in zahl_als_string enthalten sind (und wirf sie in die liste) :wink:
Jetzt einfach noch die Summe berechnen:
4)

Code: Alles auswählen

quersumme = sum(liste)
Wenn wir 2),3) und 4) zusammenfassen, kommen die 2 Zeilen raus :D

Gruß, mawe
seli
User
Beiträge: 12
Registriert: Montag 4. Oktober 2004, 22:58
Kontaktdaten:

Dienstag 5. Oktober 2004, 12:11

Hm, klar, den Code so kurz wie möglich zu halten, spart Platz. Wie man aber sieht ist der Code so nicht leicht nachvollziehbar.
Ich schreibe leider auch oft solchen Code, aber seien wir mal ehrlich: 'sum([int(i) for i in str(zahl)])' ist unübersichtlich...
Achja, ich vergass: Freut euch über 'Error on line XX', denn dann darf man die Zeile auseinander nehmen ;)
Zuletzt geändert von seli am Dienstag 5. Oktober 2004, 13:10, insgesamt 1-mal geändert.
[size=75]:wq[/size]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 5. Oktober 2004, 12:48

Deswegen ahbe ich ja auch mit 3 Zeilen gearbeitet.
Und so viel Festplattenplatzverschwendung ist das nun auch nicht.
Code in Python sollte möglichst lesbar sein, nicht möglichst kurz (das auch, aber erst an zweiter stelle).
Zuletzt geändert von Leonidas am Dienstag 5. Oktober 2004, 13:25, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Dienstag 5. Oktober 2004, 12:49

Hi!
seli hat geschrieben: 'sum([int(i) for i in str(zahl)])' ist inübersichtlich...
Da muß ich dir widersprechen!
Dookie hat ja auch eine ausfühliche Version geschrieben. Ich habe erst beim 3. Durchlesen verstanden wie das funktioniert (keine Kritik an dir, Dookie :wink:). Bei der Zeile die Du kritisierst sehe ich auf den ersten Blick, was passiert.
Die Geschmäcker sind natürlich verschieden, aber ich finde gerade List-Comprehension macht das Programmieren von solchen Problemstellungen sehr intuitiv und einfach. Mir ist schon klar, daß diese Syntax für einen Newbie einigermassen seltsam anmutet, aber wenn man so etwas selbst 2 oder 3 mal geschrieben hat, versteht man's.
Natürlich kann man es auch übertreiben (z.B. verschachtelte List-Comprehensions, ...) aber das ist ja in Python zum Glück nicht so einfach :wink:
Wie gesagt: Die Geschmäcker sind verschieden :D

Gruß, mawe
seli
User
Beiträge: 12
Registriert: Montag 4. Oktober 2004, 22:58
Kontaktdaten:

Dienstag 5. Oktober 2004, 13:09

Leonidas hat geschrieben:Deswegen ahbe ich ja auch mit 3 Zeilen gearbeitet.
Und so viel Festplattenplatzverschwendung ist das nun auch nicht.
Code in Python sollte möglichst lesbar sein, nicht möglichst kurz (das auch, aber erst an zeweiter stelle).
Ich meinte nicht Platz im Sinne von ein paar Bytes, sondern man spart Zeilen. Ein kurzes Script ist besser überblickbar.

mawe:
Ja, das Beispiel hier ist ja noch ziemlich ersichtlich. Aber oft passiert es halt, dass man möglichst viel auf eine einzige Zeile bringen möchte (Ein Beispiel aus java: System.out.println(new Foo().foo("foo").toString() oder so). Das wird dann aber sehr schnell unübersichtlich, und ich ich schon oben schrieb: Wenn irgendwann in so einer Zeile ein Fehler auftaucht, wünsch' ich viel Spass beim Suchen...
[size=75]:wq[/size]
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Dienstag 5. Oktober 2004, 13:22

Hi!

Wie gesagt: Man kann alles übertreiben, und Dein Hinweis wegen dem Fehler ist natürlich ein starkes Argument es nicht zu tun :D

Gruß, mawe
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 5. Oktober 2004, 13:28

List Comprehensions habe ich erst nach dem Lesen eines Dokuments von einem gewissen Olli verstanden, aber einsetzen tue ich es kaum.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten