web-dev-qa-db-fra.com

Générateur de mot aléatoire - Python

Je travaille donc essentiellement sur un projet dans lequel l’ordinateur prend un mot dans une liste de mots et le met en ordre pour l’utilisateur. il n'y a qu'un seul problème: je ne veux pas continuer à avoir à écrire des tonnes de mots dans la liste, alors 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 alors je pourrais profiter du jeu aussi? Ceci est le codage de tout le programme, il ne contient que 6 mots que je mets 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("\n\nPress the enter key to exit")
24
Infamouslyuseless

Lire une liste de mots locale

Si vous faites cela à plusieurs reprises, je le téléchargerais localement et le extrairais du fichier local. * Les utilisateurs nix peuvent utiliser /usr/share/dict/words.

Exemple:

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

Tiré d'un dictionnaire distant

Si vous souhaitez extraire un dictionnaire distant, voici quelques manières. La bibliothèque de 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 l'urllib2 intégré.

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

Solution pour Python 3

Pour Python3, le code suivant récupère la liste de mots du Web et renvoie une liste. Réponse basée 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 pour générer (parce que c'était mon objectif) une liste de 1) mots uniquement en majuscules, 2) uniquement des mots "nommer comme" et 3) un nom aléatoire de type réaliste, mais amusant:

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 quelques 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'
3
amoodie

Il existe un certain nombre de fichiers de dictionnaire disponibles en ligne - si vous êtes sur Linux, beaucoup de distributions (toutes?) Sont livrées avec un fichier/etc/dictionaries-common/words que vous pouvez facilement analyser (words = open('/etc/dictionaries-common/words').readlines(), par exemple) . 

2
a p

mettre 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 pc local

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