質問

私はパターンを味わうにはあまりにも使い過ぎています(検索の可能なすべての解決策分岐の後)。これは、与えられた正方形でBogle単語を見つけるためのコードです。単語が文字のペアが隣接している隣人のみを含めるために事前に選択されていない場合、POSのPOSの比較を変更することによって今修正されたものではない場合、そのバグがありました。

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
.

回答が見つかった後に停止する発電機を作るためのより良い代替品はありますか?

を使用しない理由に基づく解

最後にそれが返されても返された値が得られなかった場合、返されたシーケンスはイテレータです。だから私は私のword_pathコードを変更してReturnを使用して式をクリーンアップしました。関数はnoneまたはfalseを与える代わりに(false、)。それから私はステートメントのために受け入れられなかったことのないものではありません。

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,)
.

役に立ちましたか?

解決

あなたが一つの答えだけを望んでいたとき、なぜあなたはそれを最初の場所で発電機にしますか?ただ回答を検索し、それを降伏する代わりに最初のものを返します。

他のヒント

return iter([anwser])
.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top