Hinzufügen von Funktionen

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
Neuling1501
User
Beiträge: 1
Registriert: Dienstag 28. Juni 2022, 23:09

Hi, wir haben folgendes Problem und bräuchten einmal bitte Eure fachkundige Hilfe:

Es geht um diesen Code:



with open("german.txt") as f:
words = f.read().split()

for word in words:
color = word.lower().replace("o", "0").replace("i", "1").replace("s", "5").replace("t", "7")
if len(word) == 3 or len(word) == 6:
ok = True
for c in color:
if c not in "abcdef0123456789":
ok = False
break
if ok:
print(word, "#" + color)



German.txt ist einfach eine Liste mit deutschen Wörtern.


Dieses Programm funktioniert, soll aber nun mit zwei neuen Funktionen laufen, die in der Schleife for word in words: aufgerufen werden.
So sollte es doch dann eigentlich funktionieren:



with open("german.txt") as f:
words = f.read().split()


def replace_letters_with_numbers(word):
color = word.lower().replace("o", "0").replace("i", "1").replace("s", "5").replace("t", "7")


def is_valid_color(word):
if len(word) == 3 or len(word) == 6:
ok = True
for c in color:
if c not in "abcdef0123456789":
ok = False
break
if ok:
print(word, "#" + color)

for word in words:
replace_letters_with_numbers(word)
is_valid_color(word)



Funktioniert aber leider nicht...
Beim Rumprobieren kam es zwischenzeitlich zu dem Ergebnis, dass lediglich das letzte Wort in der Liste ausgegeben wurde...


Sieht vielleicht jemand das Problem?


Vielen Dank im voraus und viele Grüße!
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Schau Dir nochmal an, wie Funktionen funktionieren. Sie haben Rückgabewerte, mit denen man an der aufrufenden Stelle dann weiter arbeiten kann.

Dateien sollte man immer mit dem korrekten Encoding öffnen.
In Deinem Fall ist `translate` einfacher als `replace`. Mit Sets wird die Prüfung einfacher.

Code: Alles auswählen

CHAR_TO_NUMBER = {
    ord('o'):'0',
    ord('i'):'1',
    ord('s'):'5',
    ord('t'):'7',
}

for word in words:
    word = word.lower().translate(CHAR_TO_NUMBER)
    ok = len(word) in [3, 6] and not set(word).difference("abcdef0123456789")
    if ok:
        print(word, "#" + color)
Antworten