交替是一个单词,其中的字母以严格的顺序交替,并以与原始单词相同的顺序使用,构成至少两个其他单词。必须使用所有字母,但较小的字不一定具有相同的长度。例如,使用每个第二个字母的七个字母的单词将产生一个四个字母的单词和一个三个字母的单词。以下是两个例子:
“board”:使“坏”和“或”。 “腰”:使“机智”和“屁股”。 使用http://www.puzzlers.org/pub/wordlists/unixdict.txt处的单词列表,编写一个程序,遍历列表中的每个单词,并尝试使用每两个字母制作两个较小的单词。较小的单词也必须是列表的成员。以上述方式将文字打印到屏幕上。
答案 0 :(得分:0)
到目前为止你尝试过的一些例子可能有所帮助,这不是家庭作业交流。
事实上你可能会被某个人扯掉这个问题,但是因为这里有一些代码高尔夫球,所以对我来说是一个很快的黑客攻击(未经测试)
def alternade(text, setAllWords):
""" returns a tuple containing the two words that form the alternade
or None if the word is not an alternade
"""
listA = [];
listB = [];
textLength = len(text);
# prevent selecting character out of range by ensuring string is even
if textLength % 2:
textLength += 1
text = text + " "
for i in range( 0, len(text), 2 ):
listA.append(text[i])
listB.append(text[i+1])
strA = ''.join(listA).strip()
strB = ''.join(listB).strip()
if strA in setAllWords and strB in setAllWords:
return (strA, strB)
return None
# To do populate this set with ALL words in source word list:
setAllWords = set([ "ass", "bad", "or", "wit", "dog", "etc..." ])
print alternade("board", setAllWords)
print alternade("waists", setAllWords)
当然,你需要一组ALL单词,而不仅仅是我在这里展示的几个单词,并找到你需要循环通过调用alternade()并忽略那些单词的所有单词的工作交替。返回一个空列表。
也可以改变alternade(...)来返回布尔值而不是构成交替的组成单词。
(我确信那里有Python专家可以用更Pythonic的方式重写它,但我几年没有真正专业地使用Python了)
答案 1 :(得分:0)
您可以尝试以下代码:
f = open("http://www.puzzlers.org/pub/wordlists/unixdict.txt")
for line in f:
line = line.strip()
length = len(line)
word1 = ""
word2 = ""
for i in range(0, length,2):
word1 += line[i]
try:
word2 += line[i+1]
except:
pass
word1 = word1.strip()
word2 = word2.strip()
print ("==>"), word1, ("and"), word2