Sie sind auf Seite 1von 8

15-APRENDIENDO PYTHON DESDE CERO (comparaciones) Cualquier objeto de python puede compararse, veremos a continuacion las diferentes posibilidades

en las comparaciones. Abramos el WING o el editor que utilicemos y vayamos a los ejemplos: En python no debemos confudirnos, el signo igual simple, refiere a la asignacion como hemos visto en las partes anteriores, si yo hago pepe= '90' es una asignacion, a la variable pepe, le asigno la string '90', pero existe para las comparaciones el signo de doble igual == que sirve para testear si un objeto es igual a otro y nos devolvera verdadero si lo es o falso, si no es igual. A= [67,99,'pirulo'] B= [67,99] C=['pirulo'] alli tenemos tres objetos listas, vemos que asignamos valores a cada una de ellas mediante el simple signo igual.

Las copio en la ventana interactiva o shell del WING, ahora si comparo A con B a ver si son iguales mediante el doble signo igual A==B

Vemos que al no ser A igual a B, el resultado es False o falso. Ahora si comparo A con B+C concatenadas, es obvio que el resultado sera True pues es una igualdad ya que a B le faltaba solo el item 'pirulo' y C es justo eso.

Por lo tanto el operador == testea si ambos miembros de a igualdad, tienen el mismo valor.

Existe otro comparador que se utiliza poco pero hay que conocerlo tambien que es el operador is, dicho operador testea si ambos objetos son iguales y ademas estan ubicados en el mismo espacio de memoria del programa, lo cual es poco util pero bueno, jeje.

Vemos una comparacion de si d y e son iguales y logicamente son iguales, eso se ve a simple vista, pero que pasa si usamos is ademas de comparar si son iguales verifica otros aspectos.

En el caso de strings chicas ademas de ser iguales, se ubican en el mismo buffer de memoria y el comando is, nos devuelve que es true.

Aqu vemos dos strings grandes h , i que son iguales, pero al ser muy grandes el comando is, no solo verifica que sean iguales como ==, si no que ademas verifica que esten en un mismo cache de memoria, y al ser grandes caen fuera y me puede devolver falso, como en este caso a pesar de ser iguales. Realmente el chequeo que se usa en todos los programas para igualdad es el signo doble igual, el comando is queda para roles de programacion avanzada, pero bueno al menos conocemos un poco algun caso que nos muestra una diferencia entre ambos, por lo cual vemos que es conveniente usar == para verificar igualdades. Tambien tenemos en las comparaciones los simbolos de mayor ( >) y menor (<) que nos sirven para determinar si un objeto es mayor o menor que otro. Si son strings se compararan letra a letra hasta ver si una es mayor que otra.

En este caso

Compara los primeros caracteres y como ambos son 9 y son iguales, ahi pasa al segundo donde el 8 es menor que 9, por lo tanto ya con eso sale el resultado de que es menor, no siguiendo la comparacion en los caracteres siguientes.

Es similar a la comparacion que se realiza para ubicar las palabras en el diccionario, el mismo criterio de comparacion letra a letra es usado aqu.

En el caso de objetos como listas se compara item a item, en este caso los dos primeros items son iguales, pero A tiene un tercero que B no tiene lo cual lo hace mas grande.

En este ejemplo, los primeros items son iguales, en el segundo B es mayor que A por lo cual ya devuelve que es B mayor que A, sin comparar los siguientes items. Python reconoce otras formas de verdadero y falso, segn el tipo de objeto, por ejemplo si un objeto es numerico, si es cero es falso y si es distinto de cero es verdadero. Esto puede servir para iteraciones en donde queremos comparar un indice que va cambiando de valor y queremos terminar de iterar cuando el valor de dicho item sea cero, se puede hacer la comparacion directa contra cero, o se puede verificar si es verdad el resultado, el cual sera verdadero mientras el valor no sea cero. Veamos ambos ejemplos el primero, comparando si el indice es cero: x=9 >>> while x>0: ... print x, ... x=x-1 ... 9 8 7 6 5 4 3 2 1>>>

Bueno ahi tenemos una iteracion while, que aun no estudiamos pero while significa que va a iterar mientras sea verdadera la condicion que esta al lado, en este caso que x sea mayor que cero. Como x comienza valiendo nueve y la condicion es verdadera o sea que x es mayor que cero, entrara en el while y loopeara hasta que vaya disminuyendo por el x=x-1 que esta dentro y cuando llegue a cero saldra por que x>0 sera falso. Una variante de esta iteracion, es imprimir el valor de x cuando salio, para verificar el valor de x en ese momento.

Si armamos un script x=9 while x>0: print x, x=x-1 print 'salimos con x valiendo',x

Si lo debuggeo con STEP INTO o f7, vere como va loopeando escribiendo en la pestaa DEBUG I/O lo que va imprimiendo y en el STACK DATA vere los valores de cada variable como van cambiando, especialmente x que empieza siendo nueve, y va disminuyendo hasta que se hace cero y sale. Sale del loop cuando x vale cero y imprime el mensaje de salida.

La verdad el cartel de salimos con x valiendo cero, deberia estar en otra linea, lo arreglaremos.

Ahora si al ponerle el \n, salta a la otra linea donde escribe el mensaje de salida.

Es bueno ver que el print del mensaje de salida, debe estar nuevamente en el margen, sin indentacion, eso significa que se ejecutara cuando salga del while, si le colocara la indentacion que tiene x=x-1, se ejecutara dentro del while y se repetira cada vez que pase por alli en el loop.

Alli vemos el segundo ejemplo, testea que se repita el loop mientras x sea verdadero, o sea diferente de cero como habiamos visto, en la practica se comporta igual que el caso anterior ya que antes testeaba que fuera verdadera la expresion x>0.

Los valores numericos se comparan directamente y el mas grande es el mayor, en este caso se ve que la variable y que vale 2 es mas grande que la variable x que vale -1 que es negativo y menor, si pruebo si x es mayor que y el resultado es falso.

Si aumentamos x para que sea mas negativo en este caso -5, vemos que sigue siendo menor que y que vale 2.

Ya vimos que los objetos numericos son verdaderos si son diferentes de cero y falsos si son cero, los objetos que no son numericos son verdaderos si su contenido es diferente de vacio, si quiero saber si una lista es verdadera, debera tener algun contenido, la lista vacia [] es falsa.

Alli en la tabla vemos ejemplos de objetos verdaderos y falsos, la string 'spam' como cualquier otra que tenga contenido es verdadera, mientras que la string que es vacia es falsa, asi mismo la lista vacia [] es falsa, el diccionario vacio {} es falso, el numero 1 es verdadero y el 0 es falso, y None que es un objeto especial similar al NULL de C, es tomado siempre como valor falso. Existe una extension que se aplico a partir de Python 2.3 y es un nuevo tipo llamado booleano (bool) o sea que puedo asignar a una variable directamente el valor True o False.

Funcionan realmente de la misma forma como hablamos de que cero era verdadero y diferente de cero era falso, es el mismo concepto en este caso, se le da entidad con un nuevo tipo que se puede asignar directamente comparar etc.

Alli vemos otro ejemplo, a la variable x se le asigna el valor True al inicio, por eso mientras x sea verdadero entra en el while, donde imprime, y luego se le cambia el valor a False, lo que hace que salga e imprima que salimos con x valiendo False.

En el siguiente ejemplo vemos que tambien se puede usar combinados el mayor e igual (>=) y el menor e igual (<=)

Vemos que x se mantiene loopeando mientras sea mayor e igual que 1, o sea saldra cuando valga cero y eso lo imprime en la salida.

Resumiendo Python compara los diferentes objetos de esta forma:


Los numeros se comparan por el que tiene mayor magnitud, es mas grande los positivos son mas grandes que los negativos siempre. Las strings se comparan como se ubicarian en el diccionario, carcter por carcter y si el primer carcter es igual, buscamos el siguiente para ver cual lo tiene mayor, donde encontramos un primer caracter desigual sera mayor el que tenga el carcter mas grande de ambos. Listas y tuplas son comparadas item por item de izquierda a derecha, de la misma forma que las strings el primer item diferente que se halla, es el que decide si una es mayor que otra. Los diccionarios solo se comparan, haciandolo mediante listas que se obtienen del mismo por el metodo sort.( lo usaremos mas adelante y alli se veran ejemplos )

Hasta la parte 16 Ricardo Narvaja

Das könnte Ihnen auch gefallen