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
Wie errechne ich die Quersumme aus einer eingegbene Zahl ?
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi swaTch,
oder wenns kein String ist:
Gruß
Dookie
Code: Alles auswählen
Zahl = "123456789213476898654438476"
quersumme = sum([int(i) for i in Zahl])
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]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hier mal ein ausführlich dokumentiertes Script
Gruß
Dookie
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]
import this[/code]
Okay recht herzlichen Dank. Werde jetzt mal versuchen die einzelnen Befehle nachzuvollziehen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Sowas würde doch auch gehen:
Da reichen doch 3 Zeilen.
Code: Alles auswählen
Zahl = 123456789213476898654438476
Zahl = str(Zahl)
quersumme = sum([int(i) for i in Zahl])
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Es reichen sogar 2 :
Gruß, mawe
Es reichen sogar 2 :
Code: Alles auswählen
zahl = 1223223476476472364762346234764623462347623478236
quersumme = sum([int(i) for i in str(zahl)])
Hi, könntest du vielleicht diese zwei Zeichen Code für Python Anfänger wie mich kommentieren?
Gruß
Gruß
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Na ich versuch's mal in mehreren Schritten:
1)
Ok, das sollte noch klar sein
Jetzt wandeln wir die Zahl in einen String um, weil man über den iterieren kann:
2)
Als nächstes wollen wir eine Liste mit den einzelnen Ziffern:
3)
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)
Jetzt einfach noch die Summe berechnen:
4)
Wenn wir 2),3) und 4) zusammenfassen, kommen die 2 Zeilen raus
Gruß, mawe
Na ich versuch's mal in mehreren Schritten:
1)
Code: Alles auswählen
zahl = 123456789
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"
3)
Code: Alles auswählen
liste = [int(i) for i in zahl_als_string] # -> [1,2,3,4,5,6,7,8,9]
Jetzt einfach noch die Summe berechnen:
4)
Code: Alles auswählen
quersumme = sum(liste)
Gruß, mawe
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
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]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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).
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 (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Dookie hat ja auch eine ausfühliche Version geschrieben. Ich habe erst beim 3. Durchlesen verstanden wie das funktioniert (keine Kritik an dir, Dookie ). 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
Wie gesagt: Die Geschmäcker sind verschieden
Gruß, mawe
Da muß ich dir widersprechen!seli hat geschrieben: 'sum([int(i) for i in str(zahl)])' ist inübersichtlich...
Dookie hat ja auch eine ausfühliche Version geschrieben. Ich habe erst beim 3. Durchlesen verstanden wie das funktioniert (keine Kritik an dir, Dookie ). 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
Wie gesagt: Die Geschmäcker sind verschieden
Gruß, mawe
Ich meinte nicht Platz im Sinne von ein paar Bytes, sondern man spart Zeilen. Ein kurzes Script ist besser überblickbar.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).
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]
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi,
im Ursprungsposting wurde eben nach einer Lösung mit Modulo gefragt, das wird bei der Lösung mit den Strings eben nicht benötigt, bzw. ist dann in der Umwandlung von int zu str versteckt. Darum meine Mehzeilige Lösung eben mit Modulo.
Ich verwende List Comprehensions inzwischen sehr oft, dafür kein map oder filter mehr. Schön wirds bei Python2.4 mit den Generatorexpressions, dann ists von Vorteil wenn man List Comprehensions versteht.
Gruß
Dookie
im Ursprungsposting wurde eben nach einer Lösung mit Modulo gefragt, das wird bei der Lösung mit den Strings eben nicht benötigt, bzw. ist dann in der Umwandlung von int zu str versteckt. Darum meine Mehzeilige Lösung eben mit Modulo.
Ich verwende List Comprehensions inzwischen sehr oft, dafür kein map oder filter mehr. Schön wirds bei Python2.4 mit den Generatorexpressions, dann ists von Vorteil wenn man List Comprehensions versteht.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Hoppla, daß swaTch etwas mit Modulo wollte hab ich ganz überlesen. Sorry Dookie, ich wollte Dein Snippet nicht schlechter machen als es eh schon ist (is nur Spaß!)
Gruß, mawe
Hoppla, daß swaTch etwas mit Modulo wollte hab ich ganz überlesen. Sorry Dookie, ich wollte Dein Snippet nicht schlechter machen als es eh schon ist (is nur Spaß!)
Gruß, mawe
Apropos lange Zeilen.
Ich hab hier ein Dictionary. Ich wollte wissen, was drin ist. Ich seh dass dictionarry["service"] auch ein dict ist. ich schaue mir die keys an, dann die keys davon, und....
naja so siehts aus:
Kapiert man doch auf den ersten Blick, oder?
Ich hab hier ein Dictionary. Ich wollte wissen, was drin ist. Ich seh dass dictionarry["service"] auch ein dict ist. ich schaue mir die keys an, dann die keys davon, und....
naja so siehts aus:
Code: Alles auswählen
print self.errorDict[self.errorDict.keys()[1]][self.errorDict[self.errorDict.keys()[1]].keys()[0]]
[size=75]:wq[/size]
hallo, ich habe dieselbe frage nur brauch ich eine rekursive lösung. kann mir da vielleicht einer weiterhelfen? vielen dank schonmal im voraus.
Code: Alles auswählen
def sumup(c,s=0):
if type(c) == list:
if len(c):
s += c.pop(0)
return sumup(c,s)
else:
return s
else:
c = [int(c) for c in str(c)]
s += c.pop(0)
return sumup(c,s)
if __name__ == '__main__':
cifer = 2345262
print sumup(cifer)
Wozu brauchst Du denn so etwas?
Gruß,
Christian