簡體   English   中英

隨機詞生成器 - Python

[英]Random word generator- Python

所以我基本上在做一個項目,計算機從單詞列表中提取一個單詞並將其混雜起來供用戶使用。 只有一個問題:我不想一直在列表中寫很多單詞,所以我想知道是否有辦法導入大量隨機單詞,所以即使我不知道它是什么,並且那么我也可以享受游戲嗎? 這是整個程序的編碼,我只輸入了 6 個單詞:

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

讀取本地單詞列表

如果您重復執行此操作,我會在本地下載並從本地文件中提取。 *nix 用戶可以使用/usr/share/dict/words

例子:

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

從遠程字典中提取

如果你想從遠程字典中提取,這里有幾種方法。 requests 庫使這變得非常容易(您必須pip install requests ):

import requests

word_site = "https://www.mit.edu/~ecprice/wordlist.10000"

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

或者,您可以使用內置的 urllib2。

import urllib2

word_site = "https://www.mit.edu/~ecprice/wordlist.10000"

response = urllib2.urlopen(word_site)
txt = response.read()
WORDS = txt.splitlines()

Python 3 的解決方案

對於 Python3,以下代碼從網絡上抓取單詞列表並返回一個列表。 答案基於 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()

輸出:

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

並生成(因為這是我的目標)1)僅大寫單詞的列表,2)僅“類似名稱”的單詞,以及 3)聽起來很現實但有趣的隨機名稱:

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

還有一些隨機的名字:

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

有一個包random_word可以很方便地實現這個請求:

 $ 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()

網上有很多字典文件——如果你在 linux 上,很多(所有?)發行版都帶有 /etc/dictionaries-common/words 文件,你可以輕松解析( words = open('/etc/dictionaries-common/words').readlines() ,例如)供使用。

在線獲取單詞

from urllib.request import Request, urlopen
url="https://svnweb.freebsd.org/csrg/share/dict/words?revision=61569&view=co"
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})

web_byte = urlopen(req).read()

webpage = web_byte.decode('utf-8')
print(webpage)

隨機化前 500 個單詞

from urllib.request import Request, urlopen
import random


url="https://svnweb.freebsd.org/csrg/share/dict/words?revision=61569&view=co"
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})

web_byte = urlopen(req).read()

webpage = web_byte.decode('utf-8')
first500 = webpage[:500].split("\n")
random.shuffle(first500)
print(first500)

輸出

['abnegation', 'able', 'aborning', 'Abigail', 'Abidjan', 'ablaze', 'abolish', 'abbe', 'above', 'abort', 'aberrant', 'aboriginal', ' aborigine', 'Aberdeen', 'Abbott', 'Abernathy', 'aback', 'abate', 'abominate', 'AAA', 'abc', 'abed', 'abhorred', 'abolition', 'ablate' , 'abbey', 'abbot', 'Abelson', 'ABA', 'Abner', 'abduct', 'aboard', 'Abo', 'abalone', 'a', 'abhorrent', 'Abelian', ' aardvark','Aarhus','Abe','abjure','abeyance','Abel','abetting','abash','AAAS','abdicate','abbreviate','abnormal','abject' , '算盤', 'abide', 'abominable', 'abode', 'abandon', 'abase', 'ababa', 'abdominal', 'abet', 'abbas', 'abdomen', 'abdomen', '教唆”、“比比皆是”、“亞倫”、“憎惡”、“洗禮”、“禁欲”、“關於”]

import random
import string

letters = string.ascii_letters
x = "".join(random.sample(letters,5))
print(x)

上面, letters將包含所有 ASCII 字母字符(小寫和大寫),如下所示:

>>> print(letters)
>>> 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

使用random.sample將根據您想要的數字( random.sample(<string>, <# of random parts> string random.sample(<string>, <# of random parts> )。

>>> random.sample(letters, 5)
>>> ['j', 'e', 'u', 'g', 'k']

最后,

x = "".join(...)將因為 "" 將返回的列表連接在一起,沒有空格"". 可以改為" ". 如果你想在每個字母之間有空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM