我正在嘗試撰寫一個 Python 腳本,它或多或少地模仿紐約時報的游戲 Spelling Bee(如果你玩過的話)。我有一個代碼可以列印出字母串列中的所有單詞,但我希望能夠重復字母。例如,fsde什么都不產生,但我想feed成為結果的一部分。另一個例子是etmxr要產生的字母extreme(如果語言有一個允許的單詞,基本上任何字母都可以重復盡可能多次)。這是我到目前為止使用的代碼itertools:
import itertools
import enchant
d = enchant.Dict("en_US")
answer = []
user_input = input("Input letters here: ")
center = input("Input center letter here: ")
while len(center)>1 or center not in user_input:
center = input("Either you entered a letter not in the first input, or you entered more than one letter. Try again: ")
letters = [x.lower() for x in user_input]
words = d
for t in range(4, len(user_input)):
for m in itertools.permutations(user_input, t):
a = "".join(m)
if center in a:
if d.check(a):
answer.append(a)
print(answer)
現在你只需輸入字母并從中獲取所有單詞,這就是我現在想要的。如果有任何方法可以獲得雙字母或三字母,我將不勝感激。
我已經搜索了 google 和 stackoverflow 無濟于事,我從視頻中獲得了原始代碼,但它沒有重復的字母,即使我現在完全理解permutations我不能得到多個字母哈哈。我已經嘗試過product但combination沒有運氣,還有更多,但我認為這只是我錯了的方法論。
uj5u.com熱心網友回復:
看起來你不需要任何組合,只是一個簡單的集合比較:
letters = 'etmxr'
with open('/usr/share/dict/words') as fp:
for word in fp:
if set(word.strip()).issubset(letters):
print(word, end='')
結果:
e
eer
em
eme
emeer
emmer
emmet
er
ere
err
ex
exert
exter
extreme
m
me
meet
meeter
...etc
uj5u.com熱心網友回復:
我不熟悉附魔模塊,但是如果您可以遍歷字典中的所有單詞,這應該可以:
user_letter_set = set(user_input)
valid_words = [word for word in d if user_letter_set >= set(word)]
集合比較運算子>=檢查是否set(word)是 的子集user_letter_set。或者換句話說,如果user_letter_set包含在 中找到的每種型別的字母set(word)。
uj5u.com熱心網友回復:
這是集合的另一種方式:
words={}
with open('/usr/share/dict/words') as wf:
for w in wf:
w=w.lower().rstrip()
key=frozenset(w)
words.setdefault(key, set()).add(w)
tgt=frozenset('etmxr')
for fs in words:
if fs<=tgt:
k=''.join(sorted(fs))
print(f"\"{k}\"=>{words[fs]}")
印刷:
"e"=>{'e'}
"er"=>{'eer', 'er', 're', 'reree', 'ree', 'ere', 'err'}
"em"=>{'emm', 'me', 'em', 'eme', 'mem'}
"emr"=>{'reem', 'mer', 'emmer', 'emeer', 'mere'}
"emt"=>{'emmet', 'emmett', 'teem', 'mete', 'met', 'meet'}
"ex"=>{'ex'}
"ertx"=>{'exert', 'exter'}
"emrtx"=>{'extreme'}
"m"=>{'m'}
"emrt"=>{'retem', 'meter', 'teemer', 'remeet', 'term', 'meeter', 'metrete', 'termer'}
"mr"=>{'mr'}
"r"=>{'r'}
"ert"=>{'teeterer', 'tree', 'retree', 'tret', 'teerer', 'teeter', 'ret', 'terret', 'reet', 'terete', 'tetter', 'retter', 'teer'}
"emrx"=>{'remex'}
"erx"=>{'rex'}
"t"=>{'t'}
"et"=>{'tete', 'teet', 'tee', 'te'}
"etx"=>{'text'}
"x"=>{'x'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/521877.html
標籤:Python细绳排列重复
