我正在编写一个python脚本,到目前为止看起来像这样:
import sys
fname = sys.argv[1]
letters = str.lower(sys.argv[2])
letaray = list(letters)
charcount = int(letters.count("")) - 1
lines = tuple(open(fname, 'r'))
wordlist = map(str.lower,open(fname).read().splitlines())
scores = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2, "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3, "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1, "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4, "x": 8, "z": 10}
# char count
if charcount != 7:
print "Not 7 characters"
exit()
def file_len(fname):
with open(fname) as f:
for i, l in enumerate(f):
pass
return i + 1
file_len(fname)
该程序由以下人员运行:
python main.py wordlist.txt XXXXXXX
其中X
是拼字游戏板的字母,例如:AGJBTGE
。
然后将这些字母解析为如下数组:
['a', 'g', 'j', 'b', 't', 'g', 'e']
然后将文本文件逐行抛出到变量wordlist
中。
如何创建另一个列表,其中包含可以从字母组成的所有可能的单词组合?
例如:age, jab
等。
注意:只有1 G
,只能使用1 G
,如果有2 G
,则只能使用2 {}等等。我可能没有提供所需的一切,请告诉我。
答案 0 :(得分:2)
为了做到这一点,你需要一个单词和一个函数的语料库来比较给定的list
个字符是否包含在另一个字符列表中。
由于S.O上已经存在Testing if a list contains another list with Python,我不会回答这个问题,但是,我会帮助你处理一些单词。
您可以在网络上的许多地方找到list of words(如果您使用的是Unix,也可以在您的计算机上),或者您可以使用自己的一些(例如wordlist.txt
)和以下函数应适用于任何换行分隔文件。
对于本演示,我使用/usr/share/dict/british-english
作为包含单词
# enter the file name you want to use e.x wordlist.txt
filename = "/usr/share/dict/british-english"
由于这些文件通常很大,你可以将这个生成器函数用于yield
单词然后可以处理(不要担心发生器 ,现在就使用它们) :-)):
def yield_words():
with open(filename, "r") as f:
for word in f:
yield word
所以,假设你有一个字符列表:
l = list("HelloWorld")
然后,您可以遍历此生成器并对每个单词进行比较,并评估word
中是否包含单词l
:
valid_words = []
for word in yield_words():
# define a contains function
# that returns True if l contains word
if contains(l, word):
valid_words.append(word)
这应该是一个很好的起点,尽管我愿意帮助,但是使用我添加的链接来找到一组好的(附加)单词以及一个可以用来比较列表的函数,那你就准备好了。
答案 1 :(得分:0)
from itertools import permutations
string ='AGJBTGE'
string = string.lower()
for r in range(1,len(string)+1):
for word in permutations(string,r):
print(''.join(word))
r是排列函数的选项输入,用于定义输出的长度。
你可以添加if语句来检查单词。
答案 2 :(得分:0)
您可以使用itertools中的组合,然后使用链将所有组合添加到单个列表中
In [1]: from itertools import combinations, chain
In [2]: word = "AGJBTGE"
In [3]: word_combos = [list(combinations(word, r)) for r in range(1, len(word)+1)]
In [4]: word_combos_chained = [''.join(wl) for wl in list(chain(*word_combos))]
In [5]: word_combos_chained[25:35]
Out[5]: ['TG', 'TE', 'GE', 'AGJ', 'AGB', 'AGT', 'AGG', 'AGE', 'AJB', 'AJT']