Quersumme ausrechnen

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.
Antworten
Benutzeravatar
MaximalMax
User
Beiträge: 18
Registriert: Sonntag 3. Mai 2020, 00:51

Das ist keine Hausaufgabe oder so, sondern einfach nur eine Übung die ich mir selbst gestellt habe aber nicht geschafft habe.

Guten Tag,

Kann mir Jemand bitte einen Code schreiben, wie ich die Quersumme in Python berechne. Ich möchte dies mittels einer Funktion machen und die Zahl, von der die Quersumme ausgerechnet wird als Parameter übergeben.

Es scheitert eigentlich nur daran, dass wenn ich zum beispiel 18 habe die so zu trennen, dass ich dann die 1 + 8 rechnen kann.

Ich freue mich auf Antworten/Lösungen :D
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Wenn du dir schon selbst eine solche Aufgabe stellst, dann solltest du sie auch selbst lösen.
Wie würdest du denn im realen Leben vorgehen? Und was könntest du tun um das zu erreichen?
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich traue dem Braten zwar nicht so recht, dass es angeblich keine Hausaufgabe ist, aber hier trotzdem eine Art, die Aufgabe zu lösen:

Code: Alles auswählen

def get_digit_sum(number):
    result = 0
    while number > 0:
        result += number % 10
        number //= 10
    return result
Oder rekursiv:

Code: Alles auswählen

def get_digit_sum(number, result=0):
    return (get_digit_sum(number // 10, result + number % 10)
            if number else result)
Zuletzt geändert von snafu am Freitag 2. Oktober 2020, 21:20, insgesamt 2-mal geändert.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Auch wenn da vielleicht etwas Zeit fressende Typkonvertierungen enthalten sind mag ich ja diese Lösung;:

Code: Alles auswählen

def get_sum_of_digits(number):
    return sum(map(int, str(number)))
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@MaximalMax: so was hast du jetzt gewonnen, das dir jemand die Lösung gesungen hat. Hätte man durch googeln auch leicht finden können.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Man müsste noch nicht einmal eine Suchmaschine bemühen. Suchen nach „Quersumme“ alleine hier im Forum liefert 100+ Treffer.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Wenn wir schon bei Quersummen sind, könnte man ja gleich mit Numerologie weiter machen.

Was ist die Quersumme von CORONA, wenn A == 1, B == 2, usw..
Im Internet gibt es Wörterbücher zum Download. Das Mapping musst du dir nicht selbst erstellen, da hilft das Modul string.
Viel Spaß.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

DeaD_EyE hat geschrieben: Montag 5. Oktober 2020, 09:29 Was ist die Quersumme von CORONA, wenn A == 1, B == 2, usw..
Ich möchte lösen:

Code: Alles auswählen

sum(ord(char) & 0x1f for char in "CORONA")
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Ich möchte auch lösen:

Code: Alles auswählen

import string

CHAR_TO_NUMBER = dict(enumerate(string.ascii_uppercase))
WORD = "CORONA"

print(" ".join([str(key + 1) for char in WORD for key, value in CHAR_TO_NUMBER.items() if char == value]))
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@Jankie: Wörterbücher sind dazu da, effektiv über die Schlüssel zuzugreifen. Der Name des Wörterbuchs CHAR_TO_NUMBER ist so auch falsch, weil es ein NUMBER_TO_CHAR-Wörterbuch ist.
enumerate kennt auch einen Parameter, mit dem man den Startwert angeben kann, so dass das key + 1 unnötig wird.

Code: Alles auswählen

import string
CHAR_TO_NUMBER = {char: str(num) for num, char in enumerate(string.ascii_uppercase, 1)}

word = "CORONA"
print(" ".join(map(CHAR_TO_NUMBER.get, word)))
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Vielen Dank für die Hinweise @Sirius3.

Habe noch eine andere Methode die ähnlich der von @snafu ist.

Code: Alles auswählen

WORD = "CORONA"

print(" ".join([str(ord(char) - 96) for char in WORD.lower()]))
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Die eckigen Klammern kann man sich sparen, dann spart Python sich eine extra Liste anzulegen. 🙂
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich habs immer so gemacht:

Code: Alles auswählen

import string
sum(string.ascii_uppercase.index(c) + 1 for c in "CORONA")
@snafu, wie bist du auf 0x1f gekommen?

Code: Alles auswählen

sum(ord(char) & 0x1f for char in "CORONA")
Hint: Wie viele Buchstaben hat Corona?
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten