Listeninhalt umwandeln

Du hast eine Idee für ein Projekt?
Antworten
PanTau
User
Beiträge: 26
Registriert: Freitag 14. Januar 2022, 17:24

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
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
PanTau
User
Beiträge: 26
Registriert: Freitag 14. Januar 2022, 17:24

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
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
PanTau
User
Beiträge: 26
Registriert: Freitag 14. Januar 2022, 17:24

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
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
PanTau
User
Beiträge: 26
Registriert: Freitag 14. Januar 2022, 17:24

_blackjack_: hehe, ok, Danke für die Aufklärung. Ich dachte schon, das wäre an mich gerichtet.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1016
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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,
}
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
PanTau
User
Beiträge: 26
Registriert: Freitag 14. Januar 2022, 17:24

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.
Antworten