2014-05-21 3 views
-3

Une alternance est un mot dont les lettres, prises alternativement dans une séquence stricte, et utilisées dans le même ordre que le mot original, composent au moins deux autres mots. Toutes les lettres doivent être utilisées, mais les mots les plus petits n'ont pas nécessairement la même longueur. Par exemple, un mot de sept lettres où chaque seconde lettre est utilisée produira un mot de quatre lettres et un mot de trois lettres. Voici deux exemples:Code Python pour mots alternés

"tableau": rend "mauvais" et "ou". "taille": fait "esprit" et "cul". En utilisant la liste de mots au http://www.puzzlers.org/pub/wordlists/unixdict.txt, écrivez un programme qui parcourt chaque mot de la liste et essaie de faire deux mots plus petits en utilisant chaque seconde lettre. Les mots plus petits doivent également être membres de la liste. Imprimez les mots à l'écran de la manière ci-dessus.

+0

Vous avez oublié de poser une question. –

Répondre

0

un exemple de ce que vous avez essayé jusqu'ici pourrait aider, ce n'est pas l'échange de devoirs.

En fait, vous allez probablement cette question zappé par quelqu'un, mais depuis son un peu de golf de code est ici un hack rapide à de moi (non testé)

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) 

bien sûr, vous auriez J'ai besoin d'un ensemble de TOUS les mots, pas seulement ceux que j'ai montrés ici, et pour trouver des alternatives de travail, vous devez parcourir l'ensemble des mots appelant alternade() et ignorer ceux qui renvoient une liste vide.

Une alternative (...) pourrait aussi être changée pour renvoyer un booléen au lieu des mots qui composent l'alternance.

(je suis sûr qu'il ya des gourous Python là-bas qui peut réécrire ce d'une manière plus Pythonic, mais je ne l'ai pas vraiment utilisé professionnellement Python depuis quelques années maintenant)

0

Vous pouvez essayer ce code:

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