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

Wie errechne ich die Quersumme aus einer eingegbene Zahl ?

Beitragvon swaTch » 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 :)
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » 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: Alles auswählen

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

Beitragvon swaTch » 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.
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » 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: Alles auswählen

#!/usr/bin/env python
import this
Gast

Beitragvon Gast » Donnerstag 23. September 2004, 21:52

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

Beitragvon Leonidas » 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])

Beitragvon mawe » 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

Beitragvon 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])

Beitragvon mawe » 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
Benutzeravatar
seli
User
Beiträge: 12
Registriert: Montag 4. Oktober 2004, 22:58
Kontaktdaten:

Beitragvon seli » 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.
:wq
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » 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])

Beitragvon mawe » 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
Benutzeravatar
seli
User
Beiträge: 12
Registriert: Montag 4. Oktober 2004, 22:58
Kontaktdaten:

Beitragvon seli » 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...
:wq
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » 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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » 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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder