Python zufälliges Wort generieren?

6 Antworten

Hier ist eine Liste aller deutschen Wörter:

http://www.netzmafia.de/software/wordlists/deutsch.txt

  • Mach einfach eine Textdatei und füge all die Wörter per Copy-Paste ein
  • Lies die Datei am Programm-Start ein und Speichere die Wörter in eine Liste
with open(filename) as f:
  words = f.readlines()
  words = [x.strip() for x in words]
  • Mische die Liste mit
random.shuffle(words)
  • Wenn jemand Enter drückt: Lass dir mit words.pop() das letzte Element der Liste ausgeben. Dieses ist zufällig, weil du die Liste ja vorher gemischt hast.

Falls du noch Fragen hast oder wo nicht weiterkommst, sag bescheid, dann helfe ich dir. :)

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

alfredo153  31.01.2021, 08:49

Das ist der schöne (und seltene) Fall, in dem ein Programm durch das Löschen von Code etwas schneller wird und weniger RAM braucht:

with open(filename) as f:
  words = [x.strip() for x in f]

Wobei man in der Praxis vermutlich noch gewisse Wörter raussortieren will (z.B. Mindest- und Maximallänge).

Davon abgesehen würde ich das Ganze eher in ein Tupel stecken und dann mit random.choice() arbeiten, aber da kommt's natürlich drauf an ob Wiederholungen erlaubt sind.

Bei einer _sehr_ großen Liste wird es auch nicht mehr sinnvoll sein, sie komplett im Speicher zu halten.

0

Wenn wir eine simple Wortliste haben, wie sie z.B. in ngerman zu finden ist (hier ein leicht runterladbarer Auszug):

with open("ngerman") as f:
    words = tuple(f)
print(random.choice(words))

Allerdings will man solche Listen normalerweise etwas filtern, zum Beispiel nach sinnvollen Wortlängen. Macht man sinnvollerweise schon vorher mit der Datei, aber zur Laufzeit ist es auch kein Ding:

with open("ngerman") as f:
    words = tuple(w for w in f if 3 < len(w) < 12)
print(random.choice(words))

Weil so eine Wortliste recht groß und gleichzeitig gut komprimierbar ist, könnte man sie auch erst durch gzip schicken und dann direkt auf dem komprimierten File arbeiten:

import random
import gzip

with gzip.open("ngerman.gz", "rt") as f:
    words = tuple(w for w in f if 3 < len(w) < 12)

print(random.choice(words))

1.)Erstelle einen Pool von Wörtern

2.)Errechnen eine Zufallszahl im Bereich 0 bis (max Wörtern im Pool -1)

3.)Nun entnimmst du aus dem Pool das Element mit dem Index der Zufallszahl

4.) dies Packst du in eine Methode das du mit einem Key-Event abfeuerst


Wörter in Liste packen, Shuffeln und dann vorne beginnend der Liste entnehmen.

Bei sehr vielen Wörter randomisierst Du über den Index (oder nimmst choice()).