2016-09-10 13 views
0

これは推測ゲームであるはずです。ユーザーがプリセット値(10)より高い数値を送信すると、下がると表示されます。また、ユーザーが低い番号を送信すると、より高いと表示されます。私が直面している問題は、すべての整数または文字列を入力するだけで、より高いレベルに進むことができるということです。シンプルな推測ゲームが動作しない

また、私が文字列に変換したのは、整数の場合にエラーが発生するためです。

from tkinter import * 

# Simple guessing game 
window = Tk() 

def number(): 
    if typed == key: 
     print("This is the correct key") 
    elif typed > key: 
     print("Go lower!") 
    else: 
     print("Go higher!") 

e = Entry(window) 
e.pack() 

key = str(10) 
typed = e.get() 

b = Button(window, text="Submit", command=number) 
b.pack() 

window.mainloop() 
+1

あなたは決して 'typed'と' key'の値を更新しません。それらは一度計算され、いかなる種類のコールバックでも決して変更されません。また、文字列を比較すると、予期しない動作につながります。詳細については、[Pythonで使用される文字列比較のテクニック](http://stackoverflow.com/questions/4806911/string-comparison-technique-used-by-python)を参照してください。 –

答えて

0

各送信時に値を更新してチェックする必要があります。それが動作しなかった理由は、プログラム開始時にtypede.get()に割り当てたためです(空の文字列です)。クリックごとに更新するか、関数内にtypedを入れる必要があります。

また、keyを整数にして、エントリ値を整数に変換する必要があります。そうしないと、文字列を辞書的に比較しています。また、以下に示すように、ユーザーが整数を入力しない場合は、try/exceptをハンドルに追加することもできます。

私は個人的に関数にエントリの値を渡すとクリックでチェックを処理するためにラムダを使用します。

from tkinter import * 

# Simple guessing game 
window = Tk() 

def number(num): # Passing in string instead of using typed 
    try: 
     intNum = int(num) # Here we convert num to integer for comparison 
     if intNum == key: 
      print("This is the correct key") 
     elif intNum > key: 
      print("Go lower!") 
     else: 
      print("Go higher!") 
    except ValueError: # If user doesn't enter a convertable integer, then print "Not an integer!" 
     print("Not an integer!") 

e = Entry(window) 
e.pack() 

key = 10 # Key is an integer here! 

b = Button(window, text="Submit", command=lambda: number(e.get())) # Here's a lambda where we pass in e.get() to check 
b.pack() 

window.mainloop() 

だから今、それはその後、typedを使用しての代わりに、比較に値を渡します。 lambda: number(num)は、コマンド引数に引数を渡すだけです。ラムダに関するdocsへのリンクがあります。ラムダなしでは、here'sは、関数の引数を持たないデモです。

+0

ちょっと、私はこのコードを試しましたが、2と9の間の任意の数値を入力すると "下に行く"と表示されます。 – Vitalynx

+0

@ user3081954編集しました。 – Li357

+0

はい、動作します。ラムダを使わずにこのコードを書く方法があるのだろうか? – Vitalynx