Question

J'utilise trop à mon goût le motif (après chaque branche de solution possible de la recherche).Ceci est le code pour trouver des mots à tourbillon dans un carré donné.Il y avait un bug si les mots ne sont pas présélectionnés pour inclure uniquement ceux dont les paires de lettres sont des voisins, que je me suis fixé maintenant en changeant comparrision, pas à POS sur POS n'est pas.

def word_path(word,used=[],pos=None):
    if not word:
        yield False
        return
    else:
        correct_neighbour = [neigh for p,neigh in neighbour_set
                  if (not pos or pos==p) and (neigh not in used) and boggle[neigh]==word[0] ]
        for i in correct_neighbour:
            used_copy=used[:]+[i]
            if boggle[i]==word:
                yield used_copy
                return
            else:
                for solution in  word_path(word[1:],used_copy,pos=i) or (False,):
                    if solution:
                        yield solution
                    return

Y a-t-il une meilleure alternative au générateur qui s'arrête après une réponse a été trouvée?

Solution basé sur pourquoi ne pas utiliser retour

Enfin, il m'a été conçu et la séquence renvoyée est itérateur, peu importe qu'il a été renvoyé non donné de la valeur.J'ai donc changé mon code Word_Path pour utiliser le retour et nettoyé les expressions en général.Au lieu de donner aucun ou faux la fonction renvoie (FALSE,).Ensuite, je n'ai pas de problème avec aucune non acceptée pour la déclaration.

def word_path(word,used=[],pos=None):
if word:
    correct_neighbour = [neigh
                         for p,neigh in neighbour_set
                         if ((pos is None or pos==p) and
                             (neigh not in used) and
                             boggle[neigh]==word[0]
                             )
                         ]
    for i in correct_neighbour:
        used_copy=used[:]+[i]
        if len(word)==1:
            if boggle[i]==word:
                return (used_copy,)
        else:
            for solution in  word_path(word[1:],used_copy,pos=i):
                if solution:
                    return (solution,)
return (False,)

Était-ce utile?

La solution

Pourquoi faites-vous un générateur en premier lieu lorsque vous ne voulez qu'une réponse?Il suffit de chercher des réponses et de renvoyer le premier au lieu de le céder.

Autres conseils

return iter([anwser])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top