Imonbin, dein Programm gibt mir folgende Fehlermeldung:
line 17
return ([character_map.get(char.lower(), 0) for char in name])
^
IndentationError: unindent does not match any outer indentation level
strings in Liste Zahlenwerte aus Dictionairy zuordnen
@PanTau,
Zeile 17 wird zwar angezeigt, aber der Fehler wird von Python nicht richtig erkannt. Eigentlich ist Zeile 5 nur um ein Zeichen nach rechts gerutscht.
Wenn du die Einrückung von Zeile 5 um 1 Zeichen verringerst, sollte es passen.
Zeile 35 hat auch ein Problem:
Da ist die Klammer der print-Funktion nicht geschlossen.
Das Programm funktioniert dann zwar, ich würde aber auch noch einen Alternativvorschlag machen:
Die Funktion crosssum berechnet aus der Liste aller Buchstabenzahlen die Quersumme bis diese einstellig ist.
Erklärung zu der Zeile in der while-Schleife:
number ist eine Liste von Zahlen
sum() bildet die Summe aller Zahlen in dieser Liste
str() konvert diese Summenzahl in eine Zeichenkette aus Ziffern
map(int, ...) nimmt jede Ziffer aus der Zeichenkette und konvert sie einzeln in Zahlen
list() macht daraus schließlich eine Liste von Zahlen
Die While-Schleife wird erst abgebrochen wenn diese Liste aus nur einem Element besteht
Zeile 17 wird zwar angezeigt, aber der Fehler wird von Python nicht richtig erkannt. Eigentlich ist Zeile 5 nur um ein Zeichen nach rechts gerutscht.
Wenn du die Einrückung von Zeile 5 um 1 Zeichen verringerst, sollte es passen.
Zeile 35 hat auch ein Problem:
Da ist die Klammer der print-Funktion nicht geschlossen.
Das Programm funktioniert dann zwar, ich würde aber auch noch einen Alternativvorschlag machen:
Code: Alles auswählen
def namezahl(name):
character_map = {
'a': 1, 'ä': 6, 'b': 2,
'c': 3, 'd': 4, 'e': 5,
'f': 8, 'g': 3, 'h': 5,
'i': 1, 'j': 1, 'k': 2,
'l': 3, 'm': 4, 'n': 5,
'o': 7, 'p': 8, 'q': 1,
'r': 2, 's': 3, 't': 4,
'u': 6, 'v': 6, 'w': 6,
'x': 5, 'y': 1, 'z': 7,
'ü': 2, 'ö': 3
}
return [character_map.get(char.lower(), 0) for char in name]
def crosssum(numbers):
while len(numbers) > 1:
numbers = list(map(int, str(sum(numbers))))
return sum(numbers)
def main():
print("Willkommen zur Berechnung und Deutung der Namenszahl")
name = input("bitte den Namen eingeben: ")
numbers = namezahl(name)
namenumber = crosssum(numbers)
print(f"Die Namenszahl ist: {namenumber}")
if __name__ == "__main__":
main()
Erklärung zu der Zeile in der while-Schleife:
number ist eine Liste von Zahlen
sum() bildet die Summe aller Zahlen in dieser Liste
str() konvert diese Summenzahl in eine Zeichenkette aus Ziffern
map(int, ...) nimmt jede Ziffer aus der Zeichenkette und konvert sie einzeln in Zahlen
list() macht daraus schließlich eine Liste von Zahlen
Die While-Schleife wird erst abgebrochen wenn diese Liste aus nur einem Element besteht
Ich danke dir rogerb, das sieht alles gut aus. Ich kann es leider noch nicht laufen lassen. Es gibt mir folgende Fehlermeldung:
File "C:\Users\Heiko\Desktop\Python\Namenszahl2.py", line 11
return [character_map.get(char.lower(), 0) for char in name]
IndentationError: unexpected indent
File "C:\Users\Heiko\Desktop\Python\Namenszahl2.py", line 11
return [character_map.get(char.lower(), 0) for char in name]
IndentationError: unexpected indent
_deets_, ich habe das dictionairy von mir gelassen, wie es war und den Rest einfach unten rangehängt. und es sieht bei mir in pycharm genau so aus wie bei rogerb seinem code. Natürlich habe ich es nur reinkopiert. Was kann ich da falsch machen?
wenn ihr mir jetzt noch sagen könntet, wo steht, wie man so ein Programm als ausführbare Datei an ein Handy senden kann, dann wäre ich glücklich. Ich mache das alles nämlich, weil es meiner Tochter bei der Namensfindung für ihr ungeborenes Baby helfen soll. Ich muss jetzt nur noch die Deutung für die verschiedenen Zahlen ranhängen:
if {namenumber} == 1
print(".............") <---- so oder ähnlich
Aber meine Tochter kann das Programm nat. nicht auf meinem PC gebrauchen. Sie sollte es für ihr Handy haben. Danach werde ich mein Augenmerk wieder den Lernprogrammen zuwenden. Die sind erfolgversprechender für mich als Programmier-Rookie.
if {namenumber} == 1
print(".............") <---- so oder ähnlich
Aber meine Tochter kann das Programm nat. nicht auf meinem PC gebrauchen. Sie sollte es für ihr Handy haben. Danach werde ich mein Augenmerk wieder den Lernprogrammen zuwenden. Die sind erfolgversprechender für mich als Programmier-Rookie.
Wow! Schönes kleines Kuriosum.rogerb hat geschrieben: ↑Freitag 21. Januar 2022, 22:49Die Funktion crosssum berechnet aus der Liste aller Buchstabenzahlen die Quersumme bis diese einstellig ist.Code: Alles auswählen
def crosssum(numbers): while len(numbers) > 1: numbers = list(map(int, str(sum(numbers)))) return sum(numbers)
Auf der einen Seite ist dieser Code, ein sehr ästhetischer Umgang mit der Programmiersprache Python, um das Problem zu lösen. Anderseits ist das ständige Umwandeln von String nach Integer und wieder zurück etwas, das den erfahrenden Systemingenieur in mir sofort zucken lässt, da ich weiß, dass beide Operationen vergleichsweise teuer sind.
Ich denke, dass diese Lösung etwas mehr Systemlast erzeugen wird als die reine Integer Implementierung, wie ich sie vorgeschlagen habe und würde sie wahrscheinlich in einem Codereview beanstanden.
@imonbln, Danke! Wertvolles Feedback! Genau der Punkt hatte mich auch erst zögern lassen und ich hatte insgeheim damit gerechnet etwas in der Art zurückzubekommen. Ich werde bei Gelegenheit mal die Perfomance prüfen. Wenn man mal "crosssum python" googelt, findet man den Ansatz übrigens recht oft.
Man könnte aber auch argumentieren, dass es bei Python sowieso nicht so sehr auf die Perfomance ankommt. Wenn das eine wichtige Anforderung wäre, würde man vielleicht von vornherein auf eine andere Sprache wechseln.
In meinem Alltag lese, analysiere und ändere ich Pythoncode vergleichsweise oft. Daher hat Lesbarkeit bei Python einen recht hohen Stellenwert für mich.
Man könnte aber auch argumentieren, dass es bei Python sowieso nicht so sehr auf die Perfomance ankommt. Wenn das eine wichtige Anforderung wäre, würde man vielleicht von vornherein auf eine andere Sprache wechseln.
In meinem Alltag lese, analysiere und ändere ich Pythoncode vergleichsweise oft. Daher hat Lesbarkeit bei Python einen recht hohen Stellenwert für mich.
@imonbln, wie versprochen: Ein Perfomance Test zu dem Thema
viewtopic.php?f=9&t=53946
viewtopic.php?f=9&t=53946