Seite 1 von 1

Listeninhalt umwandeln

Verfasst: Sonntag 16. Januar 2022, 19:19
von PanTau
Hallo,
Ich möchte ein kleines Programm schreiben, das die Namenszahl eines eingegebenen Namens ausrechnet. Jedoch ist dazu nötig, dass ich der Liste, deren Elemente aus strings besteht, mit den entsprechenden variablen Zahlenwerten zu ersetzen. Wie lautet der Befehl dafür?

Zur Veranschaulichung kopiere ich das Skript bis zu dem Punkt mal hier rein:

#Zahlenwertzuweisung Buchstaben:

A,a,I,i,J,j,Q,q,Y,y=1,1,1,1,1,1,1,1,1,1
B,b,K,k,R,r=2,2,2,2,2,2
C,c,G,g,L,l,S,s=3,3,3,3,3,3,3,3
D,d,M,m,T,t=4,4,4,4,4,4
E,e,H,h,N,n,X,x=5,5,5,5,5,5,5,5
U,u,V,v,W,w=6,6,6,6,6,6
O,o,Z,z=7,7,7,7
F,f,P,p=8,8,8,8

#Eingabe Namen und Umwandlung in Liste:

print("Willkommen zur Berechnung und Deutung der Namenszahl")

name = input("Name eingeben: ")
print("Der Name lautet " + name)
liste = list(name)
print (liste)

-->daraus wird nach Ausführung:

Willkommen zur Berechnung und Deutung der Namenszahl
Name eingeben: Gudrun
Der Name lautet Gudrun
['G', 'u', 'd', 'r', 'u', 'n']


#Den Buchstaben in der Liste die variablen Zahlenwerte zuweisen:

Hier ist der Haken. Ich finde den entsprechenden Befehl in keinem der bis jetzt angeschauten Tutorials.

lg,

PanTau

Re: Listeninhalt umwandeln

Verfasst: Sonntag 16. Januar 2022, 19:26
von Sirius3
Die Zuordnung eines Wertes zu einem Buchstaben speichert man in einem Wörterbuch (dict), dann kannst Du einfach die Werte zu den Buchstaben der Eingabe abfragen.

Re: Listeninhalt umwandeln

Verfasst: Sonntag 16. Januar 2022, 20:01
von PanTau
Die Zuordnung eines Wertes zu einem Buchstaben speichert man in einem Wörterbuch (dict), dann kannst Du einfach die Werte zu den Buchstaben der Eingabe abfragen.

.... Ich danke dir Srius3

Re: Listeninhalt umwandeln

Verfasst: Sonntag 16. Januar 2022, 21:11
von __blackjack__
Wenn Gross- und Kleinbuchstabe immer auf den gleichen Wert abgebildet werden, braucht man auch nur eine Variante speichern, weil man die Eingabebuchstaben ja entsprechend umwandeln kann.

Was passiert eigentlich bei Leuten die Namen haben die nicht nur aus ASCII-Buchstaben bestehen?

Re: Listeninhalt umwandeln

Verfasst: Montag 17. Januar 2022, 11:07
von PanTau
I wish there was a button on my monitor to turn up the intelligence.

Vielen Dank für die Blumen!
Ich bin halt noch ein Programmier-Anfänger, deshalb stelle ich mich noch ein bisschen dumm an. Aber deine Frage bezüglich Buchstaben. die nicht nur aus ASCII-Buchstaben bestehen, ist durchaus berechtigt .... vielen Dank für den Hinweis.

lg,
PanTau

Re: Listeninhalt umwandeln

Verfasst: Montag 17. Januar 2022, 11:21
von __blackjack__
@PanTau: Was Du da zitiert hast ist meine aktuelle ”Signatur” die unter jedem Beitrag von mir erscheint. Also nicht persönlich an Dich addressiert, und sagt ja eher aus, dass *ich* mir so einen Knopf am Monitor wünsche. Und es ist im Zusammenhang mit der zweiten Zeile, mit dem zugegebenermassen etwas mauen Wortwitz zu sehen, dass „bright“, zu Deutsch „hell“, im englischen als Synonym für „intelligent“ verwendet werden kann.

Re: Listeninhalt umwandeln

Verfasst: Montag 17. Januar 2022, 11:29
von PanTau
_blackjack_: hehe, ok, Danke für die Aufklärung. Ich dachte schon, das wäre an mich gerichtet.

Re: Listeninhalt umwandeln

Verfasst: Montag 17. Januar 2022, 13:59
von DeaD_EyE
Was passiert eigentlich bei Leuten die Namen haben die nicht nur aus ASCII-Buchstaben bestehen?
https://jaegers.net/gematrie-mit-der-deutschen-sprache/
https://jaegers.net/tools-downloads-und ... -gematrie/

Umlaute müssen ersetzt werden, wenn eine Gematrie ohne Umlaute verwendet wird.

Code: Alles auswählen

import string


translation_classic = {
    char: index for index, char in enumerate(string.ascii_lowercase[:9], start=1)
}
translation_classic |= {
    char: index * 10 for index, char in enumerate(string.ascii_lowercase[9:18], start=1)
}
translation_classic |= {
    char: index * 100 for index, char in enumerate(string.ascii_lowercase[18:], start=1)
}
translation_seq = {
    char: index for index, char in enumerate(string.ascii_lowercase, start=1)
}

translation_fortlaufend = list(string.ascii_lowercase)
translation_fortlaufend.insert(translation_fortlaufend.index("a") + 1, "ä")
translation_fortlaufend.insert(translation_fortlaufend.index("o") + 1, "ö")
translation_fortlaufend.insert(translation_fortlaufend.index("u") + 1, "ü")
translation_fortlaufend = {
    char: index for index, char in enumerate(translation_fortlaufend, start=1)
}
umlauts = {"ä": "ae", "ö": "oe", "ü": "ue"}


def umlaut_ersetzung(wort):
    for umlaut, ersetzung in umlauts.items():
        wort = wort.replace(umlaut, ersetzung)

    return wort


def gematrie_deutsch(wort, translation, umlaute=True):
    wort = wort.lower()
    
    if umlaute:
        wort = umlaut_ersetzung(wort)
        
    return sum(translation.get(char, 0) for char in wort)


wort = "Hallo"
print("Klassisch", gematrie_deutsch(wort, translation_classic, umlaute=True))
print("Sequenziell fortlaufend", gematrie_deutsch(wort, translation_seq, umlaute=True))

# bei einer Gematrie mit Umlauten die Umlaute nicht ersetzen.
# deswegen ist umlaute=False
print(
    "Sequenziell fortlaufend mit Umlaute (umlaute=False)",
    gematrie_deutsch(wort, translation_fortlaufend, umlaute=False),
)
Unbekannte Zeichen == 0.
D.h. wenn z.B. ein ß vorkommt, wird das nicht gezählt. Um ß durch ss zu ersetzen, kann anstatt str.lower die Methode str.casefold verwendet werden.
https://docs.python.org/3/library/stdty ... r.casefold

Anstatt das Mapping per Hand einzugeben, habe ich bereits vorhandenes genutzt. Unter anderem gibt es in dem Modul string unterschiedliche Zeichenketten geordnet nach Gruppen (ascii_lowercase, ascii_uppercase, digits). Man kann es aber auch per Hand machen und um sich die Eingabe von Großbuchstaben zu vermeiden, macht man alles in Kleinbuchstaben. Die Zahlenwerte für Klein- und Großbuchstaben sind identisch.

Mapping sequenziell ohne Umlaute (aus string.ascii_lowercase erzeugt):

Code: Alles auswählen

translation_seq = {
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4,
    "e": 5,
    "f": 6,
    "g": 7,
    "h": 8,
    "i": 9,
    "j": 10,
    "k": 11,
    "l": 12,
    "m": 13,
    "n": 14,
    "o": 15,
    "p": 16,
    "q": 17,
    "r": 18,
    "s": 19,
    "t": 20,
    "u": 21,
    "v": 22,
    "w": 23,
    "x": 24,
    "y": 25,
    "z": 26,
}

Mapping sequenziell mit Umlaute:

Code: Alles auswählen

translation_seq = {
    "a": 1,
    "ä": 2,
    "b": 3,
    "c": 4,
    "d": 5,
    "e": 6,
    "f": 7,
    "g": 8,
    "h": 9,
    "i": 10,
    "j": 11,
    "k": 12,
    "l": 13,
    "m": 14,
    "n": 15,
    "o": 16,
    "ö": 17,
    "p": 18,
    "q": 19,
    "r": 20,
    "s": 21,
    "t": 22,
    "u": 23,
    "ü": 24,
    "v": 25,
    "w": 26,
    "x": 27,
    "y": 28,
    "z": 29,
}

Re: Listeninhalt umwandeln

Verfasst: Montag 17. Januar 2022, 18:36
von PanTau
DeaD EyE, Ich danke dir für seine umfassende Erklärung. Leider verstehe ich nicht viel davon. Aber dennoch freue ich mich über die Mühe, die du dir gemacht hast.