ループするデータベースがあり、特定の条件に基づいて、関連するデータベースエントリを作成した辞書に送信します。次に、このディクショナリからランダムに1つを選択し、それをリストに格納し、ディクショナリをクリアして、増分変数を使用してすべてをやり直したいと思います。参考までに、['StartNoteNum']などはコストデータベース内の単なる列名です。
ただし、ループ全体で最初は正常に機能しますが、コード内の任意の場所(whileループの内側または外側)で辞書をクリアしようとすると、増分値に基づいて辞書が再入力されることはありません。すべきですが。正しく再入力されることを確認するために、初期値をwhileループで発生する可能性のあるすべての値に設定しました。各値はループ全体で最初に機能しますが、循環しようとすると失敗します。私が得るエラーは、ランダム関数が空の辞書からプルできないことです。Grr...ここにコードがあります。
def compute_policy(clean_midi, cost_database):
note = 0 #Setting up starting variables.
total_score = []
current_finger = 1
path = [1]
next_move = {}
while note <= 2:
current_note = clean_midi[note] #get note-pair for scoring
dest_note = clean_midi[note+1]
for each in cost_database: #find all relevant DB entries
if (int(each['StartNoteNum']) == current_note
and int(each['DestNoteNum']) == dest_note
and int(each['StartFing']) == current_finger):
next_move[int(each['DestFing'])] = int(each['Score']) #move relevant entries to separate "bin"
policy_choice = random.choice(next_move.keys()) #choose one at random
total_score.append(next_move[policy_choice]) #track the scores for each choice in a list
path.append(policy_choice) #track the chosen finger
current_finger = policy_choice #update finger variable
note += 1
path.append(current_finger) #append last finger since the loop won't run again
return total_score, path
ここでの助けをいただければ幸いです。ありがとう。