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")
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()
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.
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",""))
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'