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!
Hinzufügen von Funktionen
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.
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)