2012-08-01 38 views
11

Estoy haciendo un tipo de ranking, lo que sucede es que comparo el puntaje con el puntaje actual y si el puntaje es más bajo que el actual, entonces el jugador tiene un puntaje alto, pero al usar este código aquíMayor que menos, python

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

Pero incluso si el puntaje es 4 y el conjunto [x] es 2, la instrucción if todavía está hecha?

¿Estoy haciendo algo mal?

Según tengo entendido, si la puntuación 4 y la matriz [x] son ​​2, entonces 4 es mayor que 2, lo que significa que vuelve False?


Aquí está el código completo

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 

imprime esto si puntuación = 4 y la matriz se compone de [1, 2]

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

Respuesta

21

Compruebe para asegurarse de que tanto puntaje y matriz [x] son ​​tipos numéricos. Es posible que esté comparando un número entero con una cadena ... que es desgarradoramente posible en Python 2.x.

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

Editar

Explicación adicional: How does Python compare string and int?

+3

manera más fácil de comprobar: 'impresión repr (score), repr (array [x])'. Además: en Python 3, obtienes 'TypeError: tipos no pedidos: int() Dougal

+0

¿Por qué no pensé en eso? D: Creo que podría ser – FabianCook

+0

usando 'tipo de impresión (puntuación)' vuelve con '' pero creo que es la matriz que lo está haciendo. – FabianCook

Cuestiones relacionadas