2017-08-26 6 views
0

私はシーケンシャルな方法で質問をするメッセンジャーボットを持っています。質問を追跡するために、私はセッション変数であるカウンターを使用しています。しかし、私はセッション[カウンター ']を増やすと変化しません。セッション変数は増分されても変更されません

ここに論理があります。このコードが動作しても、私のボットに同じロジックを実装すると、なぜ動作しないのか分かりません。

question_dict = { 
     'Locq0':[{'question':"Some question 0",'options':(["Continue","@continue"])}], 
     'Locq1':[{'question':"Some question 1",'options':(["Continue","@continue"])}], 
     'Locq2':[{'question':"Some question 2",'options':(["Continue","@continue"])}], 
} 

def main(): 
    session['counter'] = 0 
    if user_payload == "@continue": 
     increment() 

def increment(): 
    if session['counter'] <= len(question_dict): 
     session['counter'] += 1 
     quiz(session['counter']) 

def quiz(counter): 
    question = question_dict['Locq{}'.format(counter)][0]['question'] 
    option = question_dict['Locq{}'.format(counter)][0]['options'] 
    # display the question and option 
    print(question) 
    print(option) 

バックボーンに戻るユーザーが最初にボットを使用すると、セッション変数がsession['counter']に作成され、0に初期化されます。ボットは質問を開始し、次の質問に移動するにはsession['counter'] +=1を増やす必要があります。しかし、それは発生しません。session['counter']は、increment()関数が呼び出されても常に0です。

何か間違っていますか?それとも、適切な方法がありますか?このアプリはFlaskを使用して提供されます。

答えて

0

メインメソッドが呼び出されたときにエラーが発生していると思います。最初に辞書を初期化してから、それを増やしてみてください。
次のコードはエラーをスロー

def main(): 
    session['counter'] = 0 
    if user_payload == "@continue": 
     increment() 

def main(): 
     session = {'counter':0} 
     if user_payload == "@continue": 
      increment() 
+0

おかげで、次のコードを試してみてください!しかし、これは問題ではありません。フォームを持つWebアプリケーションで同じロジックを使用するとうまく動作します。 @ Kalyan Reddy –

+0

次に、セッションのカウンタをコードのどこかで0に更新している可能性があります。グローバル辞書としてセッション辞書を変更してみてください。 –

+0

セッションはフラスコ辞書であり、カウンタはセッション変数です。マルチカットサーバーはグローバルを追跡できないので、私はセッションを使い始めました。あなたはその質問に従うことができますhttps://stackoverflow.com/questions/45795977/python3-incrementing-a-global-variable-causes-bot-to-randomize-responses-when @ Kalyan Reddy –

関連する問題