Python Essentials 1 (Modulo 3)
Python Essentials 1 (Modulo 3)
FUTURE
Python Essentials 1:
Modulo 3.
Datos de tipo booleano.Operadores relacionales.Cómo
tomar decisiones en Python. Cómo repetir la ejecución de
código usando los bucles. Cómo realizar operaciones
lógicas y de bit a bit.Cómo ordenar una lista usando
algoritmos de clasificación de burbujas.Listas
multidimensionales y sus aplicaciones.
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Índice de Contenido
Datos de tipo booleano.
Operadores relacionales.
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Preguntas y respuestas.
sí, es cierto;
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Igualdad: el operador igual (==)
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Operadores de comparación: mayor que
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
--
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Esta sentencia condicional consta de los siguientes elementos,
Ya sabes como hacer preguntas a Python, pero aún no sabes como
estrictamente necesarios en este orden:
hacer un uso razonable de las respuestas. Se debe tener un
mecanismo que le permita hacer algo si se cumple una condición, y no
• La palabra clave reservada if.
hacerlo si no se cumple.
• Uno o más espacios en blanco.
• Una expresión (una pregunta o una respuesta) cuyo valor se
Para tomar tales decisiones, Python ofrece una instrucción especial.
interpretar únicamente en términos de True.
Debido a su naturaleza y su aplicación, se denomina instrucción
• Unos dos puntos seguido de una nueva línea.
condicional (o sentencia condicional).
• Una instrucción con sangría o un conjunto de instrucciones la
sangría se puede lograr de dos maneras: insertando un número
La primera forma de una sentencia condicional, que puede ver a
particular de espacios, o usando el tabulador.
continuación, está escrita de manera muy informal pero figurada:
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
--
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
--
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
¿Estás de acuerdo con la sentencia presentada a continuación? Ahora, es importante recordar que:
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Otro tipo de bucle disponible en Python proviene de la observación Existen algunos elementos nuevos.
de que a veces es más importante contar los "giros o vueltas" del
bucle que verificar las condiciones. • La palabra reservada for abre el bucle for; nota - No hay
Imagina que el cuerpo de un bucle debe ejecutarse exactamente cien condi ci ón después de eso; no ti enes q u e p e n s a r e n l a s
veces. Si deseas utilizar el bucle while para hacerlo, puede tener este condiciones, ya que se verifican internamente, sin ninguna
aspecto: intervención.
• Cualquier variable después de la palabra reservada for es la
variable de control del bucle; cuenta los giros del bucle y lo hace
automáticamente.
• La palabra reservada in introduce un elemento de sintaxis que
describe el rango de valores posibles que se asignan a la variable
de control.
Sería bueno si alguien pudiera hacer esta cuenta aburrida por ti. ¿Es • La función range() (esta es una función muy especial) es
eso posible? responsable de generar todos los valores deseados de la variable
En realidad, el bucle for está diseñado para realizar tareas más de control; en nuestro ejemplo, la función creará (incluso
complicadas, puede "explorar " grandes colecciones de datos podemos decir que alimentará el bucle con) valores
elemento por elemento. Te mostraremos como hacerlo pronto, pero subsiguientes del siguiente conjunto: 0, 1, 2 .. 97, 98, 99; nota: en
ahora presentaremos una variante más sencilla de su aplicación. este caso, la función range() comienza su trabajo desde 0 y lo
finaliza un paso (un número entero) antes del valor de su
argumento.
• Nota la palabra clave pass dentro del cuerpo del bucle - no hace
nada en absoluto; es una instrucción vacía : la colocamos aquí
porque la sintaxis del bucle for exige al menos una instrucción
dentro del cuerpo (por cierto, if, elif, else y while expresan lo
mismo).
¿Puedes predecir su salida? En este caso, el primer argumento determina el valor inicial (primero)
de la variable de control.
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Hasta ahora, hemos tratado el cuerpo del bucle como una secuencia
i n d i v i s i b l e e i n s e p a ra b l e d e i n s t r u c c i o n e s q u e s e re a l i z a n
completamente en cada giro del bucle. Como desarrollador, podrías
enfrentar las siguientes opciones:
P y t h o n p ro p o rc i o n a d o s i n s t r u c c i o n e s e s p e c i a l e s p a ra l a
implementación de estas dos tareas.
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
--
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
--
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Ambos bucles while y for, tienen una característica interesante (y Los bucles for se comportan de manera un poco diferente: echa un
rara vez se usa). vistazo al fragmento en el editor y ejecútalo.
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
--
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Las condiciones que hemos usado hasta ahora han sido muy simples, Un operador de conjunción lógica en Python es la palabra and. Es un
por no decir, bastante primitivaslas condiciones que hemos usado operador binario con una prioridad inferior a la expresada por los
hasta ahora han sido muy simples, por no decir, bastante primitivas. operadores de comparación,
El resultado de sus operaciones es uno de estos valores: False o True. Hagámoslo más fácil:
Esto significa que este fragmento de código asignará el valor True a • & requieres exactamente dos 1s para
la variable j si i no es cero; de lo contrario, será False. proporcionar 1 como resultado.
• | requiere al menos un 1 para
proporcionar 1 como resultado.
• ^ requiere exactamente un 1 para
proporcionar 1 como resultado.
Te mostraremos un ejemplo de la diferencia en la operación entre las
operaciones lógicas y de bit. Supongamos que se han realizado las
siguientes tareas:
Se ejecuta la asignación:
También puedes hacer una secuencia de instrucciones dependiendo 4. Niega tu bit: reemplaza un 1 con un 0 y un 0 con un 1. Puedes
del estado de tu bit, aquí está: utilizar una propiedad interesante del operador ~x:
Python ofrece otra operación relacionada con los bits individuales: El argumento izquierdo de estos operadores es un valor entero
shifting. Esto se aplica solo a los valores de número entero, y no cuyos bits se desplazan. El argumento correcto determina el tamaño
debe usar flotantes como argumentos para ello. del turno.
Ya aplicas esta operación muy a menudo. ¿Cómo multiplicas Esto demuestra que esta operación ciertamente no es conmutativa
cualquier número por diez?
La prioridad de estos operadores es muy alta.
Como puede ver, multiplicar por diez es de hecho un desplazamiento
de todos los dígitos a la izquierda y llenar el vacío resultante con cero. La invocación final de print() produce el siguiente resultado:
& Realiza bit a bit la operación AND en los operandos a & b = 2 (Binario: 10 & 11 = 10)
~ Realiza bit a bit la operación NOT bit a bit. Invierte cada bit en el operando ~a = -3 (Binario: ~(00000010) = (11111101))
>> Realiza un desplazamiento a la derecha bit a bit. Desplaza los bits del operador a >> b = 0 (Binario: 00000010 >> 00000011 = 0)
de la izquierda a la derecha tantos bits como indica el operador de la derecha
<< Realiza un desplazamiento a la izquierda bit a bit. Desplaza los bits del operando a << b = 16 (Binario: 00000010 << 00000011 = 00001000)
de la izquierda a la izquierda tantos bits como especifique el operador de la
derecha
El argumento izquierdo de estos operadores es un valor entero
cuyos bits se desplazan. El argumento correcto determina el tamaño
del turno.
Nota: todos los índices utilizados hasta ahora son literales. Sus
valores se fijan en el tiempo de ejecución, pero cualquier expresión
también puede ser un índice. Esto abre muchas posibilidades.
Se puede acceder a cada uno de los elementos de la lista por
separado.
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Un método es un tipo específico de función: se comporta como una Nota: el nombre del método está precedido por el nombre de los
función y se parece a una función, pero difiere en la forma en que datos que posee el método. A continuación, se agrega un punto,
actúa y en su estilo de invocación. seguido del nombre del método y un par de paréntesis que
encierran los argumentos.
Una función no pertenece a ningún dato: obtiene datos, puede
crear nuevos datos y (generalmente) produce un resultado. El método se comportará como una función, pero puede hacer algo
más: puede cambiar el estado interno de los datos a partir de los
Un método hace todas estas cosas, pero también puede cambiar el cuales se ha invocado.
estado de una entidad seleccionada.
Puedes preguntar: ¿por qué estamos hablando de métodos, y no de
Un método es propiedad de los datos para los que trabaja, listas?
mientras que una función es propiedad de todo el código.
Este es un tema esencial en este momento, ya que le mostraremos
Esto también significa que invocar un método requiere alguna como agregar nuevos elementos a una lista existente. Esto se puede
especificación de los datos a partir de los cuales se invoca el hacer con métodos propios de las listas, no por funciones.
método.
Pregunta: ¿Cómo se pueden intercambiar los valores de dos Python ofrece una forma más conveniente de hacer el intercambio,
variables? echa un vistazo:
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Ahora que podemos hacer malabarismos con los elementos de las Intentaremos utilizar el siguiente enfoque: tomaremos el primer y el
listas, es hora de aprender como ordenarlos. Se han inventado segundo elemento y los compararemos; si determinamos que están
muchos algoritmos de clasificación, que difieren mucho en en el orden incorrecto (es decir, el primero es mayor que el
velocidad, así como en complejidad. Vamos a mostrar un algoritmo segundo), los intercambiaremos; Si su orden es válido, no haremos
muy simple, fácil de entender, pero desafortunadamente, tampoco nada. Un vistazo a nuestra lista confirma lo último: los elementos 01
es muy eficiente. Se usa muy raramente, y ciertamente no para y 02 están en el orden correcto, así como 8<10.
listas extensas.
Ahora observa el segundo y el tercer elemento. Están en las
Digamos que una lista se puede ordenar de dos maneras: posiciones equivocadas. Tenemos que intercambiarlos:
En las siguientes secciones, ordenaremos la lista en orden Ahora comprobemos los elementos cuarto y quinto. Si, ellos
ascendente, de modo que los números se ordenen de menor a también están en las posiciones equivocadas. Ocurre otro
mayor. intercambio:
Resolvamos este problema de la siguiente manera: introducimos otra variable, su tarea es observar si se ha realizado algún
intercambio durante el pase o no. Si no hay intercambio, entonces la lista ya está ordenada, y no hay que hacer nada más. Creamos una
variable llamada swapped, y le asignamos un valor de False para indicar que no hay intercambios. De lo contrario, se le asignará True.
Puedes ver un programa completo, enriquecido por una conversación con el usuario, y que permite ingresar e imprimir elementos de la
lista: El ordenamiento burbuja: versión final interactiva.
Python, sin embargo, tiene sus propios mecanismos de clasificación. Nadie necesita escribir sus propias clases, ya que hay un número
suficiente de herramientas listas para usar.
Te explicamos este sistema de clasificación porque es importante aprender como procesar los contenidos de una lista y mostrarte
como puede funcionar la clasificación real.
Como puedes ver, todas las listas tienen un método denominado sort(), que las ordena lo más rápido posible.
Ahora queremos mostrarte una característica importante y muy Lee estas dos líneas una vez más, la diferencia es esencial para
sorprendente de las listas, que las distingue de las variables comprender de que vamos a hablar a continuación.
ordinarias.
La asignación: list_2 = list_1 copia el nombre del arreglo no su
Echa un vistazo al fragmento de código: contenido. En efecto, los dos nombres (list_1 y list_2) identifican la
misma ubicación en la memoria de la computadora. Modificar uno
El programa: de ellos afecta al otro, y viceversa.
Su salida es [1]. La lista new_list contendrá fin - inicio (3 - 1 = 2) elementos a los que
tienen índices iguales a 1 y 2 (pero no 3).
Esta parte no visible del código descrito como [:] puede producir La salida del fragmento es: [8, 6]
una lista completamente nueva.
Una rebanada de este tipo crea una nueva lista (de destino),
tomando elementos de la lista de origen: los elementos de los
índices desde el principio hasta el fin - 1.
Observa el fragmento de código a continuación:
Para confirmar:
Nota:
Los números que han salido sorteados son: 5, 11, 9, 42, 3, 49.
Nota:
© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Las listas pueden constar de escalares (es decir, números) y Crea una lista que contiene ocho elementos que representan la
elementos de una estructura mucho más compleja. Veamos más de segunda fila del tablero de ajedrez: la que está llena de peones
cerca el caso en el que los elementos de una lista son listas. (supon que WHITE_PAWN es un símbolo predefinido que representa
un peón blanco).
A menudo encontramos estos arreglos en nuestras vi das.
Probablemente el mejor ejemplo de esto sea un tablero de ajedrez. El mismo efecto se puede lograr mediante una comprensión de
lista, la sintaxis especial utilizada por Python para completar o
Un tablero de ajedrez está compuesto de filas y columnas. Hay ocho llenar listas masivas.
filas y ocho columnas. Cada columna está marcada con las letras de
la A a la H. Cada línea está marcada con un número del uno al ocho. Una comprensión de lista es en realidad una lista, pero se creó
sobre la marcha durante la ejecución del programa, y no se describe
La ubicación de cada campo se identifica por pares de letras y de forma estática.
dígitos. Por lo tanto, sabemos que la esquina inferior derecha del
tablero (la que tiene la torre blanca) es A1, mientras que la esquina
opuesta es H8.
La parte del código colocada dentro de los corchetes especifica:
Supongamos que podemos usar los números seleccionados para
representar cualquier pieza de ajedrez. También podemos asumir • Los datos que se utilizarán para completar la lista (WHITE_PAWN)
que cada fila en el tablero de ajedrez es una lista. • La cláusula que especifica cuántas veces se producen los datos
dentro de la lista (for i in range(8))
Supongamos también que un símbolo predefinido denominado Este modelo imita perfectamente el tablero de ajedrez real, que en
EMPTY designa un campo vacío en el tablero de ajedrez. realidad es una lista de elementos de ocho elementos, todos ellos
en filas individuales. Resumamos nuestras observaciones:
Entonces, si queremos crear una lista de listas que representan todo
el tablero de ajedrez, se puede hacer de la siguiente manera: • Los elementos de las filas son campos, ocho de ellos por fila.
• Los elementos del tablero de ajedrez son filas, ocho de ellos por
tablero de ajedrez.
• La parte interior del bucle crea una fila que consta de ocho
elementos (cada uno de ellos es igual a EMPTY) y lo agrega a la
lista del board. La parte interna crea una fila, y la parte externa crea una lista de
• La parte exterior se repite ocho veces. filas.
• En total, la lista board consta de 64 elementos (todos iguales a
EMPTY).
El acceso al campo seleccionado del tablero requiere dos índices: el Echando un vistazo a la figura que se muestra arriba, coloquemos
primero selecciona la fila; el segundo: el número del campo dentro algunas piezas de ajedrez en el tablero. Primero, agreguemos todas
de la fila, el cual es un número de columna. las torres:
www.pythoninstitute.org