2012-04-13 20 views
0

私はこのクイズのスコアと参加者のIDのペアを格納する辞書を持っています。私はこのプログラムはクイズのスコアのペアを入力してIDをルックアップするようにしたい辞書のタプルへのアクセス

scoredict = {('83', '93'): '81937', ('88', '86'): '33576', ('96', '97'): '01084', 
('81', '95'): '48534', ('84', '72'): '11235', ('77', '80'): '01835', ('90', '83'): 
'39488', ('75', '74'): '31049', ('80', '62'): '10188', ('85', '86'): '63011', 
('66', '89'): '58272'} 

:構造は、{ID(quiz1、quiz2)}です。たとえば、ユーザーがクイズ1とクイズ2の入力83と93を入力すると、81937が返されます。私はこの48時間以来この作業を行っていますが、コードは機能しませんでした...

両方のクイズで最も近いスコアを見つけてIDを印刷することは可能ですか?私はすでにあなたのソリューションを検証

答えて

4

ipythonで動作します:

In [1]: scoredict = {('83', '93'): '81937', ('88', '86'): '33576', ('96', '97'): '01084', 
    ...: ('81', '95'): '48534', ('84', '72'): '11235', ('77', '80'): '01835', ('90', '83'): 
    ...: '39488', ('75', '74'): '31049', ('80', '62'): '10188', ('85', '86'): '63011', 
    ...: ('66', '89'): '58272'} 

In [2]: scoredict['83','93'] 
Out[2]: '81937' 
+0

オーマイ悪い。知らせてくれてありがとうございます! – DarsAE

0

を単純に実行します。最も近いスコアについては

>>> scoredict[(score1,score2)] 
1

、あなたはこれを試すことができます。

test = (83, 93) 

deviation = float('inf') 
best_match = None 

for score1, score2 in scoredict: 
    error = abs(int(score1) - test[0]) + abs(int(score2) - test[1]) 

    if error < deviation: 
    deviation = error 
    best_match = (score1, score2) 

print scoredict[best_match] 
+0

ValueError:基数10のint()のリテラルが無効です: '-140.0' – DarsAE

+0

浮動小数点を使用する場合は、 'int()'の代わりに 'float()'を使用してください。数字。 – Blender

関連する問題