web-dev-qa-db-de.com

Zufälliger Wortgenerator - Python

Im Grunde arbeite ich an einem Projekt, bei dem der Computer ein Wort aus einer Liste von Wörtern entnimmt und es für den Benutzer durcheinander bringt. Es gibt nur ein Problem: Ich möchte nicht ständig Tonnen von Wörtern in die Liste schreiben, daher frage ich mich, ob es eine Möglichkeit gibt, eine Menge zufälliger Wörter zu importieren, sodass ich selbst nicht weiß, was es ist und was nicht dann könnte ich das Spiel auch genießen? Dies ist die Kodierung des gesamten Programms, es hat nur 6 Wörter, die ich einschiebe:

import random

WORDS = ("python", "jumble", "easy", "difficult", "answer",  "xylophone")
Word = random.choice(WORDS)
correct = Word
jumble = ""
while Word:
    position = random.randrange(len(Word))
    jumble += Word[position]
    Word = Word[:position] + Word[(position + 1):]
print(
"""
      Welcome to Word JUMBLE!!!

      Unscramble the leters to make a Word.
      (press the enter key at Prompt to quit)
      """
      )
print("The jumble is:", jumble)
guess = input("Your guess: ")
while guess != correct and guess != "":
    print("Sorry, that's not it")
    guess = input("Your guess: ")
if guess == correct:
    print("That's it, you guessed it!\n")
print("Thanks for playing")

input("\n\nPress the enter key to exit")
24

Lokale Wörterliste lesen

Wenn Sie dies wiederholt machen, würde ich es lokal herunterladen und aus der lokalen Datei abrufen. * Nix Benutzer können /usr/share/dict/words verwenden.

Beispiel:

Word_file = "/usr/share/dict/words"
WORDS = open(Word_file).read().splitlines()

Aus einem entfernten Wörterbuch ziehen

Wenn Sie aus einem entfernten Wörterbuch abrufen möchten, haben Sie mehrere Möglichkeiten. Die Anforderungsbibliothek macht dies sehr einfach (Sie müssen pip install requests):

import requests

Word_site = "http://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain"

response = requests.get(Word_site)
WORDS = response.content.splitlines()

Alternativ können Sie das eingebaute urllib2 verwenden.

import urllib2

Word_site = "http://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain"

response = urllib2.urlopen(Word_site)
txt = response.read()
WORDS = txt.splitlines()
58
Kyle Kelley

Lösung für Python 3

Für Python3 greift der folgende Code die Word-Liste aus dem Web auf und gibt eine Liste zurück. Antwort basierend auf akzeptierte Antwort oben von Kyle Kelley.

import urllib.request

Word_url = "http://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain"
response = urllib.request.urlopen(Word_url)
long_txt = response.read().decode()
words = long_txt.splitlines()

Ausgabe:

>>> words
['a', 'AAA', 'AAAS', 'aardvark', 'Aarhus', 'Aaron', 'ABA', 'Ababa',
 'aback', 'abacus', 'abalone', 'abandon', 'abase', 'abash', 'abate',
 'abbas', 'abbe', 'abbey', 'abbot', 'Abbott', 'abbreviate', ... ]

Und um (weil es mein Ziel war) eine Liste von 1) Großbuchstaben zu erstellen, 2) nur "Name like" -Wörter und 3) eine Art realistischer, aber witziger, zufälliger Name:

import random
upper_words = [Word for Word in words if Word[0].isupper()]
name_words  = [Word for Word in upper_words if not Word.isupper()]
Rand_name   = ' '.join([name_words[random.randint(0, len(name_words))] for i in range(2)])

Und einige zufällige Namen:

>>> for n in range(10):
        ' '.join([name_words[random.randint(0,len(name_words))] for i in range(2)])

    'Semiramis Sicilian'
    'Julius Genevieve'
    'Rwanda Cohn'
    'Quito Sutherland'
    'Eocene Wheller'
    'Olav Jove'
    'Weldon Pappas'
    'Vienna Leyden'
    'Io Dave'
    'Schwartz Stromberg'
3
amoodie

Es gibt eine Reihe von Wörterbuchdateien, die online verfügbar sind. Wenn Sie Linux verwenden, werden viele (alle?) Distributionen mit einer/etc/words-common/words-Datei geliefert, die Sie leicht (words = open('/etc/dictionaries-common/words').readlines(), z. B.) zur Verwendung analysieren können . 

2
a p

Es gibt ein Paket random_Word könnte diese Anfrage sehr bequem implementieren:

 $ pip install random-Word

from random_Word import RandomWords
r = RandomWords()

# Return a single random Word
r.get_random_Word()
# Return list of Random words
r.get_random_words()
# Return Word of the day
r.Word_of_the_day()
2
Freman Zhang

Holen Sie sich die Wörter online

>>> words = requests.get("http://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain").content.splitlines()
>>> x = 0
>>> for w in words:
...  print(str(x) + str(w).replace("'b",""))
...  x += 1

Ausgabe

25477b'zooplankton'
25478b'Zorn'
25479b'Zoroaster'
25480b'Zoroastrian'
25481b'zounds'
25482b"z's"
25483b'zucchini'
25484b'Zulu'
25485b'Zurich'
25486b'zygote'

Speichern Sie die Namen im lokalen PC

with open("dictionary.txt",'w') as file:
    for w in words:
        file.write(str(x) + str(w).replace("'b",""))
0
Giovanni Gianni