2012-08-01 3 views
11

Sıralama türünde bir şey yapıyorum, ne olur, şu anki skorla skoru karşılaştırırsam ve skor o kadar düşükse o zaman oyuncu yüksek bir puana sahip olur, ancak bunu kullanırken Burada koduPython'dan daha az, python

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

Ancak skor 4 ve dizi [x] 2 olsa bile if ifadesi hala yapılır?

Yanlış bir şey yapıyorum?

Anladığım kadarıyla, eğer skor 4 ve dizi [x] 2 ise, 4, 2'den büyüktür, bu da False anlamına gelir? İşte tam kod


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 

bu = 4 ve dizi oluşur mı [1, 2]

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

cevap

21

ara emin olmak için eğer basar de o skor ve dizi [x] sayısal tiplerdir. Bir tam sayıyı Python 2.x'te yüreklendiren bir dizeyle karşılaştırabilirsiniz.

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

düzenleme

ayrıntılı açıklaması: How does Python compare string and int?

+3

kolay yolu kontrol etmek için: 'baskı Repr (skor), Repr (dizi [x]) '. Ayrıca: Python 3'te, 'TypeError: türetilmemiş türler: int() Dougal

+0

Niçin böyle düşünmedim D: – FabianCook

+0

"print type (score)" özelliğini kullanarak 'ile geri dönebileceğimi düşünüyorum, ama bunu gerçekleştiren diziyi düşünüyorum. – FabianCook