0% encontró este documento útil (0 votos)
150 vistas

Python Essentials 1 (Modulo 3)

Este documento describe los conceptos básicos de los datos booleanos, operadores relacionales, estructuras de control de flujo como if/else y bucles en Python. También cubre temas como listas, operaciones lógicas y de bits, y algoritmos de ordenamiento como el ordenamiento de burbuja. El documento proporciona código de ejemplo y explicaciones para ayudar a los lectores a comprender estos fundamentos de Python.

Cargado por

Efe Farfal
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
150 vistas

Python Essentials 1 (Modulo 3)

Este documento describe los conceptos básicos de los datos booleanos, operadores relacionales, estructuras de control de flujo como if/else y bucles en Python. También cubre temas como listas, operaciones lógicas y de bits, y algoritmos de ordenamiento como el ordenamiento de burbuja. El documento proporciona código de ejemplo y explicaciones para ayudar a los lectores a comprender estos fundamentos de Python.

Cargado por

Efe Farfal
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 70

PROGRAM YOUR

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.

Cómo tomar decisiones en Python (if, if-


else, if-elif, else).

Cómo repetir la ejecución de código


usando los bucles (while, for).
Cómo realizar operaciones lógicas y de bit
a bit en Python.

Listas en Python (construcción,


indexación y segmentación; manipulación
de contenido).
Cómo ordenar una lista usando algoritmos
de clasificación de burbujas.

© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Preguntas y respuestas.

Un programador escribe un programa y el programa hace preguntas.


Una computadora ejecuta el programa y proporciona las respuestas. El
programa debe ser capaz de reaccionar de acuerdo con las respuestas
recibidas.

Afortunadamente, las computadoras solo conocen dos tipos de


respuestas:

sí, es cierto;

no, esto es falso.

Nunca obtendrá una respuesta como Déjame pensar..., No sé,


o Probablemente sí, pero no estoy seguro.
Para hacer preguntas, Python usa un conjunto de operadores
muy especiales.

© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Igualdad: el operador igual (==)

El operador == (igual a) compara los valores de dos operandos. Si son


iguales, el resultado de la comparación es True. Si no son iguales, el
resultado de la comparación es False.

Diferente: El operador diferente (!=)

El operador != (distinto de) también compara los valores de dos


operandos. Aquí está la diferencia: si son iguales, el resultado de la
comparación es False. Si no son iguales, el resultado de la
comparación es True.

© Copyright Open Education and Development Group 2012-2022. All Rights Reserved.
Operadores de comparación: mayor que

También oodemos hacer una pregunta de comparación usando el


operador > (mayor que).

True lo confirma; False lo niega.

Mayor qué o igual a


El operador mayor que tiene otra variante especial, no estricta, pero se
denota de manera diferente que en la notación aritmética
clásica: >= (mayor o igual a).

Ambos operadores son operadores binarios con vinculación del lado


izquierdo, y su prioridad es mayor que la que muestran == y !=

© 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:

¿Cómo funciona esta sentencia?


• Si la expresión true_or_not representa la verdad (es decir, su valor
no es igual a cero), las sentencias con sangría se ejecutarán.
• Si la expresión true_or_not no representa la verdad (es decir, su
valor es igual a cero), las sentencias con sangría se omitirán , y la
siguiente instrucción ejecutada será la siguiente al nivel de la
sangría original.
Otra variante de la sentencia condicional, también permite
Si un determinado desarrollador de Python sin dormir se queda
realizar una acción adicional cuando no se cumple la condición.
dormido cuando cuenta 120 ovejas, y el procedimiento de inducción
Si el clima es bueno, saldremos a caminar, de lo contrario, iremos
del sueño se puede implementar como una función especial llamada
al cine.
sleep_and_dream(), el código toma la siguiente forma:
Ahora sabemos lo que haremos si se cumplen las condiciones, y
sabemos lo que haremos si no todo sale como queremos.
Python nos permite expresar dichos planes alternativos.

Puedes leerlo como sigue: si sheep_counter es mayor o igual que 120,


entonces duerme y sueña (es decir, ejecuta la función
sleep_and_dream).
Hemos dicho que las sentencias condicionales deben tener sangría.
La ejecución de if-else es la siguiente:
Esto crea una estructura muy legible.
• Si la condición se evalúa como True (su valor no es igual a
Tender la cama, tomar una ducha y dormir cero), la instrucción perform_if_condition_true se ejecuta, y la
y soñar se ejecutan condicionalmente. sentencia condicional llega a su fin.
Alimentar a los perros, siempre se hace • Si la condición se evalúa como False (es igual a cero), la
feed_the_sheepdogs() no tiene sangría y no instrucción perform_if_condition_false se ejecuta, y la
pertenece al bloque if, siempre se ejecuta. sentencia condicional llega a su fin.
Dos casos especiales de la sentencia condicional. El segundo caso especial presenta otra nueva palabra clave de Python:
Primero, considera el caso donde la instrucción colocada después del elif. Como probablemente sospechas, es una forma más corta de else-if.
if es otro if. elif se usa para verificar más de una condición, y para detener
Ej. Si hay buen clima, saldremos a caminar. Si encontramos un buen cuando se encuentra la primera sentencia verdadera.
restaurante, almorzaremos allí. De lo contrario, vamos a comer un Ej. Si hay buen clima, saldremos a caminar, de lo contrario, si obtenemos
sandwich. Si hay mal clima, iremos al cine. Si no hay boletos, iremos entradas, iremos al cine, de lo contrario, si hay mesas libres en el
de compras al centro comercial más cercano. restaurante, vamos a almorzar; si todo falla, regresaremos a casa y
jugaremos ajedrez.

La forma de ensamblar las siguientes sentencias if-elif-else a veces se


denomina cascada.
Se debe prestar atención adicional a este caso: No debes usar else sin un
if precedente. else siempre es la última rama de la cascada. Entre otras.
Nota: si alguna de las ramas de if-elif-else
Es hora de complicar el código: encontremos el mayor de
contiene una sola instrucción, puedes
los tres números. Suponemos que el primer valor es el
codificarla de forma más completa (no es
más grande. Luego verificamos esta hipótesis con los dos
necesario que aparezca una línea con
valores restantes. Este método es significativamente
sangría después de la palabra clave), pero
más simple que tratar de encontrar el número más
solo continúa la línea después de los dos
grande comparando todos los pares de números posibles
puntos).
(es decir, el primero con el segundo, el segundo con el
tercero y el tercero con el primero).
• Ahora deberías poder escribir un programa que encuentre el • Las líneas 02 a 08 forman un bucle.
mayor de cuatro, cinco, seis o incluso diez números. Los pasaremos tantas veces como
• ¿Pero qué sucede si te pedimos que escribas un programa que sea necesario para revisar todos los
encuentre el mayor de doscientos números? ¿Te imaginas el valores ingresados.
código?
• Necesitarás doscientas variables. Si doscientas variables no son lo
• En primer lugar, podemos simplificar el programa si, al principio del
suficientemente complicadas, intenta imaginar la búsqueda del
código, le asignamos a la variable largest_number un valor que será
número más grande de un millón.
más pequeño que cualquiera de los números ingresados.
• Imagina un código que contiene 199 sentencias condicionales y
• Usaremos -999999999 para ese propósito.
doscientas invocaciones de la función input(). Por suerte, no
• En segundo lugar, asumimos que nuestro algoritmo no sabrá por
necesitas lidiar con eso. Hay un enfoque más simple.
adelantado cuántos números se entregarán al programa. Esperamos
• Intentaremos escribir el algoritmo, y cuando estemos contentos
que el usuario ingrese todos los números que desee; el algoritmo
con él, lo implementaremos.
funcionará bien con cien y con mil números. ¿Cómo hacemos eso?
• Utilizaremos un tipo de notación que no es un lenguaje de
• Cuando se ingresa el valor-1, será una señal de que no hay más datos
programación real (no se puede compilar ni ejecutar), pero está
y que el programa debe finalizar su trabajo.
formalizado, es conciso y se puede leer. Se llama pseudocódigo.
• De lo contrario, si el valor ingresado no es igual a -1, el programa
leerá otro número, y así sucesivamente.
• ¿Puedes usar una estructura similar en un programa escrito en Vamos a hablar sobre estas (y muchas otras) funciones pronto. Por el
Python? Si, si puedes. momento, nuestro enfoque se centrará en la ejecución condicional y los
• Python a menudo viene con muchas funciones integradas que bucles para permitirte ganar más confianza en la programación y
harán el trabajo por ti. Por ejemplo, para encontrar el número enseñarte las habilidades que te permitirán comprender y aplicar los dos
más grande de todos, puede usar una función incorporada de conceptos en tu codigo. Entonces, por ahora, no estamos tomando atajos.
Python llamada max(). Puedes usarlo con múltiples argumentos.
Analiza el código de abajo:

• De la misma manera, puedes usar la función min() para devolver


el número más pequeño.
--

© 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:

• Si deseas ejecutar más de una sentencia dentro de un while, debes


En general, en Python, un bucle se puede representar de la siguiente (como con if) poner sangría a todas las instrucciones de la misma
manera: manera.
• Una instrucción o conjunto de instrucciones ejecutadas dentro del
La diferencia semántica es más importante: cuando se cumple la while se llama el cuerpo del bucle.
condición, if realiza sus sentencias sólo una vez; while repite la • Si la condición es False (igual a cero) tan pronto como se compruebe
ejecución siempre que la condición se evalúe como True. por primera vez, el cuerpo no se ejecuta ni una sola vez (ten en cuenta
la analogía de no tener que hacer nada si no hay nada que hacer).
Observa el algoritmo a continuación: • El cuerpo debe poder cambiar el valor de la condición, porque si la
condición es True al principio, el cuerpo podría funcionar
continuamente hasta el infinito. Observa que hacer una cosa
generalmente disminuye la cantidad de cosas por hacer.
Un bucle infinito, también denominado bucle sin fin, es una
secuencia de instrucciones en un programa que se repite
indefinidamente (bucle sin fin).

Este bucle imprimirá infinitamente "Estoy atrapado dentro de un


bucle". En la pantalla.

Mostraremos como usar este bucle recién aprendido para encontrar el


número más grande de un gran conjunto de datos ingresados.
Analiza el programa cuidadosamente. Localiza donde comienza el
bucle (línea 8) y descubre como se sale del cuerpo del
bucle:mostraremos como usar este bucle recién aprendido para
encontrar el número más grande de un gran conjunto de datos
ingresados.
Analiza el programa cuidadosamente. Localiza donde comienza el
bucle (línea 8) y descubre como se sale del cuerpo del bucle:
--

© 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.

El último argumento muestra el primer valor que no se asignará a la


variable de control.

Nota: la función range() solo acepta enteros como argumentos y


genera secuencias de enteros.

El primer valor mostrado es 2 (tomado del primer argumento de


range()).

El último es 7 (aunque el segundo argumento de range() es 8).El


• El bucle se ha ejecutado diez veces (es el argumento de la función primer valor mostrado es 2 (tomado del primer argumento de
range()). range()).
• El valor de la última variable de control es 9 (no 10, ya que
comienza desde 0 , no desde 1). El último es 7 (aunque el segundo argumento de range() es 8).
--

© 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:

• Parece que no es necesario continuar el bucle en su totalidad; se


debe abstener de seguir ejecutando el cuerpo del bucle e ir más
allá.
• Parece que necesitas comenzar el siguiente giro del bucle sin
completar la ejecución del turno actual.

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.

Estas dos instrucciones son:

break: sale del bucle inmediatamente, e incondicionalmente termina


la operación del bucle; el programa comienza a ejecutar la
instrucción más cercana después del cuerpo del bucle.
continue: se comporta como si el programa hubiera llegado
repentinamente al final del cuerpo; el siguiente turno se inicia y la
expresión de condición se prueba de inmediato.

Ambas palabras son palabras clave reservadas.


--

© 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.

Echa un vistazo al fragmento. Hay algo extraño al final: la palabra


reservada else.

Como pudiste haber sospechado, los bucles también pueden tener


la rama else, como los if.

La rama else del bucle siempre se ejecuta una vez,


independientemente de si el bucle ha entrado o no en su cuerpo.

¿Puedes adivinar la salida?


M o d i f i c a e l c ó d i g o u n p o c o p a ra re a l i z a r u n ex p e r i m e n t o
El estado del while es False al principio, ¿puedes verlo? más.Modifica el código un poco para realizar un experimento más.

Ejecuta y prueba el programa, y verifica si se ha ejecutado o no la


rama else.

Cuando el cuerpo del bucle no se ejecuta, la variable de control


conserva el valor que tenía antes del bucle.

Nota: si la variable de control no existe antes de que comience el


bucle, no existirá cuando la ejecución llegue a la rama else.
--

© 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,

Si tenemos tiempo libre, y el clima es bueno, saldremos a caminar.


and se puede determinar sobre la base de la tabla de verdad.
Hemos utilizado la conjunción and (y), lo que significa que salir a
caminar depende del cumplimiento simultáneo de estas dos
condiciones. En el lenguaje de la lógica, tal conexión de condiciones
se denomina conjunción.

Si tu estás en el centro comercial o yo estoy en el centro comercial, uno


de nosotros le comprará un regalo a mamá.

La aparición de la palabra or (o) significa que la compra depende de


al menos una de estas condiciones. En lógica, este compuesto se
llama una disyunción.

Está claro que Python debe tener operadores para construir


conjunciones y disyuncionesEstá claro que Python debe tener
operadores para construir conjunciones y disyunciones, se llaman
operadores lógicos.
Un operador de disyunción es la palabra or. Es un operador binario Además, hay otro operador que se puede aplicar para condiciones
con una prioridad más baja que and (al igual que + en de construcción. Es un operador unario que realiza una negación
comparación con *). Su tabla de verdad es la siguiente: lógica. Su funcionamiento es simple: convierte la verdad en falso y lo
falso en verdad

Este operador se escribe como la palabra not, y su prioridad es muy


alta: igual que el unario + y -. Su tabla de verdad es simple:
Puedes estar familiarizado con las leyes de De Morgan. Dicen que: Hay cuatro operadores que le permiten manipular bits de datos
individuales. Se denominan operadores bit a bit.
La negación de una conjunción es la separación de las negaciones.
La negación de una disyunción es la conjunción de las negaciones. Cubren todas las operaciones que mencionamos anteriormente en
el contexto lógico, y un operador adicional. Este es el operador xor
Escribamos lo mismo usando Python: (significa o exclusivo ), y se denota como ^ (signo de intercalación).

Aquí están todos ellos:Aquí están todos ellos:

Observa como se han utilizado los paréntesis para codificar las


expresiones

Los operadores lógicos toman sus argumentos como un todo,


independientemente de cuantos bits contengan. Los operadores
solo conocen el valor: cero (cuando todos los bits se restablecen)
significa False; no cero (cuando se establece al menos un bit)
significa True.

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:

Si asumimos que los enteros se almacenan con 32 bits, la imagen a


nivel de bits de las dos variables será la siguiente:

Se ejecuta la asignación:

Estamos tratando con una conjunción lógica aquí. Ambas variables i


y j no son ceros, por lo que se considerará que representan a True. Al
consultar la tabla de verdad para el operador and, podemos ver que
el resultado será True. No se realizan otras operaciones.

Ahora la operación a nivel de bits - aquí está:

El operador & operará con cada par de bits correspondientes por


separado, produciendo los valores de los bits relevantes del
resultado. Por lo tanto, el resultado será el siguiente:
Cada uno de estos operadores de dos argumentos se puede utilizar
en forma abreviada. Estos son los ejemplos de sus notaciones
equivalentes:
La variable logneg se establecerá en FalseLa variable logneg se
establecerá en False

La negación a nivel de bits es así:

Puede ser un poco sorprendente: el valor de la variable bitneg es -16.


Esto puede parecer extraño, pero no lo es en absoluto. Si deseas
obtener más información, debes consultar el sistema de números
binarios y las reglas que rigen los números de complemento de dos.
Para que puedes usar los operadores de bit a bit. Imagina que eres 2. Reinicia tu bit: asigna un cero al bit, mientras que todos los otros
un desarrollador obligado a escribir una pieza importante de un bits deben permanecer sin cambios; usemos la misma propiedad de
sistema operativo. Puedes usar una variable asignada de la siguiente la conjunción que antes, pero usemos una máscara ligeramente
forma: diferente, exactamente como se muestra a continuación:

La variable almacena la información sobre varios aspectos de la


operación del sistema. Cada bit de la variable almacena un valor Tenga en cuenta que la máscara se creó como resultado de la
de si/no. negación de todos los bits de la variable the_mask. Restablecer el bit
es simple, y se ve así (elige el que más te guste):
Solo uno de estos bits es tuyo, el tercero (recuerda que los bits se
numeran desde cero y el número de bits cero es el más bajo,
mientras que el más alto es el número 31). Los bits restantes no
pueden cambiar, porque están destinados a almacenar otros datos. 3. Establece tu bit: asigna un 1 a tu bit, mientras que todos los bits
restantes deben permanecer sin cambios; usa la siguiente propiedad
Es posible que tengas que hacer frente a las siguientes tareas: de disyunción:

1. Comprobar el estado de tu bit. averiguar el valor de su bit;


comparar la variable completa con cero no hará nada, pero puedes Ya estás listo para configurar su bit con una de las siguientes
usar la siguiente propiedad de conjunción: instrucciones:

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:

¿División entre diez? Echa un vistazo:¿División entre diez? Echa un


vistazo:

Dividir entre diez no es más que desplazar los dígitos a la derecha.

La computadora realiza el mismo tipo de operación, pero con una Nota:


diferencia: como dos es la base para los números binarios (no 10),
d e s p l a z a r u n v a l or u n b i t a l a i z q u i e rd a c o r re s p o n d e a 17 >> 1 → 17 // 2 (17 dividido entre 2 a la potencia de 1) → 8
multiplicarlo por dos; respectivamente, desplazar un bit a la (desplazarse hacia la derecha en un bit equivale a la división entera
derecha es como dividir entre dos (observe que se pierde el bit entre dos)
más a la derecha).
17 << 2 → 17 * 4 (17 multiplicado por 2 a la potencia de 2) → 68
Los operadores de cambio en Python son un par de dígrafos: < < y > (desplazarse hacia la izquierda dos bits es lo mismo que multiplicar
>, sugiriendo claramente en qué dirección actuará el cambio. números enteros por cuatro)
Consideremos a = 2 (en binario = 10) y b = 3
(en binario = 11) para los siguientes casos.

OPERADOR DESCRIPCIÓN USO

& 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 OR en los operandos a | b = 3 (Binario: 10 | 11 = 11)

^ Realiza bit a bit la operación XOR en los operandos a ^ b = 1 (Binario: 10 ^ 11 = 01)

~ 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.

Esto demuestra que esta operación ciertamente no es conmutativa

La prioridad de estos operadores es muy alta.

tabla de prioridades actualizada , que contiene todos los operadores


presentados hasta ahora:
Puede suceder que tengas que leer, almacenar, procesar y, Piensa en lo conveniente que sería declarar una variable que podría
finalmente, imprimir docenas, quizás cientos, tal vez incluso miles de almacenar más de un valor. Por ejemplo, cien, o mil o incluso diez
números. ¿Entonces qué? ¿Necesitas crear una variable separada mil. Todavía sería una y la misma variable, pero muy amplia y
para cada valor? ¿Tendrás que pasar largas horas escribiendo espaciosa. ¿Suena atractivo? Quizás, pero ¿cómo manejarías un
sentencias como la que se muestra a continuación? contenedor así lleno de valores diferentes? ¿Cómo elegirías solo el
que necesitas?

¿Y si solo pudieras numerarlos? Y luego di: dame el valor número 2;


asigna el valor número 15; aumenta el número del valor 10000.

Vamos a crear una variable llamada numbers; se le asigna no solo


un número, sino que se llena con una lista.
Si no crees que esta sea una tarea complicada, toma un papel y
escribe un programa que:
numbers es una lista que consta de cinco valores, todos ellos
• Lea cinco números. números. También podemos decir que esta sentencia crea una lista
• Los imprima en orden desde el más pequeño hasta el más de longitud igual a cinco
grande (Este tipo de procesamiento se denomina ordenamiento).
Python ha adoptado una convención que indica que los elementos
Hasta ahora, has aprendido como declarar variables que pueden de una lista están siempre numerados desde cero.
almacenar exactamente un valor dado a la vez. Tales variables a
veces se denominan escalares por analogía con las matemáticas. Nuestra lista es una colección de elementos, pero cada elemento
Todas las variables que has usado hasta ahora son realmente es un escalar.
escalares.
¿Cómo cambias el valor de un elemento elegido en la lista?

Vamos a asignar un nuevo valor de 111 al primer elemento en la lista.


Lo hacemos de esta manera:

Y ahora queremos copiar el valor del quinto elemento al segundo


elemento.

El valor dentro de los corchetes que selecciona un elemento de la


lista se llama un índice, mientras que la operación de seleccionar un
elemento de la lista se conoce como indexación.

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.

Suponiendo que todas las operaciones anteriores se hayan


completado con éxito, el fragmento enviará 111 a la consola.

Como puedes ver en el editor, la lista también puede imprimirse


como un todo, como aquí:

La función toma el nombre de la lista como un argumento y


devuelve el número de elementos almacenados actualmente
dentro de la lista (en otras palabras, la longitud de la lista).
Cualquier elemento de la lista puede ser eliminado en cualquier No puedes acceder a un elemento que no existe,
momento, esto se hace con una instrucción llamada del (eliminar). no puedes obtener su valor ni asignarle un valor.
Nota: es una instrucción, no una función. Ambas instrucciones causarán ahora errores de
tiempo de ejecución:

Tienes que apuntar al elemento que quieres eliminar, desaparecerá


de la lista y la longitud de la lista se reducirá en uno.

Mira el fragmento de abajo. ¿Puedes adivinar qué salida producirá?


Nota: hemos eliminado uno de los elementos de la
lista; ahora solo hay cuatro elementos en la lista. Esto
significa que el elemento número cuatro no existe.
Puede parecer extraño, pero los índices negativos son válidos y
pueden ser muy útiles.

Un elemento con un índice igual a -1 es el último en la lista.

El código del ejemplo mostrará 1.El código del ejemplo mostrará 1.

Del mismo modo, el elemento con un índice igual a -2 es el anterior


al último en la lista.

El fragmento de ejemplo dará como salida un 2.

El último elemento accesible en nuestra lista es numeros[-4] (el


primero).
--

© 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.

En general, una invocación de función típica puede tener este


aspecto:

La función toma un argumento, hace algo y devuelve un resultado.

Una invocación de un método típico usualmente se ve así:


Un nuevo elemento puede ser añadido al final de la lista existente:

Dicha operación se realiza mediante un método llamado append().


Toma el valor de su argumento y lo coloca al final de la lista que
posee el método.

La longitud de la lista aumenta en uno.

El método insert() es un poco más inteligente: puede agregar un


nuevo elemento en cualquier lugar de la lista, no solo al final.

Toma dos argumentos:

El primero muestra la ubicación requerida del elemento a insertar.


Nota: todos los elementos existentes que ocupan ubicaciones a la
derecha del nuevo elemento (incluido el que está en la posición
indicada) se desplazan a la derecha, para hacer espacio para el
nuevo elemento.
El segundo es el elemento a insertar.

Observa el código en el editor. Ve como usamos los métodos


append() e insert(). Después de usar insert(): el primer elemento
anterior ahora es el segundo, el segundo el tercero, y así
sucesivamente.
Puedes iniciar la vida de una lista creándola vacía (esto se hace con
un par de corchetes vacíos) y luego agregar nuevos elementos
según sea necesario.

Echa un vistazo al fragmento en el editor.

Será una secuencia de números enteros consecutivos del 1 (luego


agrega uno a todos los valores agregados) hasta 5.

Hemos modificado un poco el fragmento:

Deberías obtener la misma secuencia, pero en orden inverso (este


es el mérito de usar el método insert()).
El bucle for tiene una variante muy especial que puede procesar las
listas de manera muy efectiva.

Supongamos que deseas calcular la suma de todos los valores


almacenados en la lista my_list.

Necesitas una variable cuya suma se almacenará y se le asignará


inicialmente un valor de 0 - su nombre será total. (Nota: no la vamos
a nombrar sum ya que Python utiliza el mismo nombre para una de
sus funciones integradas: sum(). Utilizar ese nombre sería
considerado una mala práctica. Luego agrega todos los elementos
de la lista usando el bucle for. Echa un vistazo al fragmento en el
editor.

Comentemos este ejemplo:

• A la lista se le asigna una secuencia de cinco valores enteros.


• La variable i toma los valores 0, 1,2,3, y 4, y luego indexa la lista,
seleccionando los elementos siguientes: el primero, segundo,
tercero, cuarto y quinto.
• Cada uno de estos elementos se agrega junto con el operador +=
a la variable total, dando el resultado final al final del bucle.
• Observa la forma en que se ha empleado la función len(), hace
que el código sea independiente de cualquier posible cambio en
el contenido de la lista.
El bucle for puede hacer mucho más. Puede ocultar todas las
acciones conectadas a la indexación de la lista y entregar todos los
elementos de la lista de manera práctica.

¿Qué sucede aquí?

• La instrucción for especifica la variable utilizada para navegar


por la lista (i) seguida de la palabra clave in y el nombre de la
lista siendo procesado (my_list).
• A la variable i se le asignan los valores de todos los elementos de
la lista subsiguiente, y el proceso ocurre tantas veces como hay
elementos en la lista.
• Esto significa que usa la variable i como una copia de los valores
de los elementos, y no necesita emplear índices.
• La función len() tampoco es necesaria aquí.
Dejemos de lado las listas por un breve momento y veamos un
tema intrigante.

Imagina que necesitas reorganizar los elementos de una lista, es


decir, revertir el orden de los elementos: el primero y el quinto, así
como el segundo y cuarto elementos serán intercambiados. El
tercero permanecerá intacto.

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:

Echa un vistazo al fragmento:

Si haces algo como esto, perderás el valor previamente almacenado


en variable_2. Cambiar el orden de las tareas no ayudará. Necesitas
una tercera variable que sirva como almacenamiento auxiliar.
--

© 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:

• Ascendente (o más precisamente, no descendente): si en cada


par de elementos adyacentes, el primer elemento no es mayor
que el segundo. Vamos más allá y observemos los elementos tercero y cuarto. Una
• Descendente (o más precisamente, no ascendente): si en cada vez más, esto no es lo que se supone que es. Tenemos que
par de elementos adyacentes, el primer elemento no es menor intercambiarlos:
que el segundo.

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:

Aquí está la lista:


El primer paso a través de la lista ya está terminado. Todavía
estamos lejos de terminar nuestro trabajo, pero algo curioso ha
sucedido mientras tanto. El elemento más grande, 10, ya ha llegado
al final de la lista. Ten en cuenta que este es el lugar deseado para el.
Todos los elementos restantes forman un lío pintoresco, pero este
ya está en su lugar.
Intenta imaginar la lista de una manera ligeramente diferente, es Comenzamos el si gui ente pase i nmedi atamente. Observe
decir, de esta manera: atentamente el primer y el segundo elemento: se necesita otro
cambio:
Observa - El 10 está en la parte superior.
Podríamos decir que flotó desde el fondo hasta
la superficie, al igual que las burbujas en una Ahora 6 necesita ir a su lugar. Cambiamos el segundo y el tercer
copa. El método de clasificación deriva su elemento:
nombre de la misma observación: se denomina
ordenamiento de burbuja.

La lista ya está ordenada. No tenemos nada más que hacer. Esto es


Ahora comenzamos con el segundo paso a través de la lista. exactamente lo que queremos.
Miramos el primer y el segundo elemento, es necesario un
intercambio:Ahora comenzamos con el segundo paso a través de la Como puedes ver, la esencia de este algoritmo es simple:
lista. Miramos el primer y el segundo elemento, es necesario un comparamos los elementos adyacentes y, al intercambiar
intercambio: algunos de ellos, logramos nuestro objetivo.

Codifiquemos en Python todas las acciones realizadas durante un


Tiempo para el segundo y tercer elemento: también tenemos que solo paso a través de la lista, y luego consideraremos cuántos pases
intercambiarlos: necesitamos para realizarlo.

Ahora el tercer y cuarto elementos, y la segunda pasada, se


completa, ya que 8 ya está en su lugar:
¿Cuántos pases necesitamos para ordenar la lista completa?

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.

Si quieres que Python ordene tu lista, puedes hacerlo de la siguiente manera:

La salida del fragmento es la siguiente:La salida del fragmento es la siguiente:

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.

• Crea una l i s t a d e u n e l e me n t o ¿Cómo te las arreglas con eso?


llamada list_1.
• La asigna a una nueva lista llamada
list_2.
• Cambia el único elemento de list_1.
• Imprime la list_2.

La parte sorprendente es el hecho de que el programa mostrará


como resultado: [2], no [1], que parece ser la solución obvia.

Las listas (y muchas otras entidades complejas de Python) se


almacenan de diferentes maneras que las variables ordinarias
(escalares).

Se podría decir que:

• El nombre de una variable ordinaria es el nombre de su


contenido.
• El nombre de una lista es el nombre de una ubicación de
memoria donde se almacena la lista.
La solución está al alcance de tu mano: su nombre es rebanada. Es posible utilizar valores negativos tanto para el inicio como para el
fin(al igual que en la indexación).
Una rebanada es un elemento de la sintaxis de Python que permite
hacer una copia nueva de una lista, o partes de una lista. Echa un vistazo al fragmento:

En realidad, copia el contenido de la lista, no el nombre de la lista.

Esto es exactamente lo que necesitas. Echa un vistazo al fragmento


de código a continuación:

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 de las formas más generales de la rebanada es la siguiente:

Como puedes ver, se asemeja a la indexación, pero los dos puntos


en el interior hacen una gran diferencia.

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:

start es el índice del primer elemento incluido en la rebanada.


end es el índice del primer elemento no incluido en la rebanada.

Así es como los índices negativos funcionan en las rebanadas:

El resultado del fragmento es:

Si start especifica un elemento que se encuentra más allá del


descrito por end (desde el punto de vista inicial de la lista), la
rebanada estará vacía:
Si omites el start en tu rebanada, se supone que deseas obtener un
segmento que comienza en el elemento con índice 0.

En otras palabras, la rebanada sería de esta forma:

es un equivalente más compacto de:

Observa el fragmento de código a continuación:

Es por esto que su salida es:

Del mismo modo, si omites el end en tu rebanada, se supone que


deseas que el segmento termine en el elemento con el índice
len(my_list).

En otras palabras, la rebanada sería de esta forma:

Observa el siguiente fragmento de código:


Python ofrece dos operadores muy poderosos, capaces de revisar la
lista para verificar si un valor específico está almacenado dentro de
la lista o no.

Estos operadores son:

El primero de ellos (in) verifica si un elemento dado (el argumento


izquierdo) está actualmente almacenado en algún lugar dentro de la
lista (el argumento derecho) - el operador devuelve True en este
caso.

El segundo (not in) comprueba si un elemento dado (el argumento


izquierdo) está ausente en una lista - el operador devuelve True en
este caso.

Observa el código en el editor. El fragmento muestra ambos


operadores en acción.
Intenta encontrar el valor mayor en la lista. Mira el código en el Ahora encontremos la ubicación de un elemento dado dentro de
editor. una lista:

El concepto es bastante simple: asumimos temporalmente que el


primer elemento es el más grande y comparamos la hipótesis con
todos los elementos restantes de la lista.

Nota:

• El valor buscado se almacena en la variable to_find.


• El estado actual de la búsqueda se almacena en la variable
found (True/False).
• Cuando found se convierte en True, se sale del bucle for.
Supongamos que has elegido los siguientes números en la lotería: 3,
7, 11, 42, 34, 49.

Los números que han salido sorteados son: 5, 11, 9, 42, 3, 49.

La pregunta es: ¿A cuántos números le has atinado?

Nota:

• La lista drawn almacena todos los números sorteados.


• La lista bets almacena los números con que se juega.
• La variable hits cuenta tus aciertos.

La salida del programa es: 4.


--

© 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 variable board ahora es un arreglo bidimensional. También se


le llama matriz.

Como las listas de comprensión puede ser anidadas, podemos


Nota: acortar la creación del tablero de la siguiente manera:

• 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:

Echa un vistazo al tablero de ajedrez. Cada campo contiene un par


de índices que se deben dar para acceder al contenido del campo:
Python no limita la profundidad de la inclusión lista en lista. Aquí y desocupar el segundo cuarto en el quinto piso ubicado en el
puedes ver un ejemplo de un arreglo tridimensional: primer edificio:

Imagina un hotel. Es un hotel enorme que consta de tres edificios,


de 15 pisos cada uno. Hay 20 habitaciones en cada piso. Para esto,
necesitas un arreglo que pueda recopilar y procesar información Verifica si hay disponibilidad en el piso 15 del tercer edificio:
sobre las habitaciones ocupadas/libres.

Primer paso: El tipo de elementos del arreglo. En este caso, sería un


valor Booleano (True/False).

Paso dos: análisis de la situación. Resume la información disponible:


tres edificios, 15 pisos, 20 habitaciones.

Ahora puedes crear el arreglo:


La variable vacancy contiene 0 si todas las habitaciones están
ocupadas, o en dado caso el número de habitaciones disponibles.

El primer índice (0 a 2) selecciona uno de los edificios; el segundo (0


a 14) selecciona el piso, el tercero (0 a 19) selecciona el número de
habitación. Todas las habitaciones están inicialmente desocupadas.

Ahora ya puedes reservar una habitación: en el segundo edificio, en


el décimo piso, habitación 14:
PROGRAM YOUR FUTURE !!

www.pythoninstitute.org

También podría gustarte