2012-08-01 12 views
11

私はランキングタイプのことをやっていますが、私は現在のスコアとスコアを比較し、スコアが現在のスコアより低い場合、プレーヤーは高いスコアを持っていますが、ここでのコード以下より大きい、python

 print "Score = " + str(score) + ", Compared to = " + str(array[x]) 
     if score < array[x]: 
       #Do stuff here 

スコアが4で、配列[x]が2であっても、if文はまだ実行されていますか?

何か間違っていますか?

スコア4と配列[x]が2の場合、4は2よりも大きいので、Falseに戻ってしまうことを理解していますか?


相続人フルコード

def getRank(array, score): 
    rank = 0 
    rankSet = False 
    for x in range(0, len(array)): 
     print "Score = " + str(score) + ", Compared to = " + str(array[x]) 
     if score < array[x]: 
      if not rankSet: 
       rank = x 
       print "Set rank to: " + str(rank) 
       rankSet = True 
     elif score == array[x] or score > array[x]: 
      rank += 1 
      print "Rank higher than " + str(x) 
    print "Rank = " + str(rank) 
    return rank 

それはスコア= 4の場合は、これを印刷し、アレイから構成されている[1、2]を確認両方ことを確認する

Score = 4, Compared to = 1 
Set rank to: 0 
Score = 4, Compared to = 2 
Rank = 0 

答えて

21

チェックscoreとarray [x]は数値型です。整数を文字列と比較している可能性があります。これはPython 2.xで悲しいことに可能です。

>>> 2 < "2" 
True 
>>> 2 > "2" 
False 
>>> 2 == "2" 
False 

編集

さらに説明:How does Python compare string and int?

+3

最も簡単な方法は確認する: '印刷のrepr(スコア)のrepr(配列[X])'。また、Python 3では、 'TypeError:unorderable型を取得します。int() Dougal

+0

私はそれについて考えませんでしたD:私は – FabianCook

+0

を使って 'print type(score)'を使うことができると思いますが、それは ''と一緒に戻ってきます。 – FabianCook

関連する問題