Générateur de mots aléatoires-Python

donc je travaille essentiellement sur un projet où l'ordinateur prend un mot d'une liste de mots et le mélange pour l'utilisateur. il n'y a qu'un problème: Je ne veux pas continuer à avoir à écrire des tonnes de mots dans la liste, donc je me demande s'il y a un moyen d'importer une tonne de mots aléatoires alors même Je ne sais pas ce que c'est, et puis je pourrais apprécier le jeu aussi? C'est le codage de l'ensemble du programme, il a seulement 6 mots que j'ai mis dans:

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("nnPress the enter key to exit")
23
demandé sur Infamouslyuseless 2013-09-16 22:17:00

4 réponses

Lecture d'un local liste de mots

si vous le faites de façon répétée, je le téléchargerais localement et le tirerais du fichier local. *les utilisateurs de nix peuvent utiliser /usr/share/dict/words.

Exemple:

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

Tirant à distance à partir d'un dictionnaire

si vous voulez tirer d'un dictionnaire distant, voici quelques façons. La bibliothèque des requêtes rend cela très facile (vous devrez 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()

Alternativement, vous pouvez utiliser le construit en urllib2.

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()
53
répondu Kyle Kelley 2017-01-14 08:07:18

Il ya un certain nombre de fichiers de dictionnaires disponibles en ligne - si vous êtes sur linux, beaucoup de (tous?) distros viennent avec un fichier/etc/dictionaries-common / words, que vous pouvez facilement analyser (words = open('/etc/dictionaries-common/words').readlines(), par exemple) pour les utiliser.

2
répondu a p 2013-09-16 18:20:08

obtenir les mots en ligne

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

Sortie

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

stocker les noms dans le pc local

with open("dictionary.txt",'w') as file:
    for w in words:
        file.write(str(x) + str(w).replace("'b",""))
0
répondu Giovanni Gianni 2017-11-30 09:09:24

Solution pour Python 3

pour Python3 le code suivant saisit la liste de mots du web et retourne une liste. Réponse repose sur réponse acceptée ci-dessus par 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()

Sortie:

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

Et à générer (parce que c'était mon objectif) une liste de 1) en majuscules seulement des mots, 2) que "nom comme" des mots, et 3) une sorte de réaliste mais le plaisir de sondage aléatoire nom:

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)])

Et des noms aléatoires:

>>> 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'
0
répondu amoodie 2018-03-28 01:36:49