2017-02-13 17 views
0

私は抵抗色コードを覚えるのに役立つ教育的ツールを作成しています。 GUI用にTkinterを使用しています。これは私のコードで問題関数である:明確化のためループでユーザスコアが更新されない

score = 0 

def nextResistor(): 
    global score 
    global timeLeft 

    x = random.randint(0,9) 
    y = random.randint(0,9) 
    z = random.randint(0,9) 
    t = random.randint(0,2) 

    xcolor = getColor(x) 
    ycolor = getColor(y) 
    zcolor = getColor(z) 
    tcolor, tol = getTolerance(t) 

    if timeLeft > 0: 
     entryBox1.focus_set() 
     entryBox2.focus_set() 
     entryBox3.focus_set() 
     entryBox4.focus_set() 

     xguess = entryBox1.get() 
     yguess = entryBox2.get() 
     zguess = entryBox3.get() 
     tguess = entryBox4.get() 

     # Show the label 

     if xguess == x and yguess == y and zguess == z and tguess == tol: 
      score = score + 1 

     else: 
      score += 0 

     print(str(xguess), str(yguess), str(zguess), str(tguess)) 

     entryBox1.delete(0, Tkinter.END) 
     entryBox2.delete(0, Tkinter.END) 
     entryBox3.delete(0, Tkinter.END) 
     entryBox4.delete(0, Tkinter.END) 

     rlabel.config(text=xcolor + " " + ycolor + " " + zcolor + " " + tcolor) 

     scoreLabel.config(text="Score: " + str(score)) 
     print(str(score)) 

、私の関数getColor()は、単にそれが与えられた整数の引数に対応する文字列を返します。 getTolerance()は同じことをしますが、それ以外は整数tolを返します。ユーザの入力が正しい推測であっても、すなわち条件が真であっても、スコア値は変更されない。私は現在、私のデバッグプロセスを助けるために推測とスコアを印刷していますが、私は運がありませんでした。ここに私の出力のサンプルです:

enter image description here

私は、これは単純なものである疑いがあるが、私はそれを見つけようと、私の髪をリッピングしています。 Tkinterのメインループは本質的にこのプログラムを再実行しますが、時間は依然としてゼロよりも大きいです。

編集:実際の問題は、xguessyguessなどが実際にユーザーの入力と一致しないことです。これをどうやって解決するのですか?

EDIT#2:ランダムな回答が生成されたときと、ユーザーが対応する回答を求められたときの間にオフセットがあります。プログラムでは、ユーザーはループを開始するために 'Enter'を押すように促されます。下のスクリーン・シートでは、ユーザーが答えを求める前に、その答えがループで表示されていることを明確に確認できます。出力は形式(答え、推測)です。

enter image description here

+0

'type(xguess)== str;タイプ(x)== int' –

+0

私はあなたが無作為の答えを生成し、同じ関数で入力を取得していると懸念しています。質問の生成と入力内容が正しいかどうかを確認する間に何か入力する時間は全くありません。 –

答えて

0

コール

xguess = entryBox1.get() 
    yguess = entryBox2.get() 
    zguess = entryBox3.get() 
    tguess = entryBox4.get() 

ユーザーがリターンを押すか、そしてチェックし提出するためのボタンを作成した後。なぜなら、nextResistorが呼び出されたときにボックスを照会しているからです。

+0

私のプログラムの最後には、 'root.bind( ''、startGame)'があります。 'startGame()'は他のタスクの中で 'nextResistor()'を含む関数です。これでは十分ではありませんか?私は、ユーザーの入力と回答の間には相違があることがわかります。 – zhutchens1

+0

IntBoxがentryBoxnに設定されていますか? intを受け取っていますか?あなたはxguess = int(entryBox1.get())でキャストすることができます –

+0

私はまだ問題が起こると思います。NextResistorが呼び出されるたびにx、y、z、tの直後に新しい乱数セットが作成されますボックスの値を確認してください。あなたのコードには、ユーザーがデータを入力するまでプログラムを待っているものは何もありません。 –

関連する問題