0

単純な暗号文ソルバーを作成していますが、再帰関数を「展開」するのに問題があります。他の理由で展開する必要があります。そうしないと、再帰的になります。

アイデアは次のとおりです。さまざまな数のリストがあり、それぞれに単語が含まれています。関数の仕事は、各リストを調べ、単語が現在のアルファベット設定に適合することを確認した後、そのスコアを見つけることです。したがって、次のリストがある場合:

LIST1: [the, and, can,...]
LIST2: [kids, cars, knee,...]
LIST3: [talks, walks, music,...]
...

そして、関数は各リストを(順番に)調べて、最適な文を見つけようとする必要があります。(比較するために呼び出すスコアリングアルゴリズムがあります。)最初のリストの最初の単語から開始し、機能する単語が見つかるまで2番目のリストを繰り返し、次にその中の単語が見つかるまで3番目のリストの繰り返しを開始します。動作するリストなど。3番目のリストの単語がなくなると、2番目のリストに戻って次の動作する単語を見つけ、完了するまでプロセスを続行する必要があります。

Product関数を使用してみましたが、正しく機能しません...可能なすべての組み合わせが得られ、技術的には機能しますが、あまり効率的ではありません。

def find_sentence():
cycle through first list:
cycle through second list:
if word works:
start cycling through third word list.
else: 
keep cycling through 2nd word list.
...

すべての単語リストを調べて、しきい値を超えるスコアを見つけるまで続けます。

何か助けはありますか?

バクリウの回答から:迅速な返信ありがとうございます!私はPythonが得意ではありませんが、これが必要な方法で機能しているとは思いません。あなたの解決策は、うまくいく(またはスコアに合う)すべての単語を見つけることが目標であるという点でProductメソッドに似ています。使用する必要のあるメソッドは次のとおりです。1。最初のリストの最初の単語から始めます。2.次の単語リストの反復を開始します。3.これらの単語のいずれかが機能したら、3番目のリストなどを調べ始めます。4。最後(単語の最後のリストまで)に到達して候補を見つけたら、次のように解決策があります。動作する各リストに1つの単語があります。5.たとえば、リスト3の単語が収まらない場合は、リスト2に戻り、そのリストを検索し続け、機能する次の単語を見つけて、リスト3をもう一度開始し、何も機能しないまで続行する必要があります。もしくは、あなた' 終わりに達しました。これが明確であることを願っています。何か明確にできることがあれば教えてください。

4

1 に答える 1

0

実際、ここでは再帰はまったく必要ありません。

def find_sentence(*variable_number_of_lists):
    out = []
    for eachlist in variable_number_of_lists:
        for word in eachlist:
           if scoreword(out, word) > threshhold:
               # presumably, your 'scoreword' function would take in the current
               # list of okayed words in order to find the most recent one for use
               # in your scoring, if I've understood the problem correctly
               out.append(word)
               break

    return out
于 2012-12-03T17:06:35.050 に答える