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

Conceptos Básicos Python

El documento habla sobre conceptos básicos de la ejecución de código en Python como intérpretes, compiladores y la ejecución de scripts. También explica conceptos de sintaxis, instrucciones y lo que sucede cuando hay errores.

Cargado por

Lu Comoglio
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
160 vistas

Conceptos Básicos Python

El documento habla sobre conceptos básicos de la ejecución de código en Python como intérpretes, compiladores y la ejecución de scripts. También explica conceptos de sintaxis, instrucciones y lo que sucede cuando hay errores.

Cargado por

Lu Comoglio
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 73

Conceptos básicos

Ejecución de Código
La ejecución se refiere al proceso por el cual un programa o script es iniciado y llevado a cabo por el ordenador,
siguiendo las instrucciones que ha sido programado para realizar. En Python, esto normalmente se hace a través de
un intérprete que lee y ejecuta el código, línea por línea.

Qué tenés que saber:

● ¿Qué es un intérprete y cómo se diferencia de un compilador?


Un intérprete es un programa que ejecuta el código fuente línea por línea, traduciendo y ejecutando cada
instrucción a medida que se encuentra. Por otro lado, un compilador traduce todo el código fuente en un
archivo ejecutable antes de la ejecución. La principal diferencia es que el intérprete ejecuta el código
directamente, mientras que el compilador genera un archivo ejecutable que se puede ejecutar de forma
independiente. Cada enfoque tiene sus ventajas y desventajas, pero en Python, por ejemplo, se utiliza un
intérprete para ejecutar el código

● ¿Cómo se ejecuta un script de Python desde la línea de comandos o terminal?

Para ejecutar un script de Python desde la línea de comandos o terminal, primero debes asegurarte de
tener Python instalado en tu computadora. Luego, sigue estos pasos:

1. Abre la línea de comandos o terminal.


2. Navega hasta la ubicación donde se encuentra el archivo del script de Python. Puedes usar los
comandos `cd` (change directory) para moverte entre carpetas.
3. Una vez que estés en la ubicación correcta, escribe el siguiente comando y presiona Enter: `python
nombre_del_script.py`. Asegúrate de reemplazar "nombre_del_script" con el nombre real de tu archivo
Python.
4. El script se ejecutará y verás la salida en la línea de comandos o terminal.

Recuerda que el nombre del archivo debe tener la extensión ".py" y que debes tener Python instalado
correctamente para que funcione.

● ¿Qué sucede si el intérprete de Python encuentra un error en el código durante la ejecución?

Si el intérprete de Python encuentra un error en el código durante la ejecución, se detendrá y mostrará un


mensaje de error que describe el problema encontrado. Este mensaje de error proporciona información
útil para ayudarte a identificar y solucionar el error.

El mensaje de error puede incluir detalles sobre el tipo de error, la línea de código donde ocurrió y una
descripción del problema. Algunos ejemplos comunes de errores incluyen la falta de una variable, la
llamada a una función inexistente o la escritura incorrecta de una sintaxis.

Es importante leer cuidadosamente el mensaje de error para comprender qué causó el problema y
corregirlo en el código. A medida que te familiarices con los mensajes de error, podrás diagnosticar y
solucionar errores más fácilmente.

Sintaxis
La sintaxis se refiere al conjunto de reglas que definen cómo deben estructurarse y escribir las instrucciones en un
lenguaje de programación. Una sintaxis correcta es esencial para que el intérprete o compilador pueda entender y
ejecutar el código.

Qué tenés que saber:

1 -
● ¿Por qué es importante seguir las reglas de sintaxis en Python?

Es importante seguir las reglas de sintaxis en Python porque el lenguaje está diseñado de manera que el
intérprete pueda entender y ejecutar correctamente el código. Las reglas de sintaxis establecen la
estructura y las reglas gramaticales que deben seguirse para que el código sea válido y funcione
correctamente.

Aquí hay algunas razones por las que es importante seguir las reglas de sintaxis en Python:

1. Legibilidad: Seguir las reglas de sintaxis hace que el código sea más fácil de leer y entender para otros
programadores, incluido tú mismo en el futuro. Esto facilita la colaboración en proyectos y el
mantenimiento del código.

2. Ejecución correcta: Python es un lenguaje de programación interpretado, lo que significa que el


intérprete ejecuta el código línea por línea. Si no se siguen las reglas de sintaxis, el intérprete puede no
entender el código y producir errores o resultados inesperados.

3. Evitar errores: Las reglas de sintaxis están diseñadas para ayudar a evitar errores comunes. Si sigues las
reglas, es menos probable que cometas errores como errores de escritura, mal uso de funciones o
referencias incorrectas de variables.

En resumen, seguir las reglas de sintaxis en Python es importante para garantizar la legibilidad, la
ejecución correcta y evitar errores en tu código.

● ¿Qué sucede si hay un error de sintaxis en tu código?

Si hay un error de sintaxis en tu código, el intérprete de Python mostrará un mensaje de error y no podrá
ejecutar el código. Esto sucede porque el intérprete no puede comprender o interpretar correctamente la
estructura del código debido al error de sintaxis.

El mensaje de error que se muestra generalmente incluirá información sobre el tipo de error de sintaxis y
la ubicación exacta donde se produjo. Puede indicar qué carácter o qué parte del código es problemático.

Es importante prestar atención a los mensajes de error de sintaxis, ya que te ayudarán a identificar y
corregir el error. Algunos ejemplos comunes de errores de sintaxis incluyen:

- Olvidar los dos puntos (:) al definir una función o un bucle.

- Olvidar cerrar correctamente los paréntesis, corchetes o comillas.

- Uso incorrecto de palabras clave o nombres de variables reservados.

- No seguir la indentación correcta en bloques de código.

Para solucionar el error de sintaxis, debes revisar cuidadosamente el código y corregir el error identificado
en el mensaje de error. Una vez que el error de sintaxis se haya corregido, podrás ejecutar el código
correctamente.

● ¿Puede un programa ser sintácticamente correcto, pero aun así no funcionar como se espera?

Sí, es posible que un programa sea sintácticamente correcto, es decir, que cumpla con todas las reglas de
sintaxis de Python, pero aún así no funcione como se espera. Esto se debe a que la sintaxis solo se refiere
a la estructura y la gramática del código, pero no garantiza que la lógica o el resultado sean los deseados.

Aquí hay algunas razones por las que un programa sintácticamente correcto puede no funcionar como se
espera:

1. Error lógico: Puede haber un error en la lógica del programa, lo que significa que la secuencia de
instrucciones no produce los resultados esperados. Esto puede deberse a una mala comprensión del
problema, un error en la secuencia de instrucciones o una lógica incorrecta en las condiciones o bucles.

2 -
2. Error de tiempo de ejecución: Un programa puede tener un error de tiempo de ejecución, que ocurre
durante la ejecución del programa debido a una operación no válida o una excepción que no se maneja
adecuadamente. Estos errores pueden ocurrir incluso si el código está sintácticamente correcto.

3. Error de lógica del programador: El programador puede haber cometido un error al diseñar o
implementar el programa, incluso si el código está sintácticamente correcto. Puede haber una falta de
consideración de casos especiales, falta de validación de datos de entrada o simplemente un mal cálculo
en la solución.

En resumen, un programa sintácticamente correcto puede no funcionar como se espera debido a errores
lógicos, errores de tiempo de ejecución o errores en la lógica del programador. Es importante revisar y
probar cuidadosamente el código para asegurarte de que funcione correctamente, más allá de la
corrección de la sintaxis.

Instrucción (También conocido como Sentencia)


Una instrucción es una orden o comando que el programador da al ordenador para que realice una tarea específica.
En Python, una instrucción podría ser una operación matemática, una llamada a una función o una declaración.

Qué tenés que saber:

● ¿Qué es una instrucción en programación?

En programación, una instrucción es una unidad de código que realiza una acción específica. Puede ser
una línea de código o un conjunto de líneas de código que se ejecutan de manera secuencial.

Las instrucciones son la forma en que se le indica al programa qué hacer paso a paso. Pueden incluir
operaciones aritméticas, asignaciones de variables, llamadas a funciones, estructuras condicionales (como
if-else), bucles (como for o while), entre otros.

Cada instrucción tiene una sintaxis específica que debe seguirse para que el programa pueda
comprenderla y ejecutarla correctamente. La secuencia en la que se escriben y ejecutan las instrucciones
es importante, ya que determina el flujo del programa y el resultado final.

En resumen, una instrucción en programación es una unidad de código que realiza una acción específica y
se utiliza para construir programas que resuelven problemas y realizan tareas.

● ¿Cómo difiere una instrucción de una función?

Una instrucción y una función son conceptos diferentes en programación.

Una instrucción es una unidad de código que realiza una acción específica dentro de un programa. Puede
ser una línea de código o un conjunto de líneas de código que se ejecutan secuencialmente. Las
instrucciones son la forma en que se le indica al programa qué hacer paso a paso.

Por otro lado, una función es un bloque de código que se puede llamar desde otras partes del programa
para realizar una tarea específica. Una función puede contener un conjunto de instrucciones y puede
tener parámetros que se utilizan para pasar valores a la función. Una función puede devolver un
resultado, que se conoce como valor de retorno.

La principal diferencia entre una instrucción y una función radica en su reutilización y modularidad. Una
instrucción se ejecuta directamente en el lugar donde se encuentra en el programa, mientras que una
función se define una vez y se puede llamar desde diferentes partes del programa, lo que promueve la
reutilización de código y la modularidad.

En resumen, una instrucción es una unidad de código que realiza una acción específica dentro de un
programa, mientras que una función es un bloque de código que se puede llamar desde otras partes del
programa para realizar una tarea específica y promover la reutilización de código.

3 -
● ¿Qué sucedería si se ejecuta un programa sin instrucciones?

Si ejecutas un programa de Python sin ninguna instrucción, el programa simplemente se ejecutará y luego
terminará. No habrá ninguna salida visible y no ocurrirá ninguna tarea porque no hay código que le
indique al programa qué hacer.

Por ejemplo, si creas un archivo llamado mi_programa.py sin ninguna instrucción dentro, y luego ejecutas
el comando python mi_programa.py en tu terminal o consola, el programa se ejecutará sin hacer nada y
volverá al prompt de comandos.

Es importante tener en cuenta que un programa de Python necesita tener al menos una instrucción (como
una asignación, una operación, una función, etc.) para hacer algo significativo. De lo contrario, no habrá
ninguna acción o salida observable.

Identación
La identación se refiere a los espacios o tabulaciones al comienzo de una línea de código. En muchos lenguajes, la
identificación es estética, pero en Python, determina la estructura del código, especialmente en bloques de código
como bucles o condicionales.

Qué tenés que saber:

● ¿Por qué es crítica la identación en Python?

La identación en Python es crítica porque no solo es una cuestión de estilo, sino que es parte de la sintaxis
del lenguaje. Esto significa que la forma en que sangras o "indenta" tu código afecta directamente la
estructura y ejecución del programa.

En otros lenguajes de programación, la identación es una cuestión de estilo y legibilidad del código, pero
no afecta la ejecución. En Python, en cambio, la identación determina los bloques de código y cómo se
agrupan las instrucciones.

Por ejemplo, en un bucle for en Python, el bloque de código que se ejecuta en cada iteración está
determinado por la identación. Aquí hay un ejemplo:

for i in range(5):

print(i)

En este caso, print(i) está indentado, lo que significa que es parte del bucle for. Si no estuviera indentado,
Python generaría un error de sintaxis.

Debido a que Python utiliza la identación en lugar de llaves o palabras clave para definir bloques de
código, esto promueve un código más limpio y legible, pero también significa que la identación adecuada
es crucial para que el programa funcione correctamente.

Si no sigues la identación adecuada, es posible que obtengas errores de sintaxis o que el programa se
comporte de manera inesperada. Por lo tanto, es fundamental prestar atención a la identación al escribir
código en Python.

● ¿Cómo indica la identación que un bloque de código pertenece a una estructura de control específica?

En Python, la identación indica la pertenencia de un bloque de código a una estructura de control


específica utilizando espacios o tabulaciones. Cada nivel de indentación crea un nuevo bloque de código.

Por ejemplo, considera el siguiente código que incluye un bucle for y una estructura condicional if:

for i in range(5):

if i % 2 == 0:

print(f"{i} es par")

4 -
else:

print(f"{i} es impar")

En este ejemplo:

La línea for i in range(5): comienza el bucle for y se termina con dos puntos :. La siguiente línea (la primera
dentro del bucle) está indentada con cuatro espacios y pertenece al bloque del bucle for.

Dentro del bucle for, hay una estructura condicional if i % 2 == 0:. De nuevo, se termina con dos puntos :.
Las líneas siguientes están indentadas con otros cuatro espacios y pertenecen al bloque del if.

Dentro del if, hay una instrucción print(f"{i} es par") y una instrucción else: que comienza la rama else de
la estructura condicional. Ambas líneas están indentadas con otros cuatro espacios y pertenecen al bloque
del if.

La instrucción print(f"{i} es impar") está indentada al mismo nivel que la instrucción print(f"{i} es par") y
pertenece al bloque del else.

La indentación es crucial en Python, ya que determina la estructura del código. Si la indentación no es


correcta, Python generará un error de indentación y el programa no se ejecutará correctamente. Por lo
tanto, asegúrate de mantener una consistente y adecuada indentación en tu código Python.

● ¿Qué sucede si se mezclan espacios y tabulaciones en la indentación de un mismo script?

Si se mezclan espacios y tabulaciones en la indentación de un mismo script de Python, esto puede llevar a
errores de indentación y el código podría no funcionar correctamente. Python requiere coherencia en la
forma en que se realiza la indentación.

En Python 3, mezclar espacios y tabulaciones se considera un error de sintaxis y generará un mensaje de


error como "IndentationError: unindent does not match any outer indentation level".

Por esta razón, es importante elegir un estilo de indentación (ya sea espacios o tabulaciones) y
mantenerlo consistente en todo tu código. La PEP 8, que es la guía de estilo de código para Python,
recomienda usar espacios en lugar de tabulaciones para la indentación.

Si estás utilizando un editor de texto o un entorno de desarrollo que es compatible con Python,
generalmente se configurará automáticamente para usar espacios en lugar de tabulaciones. Además,
muchos editores de texto tienen la opción de convertir las tabulaciones en espacios o viceversa.

Si alguna vez te encuentras con un código que tiene mezcla de espacios y tabulaciones, te recomiendo
corregirlo para que sea coherente antes de ejecutarlo para evitar errores de indentación.

Tipos de Dato
Los tipos de datos se refieren a las diferentes categorías de datos que pueden ser procesados por un lenguaje de
programación. Python, como muchos otros lenguajes, incluye tipos de datos como enteros, flotantes, cadenas y
booleanos, entre otros.

Qué tenés que saber:

● ¿Cuáles son los tipos de datos primitivos más comunes en Python?

Python tiene varios tipos de datos primitivos comunes que se utilizan para representar diferentes tipos de
información. Los tipos de datos primitivos más comunes en Python incluyen:

● Enteros (int): Representan números enteros. Por ejemplo: 5, -10, 1000.


● Números de punto flotante (float): Representan números decimales o de punto flotante. Por
ejemplo: 3.14, 0.001, -2.5.
● Cadenas (str): Representan secuencias de caracteres, como texto. Por ejemplo: "Hola, mundo",
'Python es genial', "123".

5 -
● Booleanos (bool): Representan valores de verdad. Pueden ser True (verdadero) o False (falso).
Se utilizan en expresiones lógicas y de control de flujo, como condicionales y bucles.
● Listas (list): Son colecciones ordenadas de elementos, que pueden ser de diferentes tipos. Se
definen usando corchetes []. Por ejemplo: [1, 2, 3], ['manzana', 'banana', 'cereza'].
● Tuplas (tuple): Son similares a las listas, pero son inmutables, lo que significa que no se pueden
modificar después de su creación. Se definen usando paréntesis (). Por ejemplo: (1, 2, 3), ('rojo',
'verde', 'azul').
● Diccionarios (dict): Son colecciones de pares clave-valor. Cada elemento tiene una clave única
que se utiliza para acceder al valor asociado. Se definen usando llaves {}. Por ejemplo:
{'nombre': 'Juan', 'edad': 30, 'ciudad': 'Buenos Aires'}.
● Conjuntos (set): Son colecciones desordenadas de elementos únicos. Se definen usando llaves {}
o la función set(). Por ejemplo: {1, 2, 3}, {'manzana', 'banana', 'manzana'}.
● Estos son los tipos de datos primitivos más comunes en Python, y cada uno tiene sus propias
características y usos. Python también permite crear tipos de datos personalizados mediante la
definición de clases, lo que amplía la flexibilidad del lenguaje.

● ¿Cómo se puede determinar el tipo de datos de una variable en Python?

En Python, puedes determinar el tipo de datos de una variable usando la función type().

Ejemplo:

x=5

y = "Hola"

z = 3.14

print(type(x)) # Output: <class 'int'>

print(type(y)) # Output: <class 'str'>

print(type(z)) # Output: <class 'float'>

En este ejemplo, se crea una variable x que contiene un entero, y que contiene una cadena y z que
contiene un número de punto flotante. Luego, se utiliza la función type() para imprimir el tipo de cada
variable.

La salida será <class 'int'> para x, <class 'str'> para y y <class 'float'> para z, indicando que x es de tipo
entero, y es de tipo cadena y z es de tipo punto flotante.

Esta función es útil cuando necesitas saber qué tipo de datos está almacenado en una variable, lo cual
puede ser importante en situaciones donde necesitas realizar operaciones específicas o asegurarte de que
los tipos de datos son compatibles.

● ¿Qué es la conversión de tipos y por qué podría ser útil?

La conversión de tipos, también conocida como "casting", es el proceso de cambiar el tipo de un valor o
variable en un lenguaje de programación. Esto permite que un valor sea interpretado y utilizado como un
tipo diferente al que originalmente se le asignó.

La conversión de tipos puede ser útil por varias razones:

Operaciones y Cálculos: A veces, necesitas realizar operaciones entre valores de diferentes tipos. Por
ejemplo, sumar un entero y un número de punto flotante. En este caso, necesitarías convertir uno de los
valores para que coincida con el tipo del otro antes de realizar la operación.

x=5

y = 3.14

6 -
resultado = x + y # Esto generaría un error porque los tipos son diferentes

resultado = x + int(y) # Convierte y a entero antes de la operación

Interacción con Funciones o Bibliotecas: A veces, las funciones o bibliotecas pueden esperar ciertos tipos
de datos como entrada. Si tienes un valor de un tipo diferente, es posible que necesites convertirlo antes
de pasarlo como argumento.

x = "10"

resultado = int(x) # Convierte la cadena a un entero antes de utilizarlo

Formateo y Presentación de Datos: Para mostrar datos de una manera específica en una interfaz de
usuario o en un informe, puede ser necesario convertirlos a un formato adecuado.

numero = 3.14159265359

texto = str(numero) # Convierte el número a una cadena para mostrarlo

Manipulación de Datos: A veces, los datos se almacenan o se obtienen en un tipo específico, pero
necesitas manipularlos de una manera que requiere un tipo diferente.

edad = "30"

edad_entero = int(edad) # Convierte la cadena a un entero para operaciones matemáticas

Es importante tener en cuenta que no todas las conversiones de tipos son seguras y pueden llevar a
pérdida de información o errores si se hace de manera incorrecta. Por lo tanto, es esencial comprender
los tipos de datos y cómo se comportan al realizar conversiones.

Consola (También conocido como Terminal o Línea de Comandos)


La consola, terminal o línea de comandos es una interfaz textual que permite a los usuarios interactuar con el
sistema operativo mediante comandos escritos. Es especialmente útil para la ejecución de programas, gestión de
archivos y otras tareas administrativas sin la necesidad de una interfaz gráfica.

Qué tenés que saber:

● ¿Para qué se utiliza la terminal o línea de comandos?

La terminal o línea de comandos es una interfaz de texto que te permite interactuar con tu computadora
a través de comandos de texto en lugar de una interfaz gráfica de usuario. Aquí te explico algunas de las
principales razones por las que se utiliza la terminal:

Automatización y Scripts: La terminal es especialmente útil para la automatización de tareas repetitivas.


Puedes escribir scripts y programas en lenguajes de scripting (como Bash, PowerShell o Python) para
realizar tareas complejas con un solo comando.

Administración de Archivos y Directorios: Puedes navegar por tu sistema de archivos, crear, mover, copiar
y eliminar archivos y directorios fácilmente utilizando comandos en la terminal.

Gestión de Procesos: Puedes ver y administrar los procesos en ejecución, iniciar y detener aplicaciones, y
gestionar recursos del sistema utilizando comandos como ps, kill, top, entre otros.

Instalación y Gestión de Software: Muchos sistemas operativos basados en Unix (como Linux y macOS)
permiten instalar y gestionar software utilizando la línea de comandos. Por ejemplo, en Linux, se utilizan
comandos como apt (en Debian y Ubuntu) o yum (en CentOS y Fedora) para instalar paquetes.

Configuración del Sistema: Puedes configurar y modificar la configuración del sistema operativo, como la
red, la seguridad y otras configuraciones, a través de la línea de comandos.

Desarrollo de Software: Los desarrolladores a menudo utilizan la terminal para compilar, depurar y
administrar proyectos de software. Herramientas de compilación y entornos de desarrollo a menudo
tienen interfaces de línea de comandos.

7 -
Acceso Remoto y Servidores: En entornos de servidor, donde no hay una interfaz gráfica, la terminal es la
principal forma de interactuar con el sistema. También se utiliza para la administración remota a través de
conexiones SSH.

Diagnóstico y Resolución de Problemas: La terminal proporciona acceso a herramientas y comandos de


diagnóstico que pueden ser útiles para solucionar problemas en el sistema.

Pruebas y Depuración: Muchas pruebas y procesos de depuración se realizan a través de la línea de


comandos, especialmente para aplicaciones y sistemas que se ejecutan en entornos sin interfaz gráfica.

Acceso a Herramientas Avanzadas: Muchas herramientas avanzadas y de administración de sistemas solo


están disponibles a través de la línea de comandos.

En resumen, la terminal proporciona una forma poderosa y flexible de interactuar con tu sistema
operativo y realizar una amplia variedad de tareas, desde tareas administrativas hasta desarrollo de
software y administración de servidores.

● ¿Cómo se ejecuta un script de Python desde la terminal?

Para ejecutar un script de Python desde la terminal, sigue estos pasos:

Abre la Terminal: Abre la terminal o línea de comandos en tu sistema operativo. La forma de hacerlo
puede variar según el sistema operativo que estés utilizando. En sistemas basados en Unix (como Linux o
macOS), generalmente puedes encontrar la terminal en el menú de aplicaciones o utilizar un atajo de
teclado como Ctrl + Alt + T. En Windows, puedes buscar "cmd" o "Powershell" en el menú Inicio.

Navega al Directorio del Script (Opcional): Si el script de Python está en un directorio diferente al
directorio en el que te encuentras en la terminal, debes navegar hasta el directorio donde se encuentra el
script. Utiliza los comandos cd (cambiar directorio) para navegar por los directorios.

Por ejemplo, si tu script está en el directorio /ruta/a/mi_script, puedes navegar a ese directorio en la
terminal de la siguiente manera (en sistemas basados en Unix):

cd /ruta/a/mi_script

Ejecuta el Script: Una vez que estés en el directorio correcto o si el script está en el directorio actual,
puedes ejecutar el script utilizando el comando python seguido del nombre de tu archivo de script. Por
ejemplo:

python mi_script.py

Asegúrate de reemplazar mi_script.py con el nombre real de tu archivo de script. Si estás usando Python
3, puedes usar python3 en lugar de python si tienes ambas versiones instaladas y deseas especificar la
versión que deseas utilizar.

Presiona Enter: Después de escribir el comando, presiona la tecla "Enter" para ejecutar el script.

Si el script está escrito correctamente y no contiene errores, se ejecutará y producirá cualquier salida que
hayas especificado en el código, como impresiones en pantalla. Si hay errores en el script, verás mensajes
de error en la terminal que te indicarán qué salió mal. Deberás corregir esos errores antes de que el script
se ejecute correctamente.

Comentarios
son notas o explicaciones en el código que no son ejecutadas por el intérprete. En Python, los comentarios se crean
usando el símbolo #. Son útiles para clarificar y documentar el código.

Qué tenés que saber:

● ¿Cómo se escribe un comentario en Python?

8 -
En Python, puedes escribir comentarios para proporcionar explicaciones o anotaciones en tu código. Los
comentarios son texto que Python ignora durante la ejecución del programa. Se utilizan para hacer el
código más legible y comprensible para los programadores y para documentar partes del código.

Para escribir un comentario en Python, puedes usar el símbolo # seguido del texto del comentario. Aquí
hay algunos ejemplos:

# Esto es un comentario de una sola línea

x = 5 # Esto es un comentario en la misma línea que una instrucción

● ¿Por qué es útil usar comentarios en el código?

Es buena práctica utilizar comentarios para explicar el propósito de partes del código, especialmente en
secciones que puedan no ser intuitivas para otros programadores o para ti mismo en el futuro. Esto hace
que el código sea más fácil de entender y mantener.

● ¿Puede un comentario ocupar varias líneas? Si es así, ¿cómo?

"""

Esto es un comentario de varias líneas.

Puedes escribir varias líneas de texto

dentro de comillas triples.

"""

'''

También puedes usar comillas simples

para comentarios de varias líneas.

'''

Ten en cuenta que los comentarios de varias líneas también pueden ser encerrados entre comillas triples,
ya sean comillas simples (''') o comillas dobles ("""). Esto es útil cuando necesitas comentarios que
abarquen varias líneas de código.

Salida de Datos
Se refiere a la manera en que un programa muestra o retorna información al usuario. En Python, la función print()
es comúnmente utilizada para mostrar datos en la terminal o consola.

Qué tenés que saber:

● ¿Qué función se utiliza en Python para mostrar datos al usuario?

En Python, se utiliza la función print() para mostrar datos al usuario en la consola o terminal. La función
print() toma uno o más argumentos y los muestra en la salida estándar.

Por ejemplo, si deseas mostrar el texto "Hola, mundo!" en la consola, puedes hacerlo de la siguiente
manera:

print("Hola, mundo!")

También puedes imprimir variables o expresiones. Por ejemplo:

x=5

y = "Python"

9 -
print(x) # Esto imprimirá el valor de la variable x

print("El valor de y es:", y) # Esto imprimirá el valor de y junto con el texto

Además de los argumentos que se proporcionan a print(), también puedes usar secuencias de escape,
como \n para una nueva línea y \t para un tabulador.

Por ejemplo:

print("Primera línea\nSegunda línea")

Esto imprimirá:

Primera línea

Segunda línea

Recuerda que print() es una forma esencial de proporcionar información y resultados a los usuarios de tu
programa, por lo que es importante entender cómo usarlo de manera efectiva.

● ¿Cómo se puede formatear la salida de datos en Python?

En Python, hay varias formas de formatear la salida de datos para que se muestre de la manera que
desees. Algunas de las técnicas más comunes son:

Concatenación de Cadenas: Puedes concatenar (unir) cadenas y variables utilizando el operador +. Por
ejemplo:

nombre = "Juan"

edad = 30

print("Mi nombre es " + nombre + " y tengo " + str(edad) + " años.")

Método str.format(): Este método permite incrustar valores dentro de cadenas utilizando llaves {} como
marcadores de posición y luego usar el método format() para llenar esos marcadores con valores. Por
ejemplo:

nombre = "Juan"

edad = 30

print("Mi nombre es {} y tengo {} años.".format(nombre, edad))

F-strings (o fórmulas literales de cadenas): Esta es una característica introducida en Python 3.6 que te
permite incrustar valores directamente en una cadena utilizando la sintaxis f"...". Por ejemplo:

nombre = "Juan"

edad = 30

print(f"Mi nombre es {nombre} y tengo {edad} años.")

Método % de formateo de cadenas: Esta es una forma más antigua de formateo de cadenas que utiliza el
operador %. Aunque todavía es compatible, se prefiere el uso de f-strings o el método str.format(). Un
ejemplo sería:

nombre = "Juan"

edad = 30

print("Mi nombre es %s y tengo %d años." % (nombre, edad))

Estas son algunas de las formas más comunes de formatear la salida de datos en Python. Las f-strings son
particularmente populares debido a su legibilidad y simplicidad, pero cada método tiene sus propias
ventajas y puede ser útil en diferentes situaciones. Elige el método que mejor se adapte a tus necesidades
y preferencias.

10 -
● ¿Qué sucede si intentas mostrar una variable que no ha sido definida?

Si intentas mostrar una variable que no ha sido definida, Python generará un error llamado NameError.
Este error indica que estás intentando acceder a una variable que no existe en el ámbito actual.

NameError: name 'variable_no_definida' is not defined

Este error te indica que Python no puede encontrar una variable llamada variable_no_definida en el
ámbito actual. Puede haber varias razones para este error, como una ortografía incorrecta del nombre de
la variable o el intento de acceder a una variable antes de haberla definido.

Para corregir este error, asegúrate de que la variable esté definida en el lugar correcto y de que el nombre
de la variable esté escrito correctamente.

Entrada de Datos
Permite a los programas recibir información del usuario. En Python, esto se logra comúnmente con la función
input(), que lee una línea de texto desde la consola y la retorna como una cadena.

Qué tenés que saber:

● ¿Qué función se utiliza en Python para recibir datos del usuario?

La función que se utiliza para recibir datos del usuario a través de la consola es input().

El argumento que le pasas a input() es el mensaje que se mostrará al usuario, pidiéndole que ingrese un
valor. En el ejemplo anterior, el programa imprimirá "Por favor, ingresa tu nombre:" y luego esperará a
que el usuario ingrese algo. Una vez que el usuario presiona Enter, el valor ingresado se almacena en la
variable entrada.

Recuerda siempre manejar los posibles errores que puedan surgir al recibir y convertir la entrada del
usuario para garantizar que tu programa funcione correctamente en todas las situaciones.

● ¿Cómo se puede convertir la entrada de datos a diferentes tipos?

Es importante tener en cuenta que input() siempre devuelve una cadena de texto (str), incluso si el
usuario ingresa un número. Si necesitas que el valor sea de un tipo específico, como un número entero o
un número de punto flotante, deberás convertirlo utilizando las funciones int() o float() según
corresponda.

Por ejemplo:

edad = int(input("Por favor, ingresa tu edad: "))

Esta instrucción primero pide al usuario que ingrese su edad, luego convierte la entrada a un número
entero usando int() y lo almacena en la variable edad. Si el usuario ingresa algo que no puede ser
convertido a un número entero, se generará un error.

● ¿Qué sucede si se intenta operar directamente con la salida de la función input() esperando un tipo de
dato numérico?

Si intentas operar directamente con la salida de la función input() sin realizar una conversión de tipo,
Python tratará el valor ingresado como una cadena de texto (str). Si estás esperando un tipo de dato
numérico y tratas de realizar operaciones matemáticas, obtendrás un error de tipo (TypeError) ya que no
se pueden realizar operaciones matemáticas directamente en cadenas de texto.

Para solucionar esto, debes convertir la entrada a un tipo numérico utilizando las funciones int() o float()
según corresponda, como se muestra en el siguiente ejemplo:

11 -
numero = input("Por favor, ingresa un número: ")

numero = int(numero) # Convertir la entrada a un número entero

resultado = numero + 5

Ahora, si el usuario ingresa el número 10, la operación se realizará correctamente y el resultado tendrá el
valor 15.

Módulo
En Python es un archivo de extensión '.py' que contiene definiciones, funciones, clases y variables, así como código
ejecutable. Los módulos se crean para organizar el código y promover la reutilización.

Qué tenés que saber:

● ¿Qué es un módulo en Python y por qué son útiles?

En Python, un módulo es un archivo que contiene definiciones y declaraciones de Python. Puede contener
funciones, variables y clases, así como ejecutar código que se ejecutará cuando el módulo sea importado.
Los módulos permiten organizar y reutilizar código de manera eficiente.

Los módulos son útiles por varias razones:

Organización del Código: Los módulos permiten organizar el código en archivos separados, lo que facilita
la gestión y mantenimiento de proyectos grandes y complejos.

Reutilización de Código: Puedes crear módulos con funciones y clases que puedes reutilizar en diferentes
partes de tu programa o incluso en proyectos diferentes.

División del Trabajo en Equipo: Los módulos permiten a diferentes miembros del equipo trabajar en
diferentes partes del código de manera independiente y luego integrar sus contribuciones.

Abstracción y Encapsulación: Puedes encapsular funcionalidades en módulos, lo que facilita la abstracción


y oculta la complejidad del código a otros desarrolladores.

Facilita la Mantenibilidad: Los módulos bien organizados hacen que sea más fácil mantener y actualizar el
código, ya que cada parte está en su propio archivo.

Facilita la Distribución de Software: Los módulos pueden ser distribuidos como bibliotecas para que otros
programadores los utilicen en sus propios proyectos.

Por ejemplo, si tienes un conjunto de funciones y clases que realizan operaciones matemáticas complejas,
puedes organizarlas en un módulo llamado matematicas.py. Luego, puedes importar este módulo en
otros archivos para utilizar esas funciones y clases sin tener que volver a escribir el código.

# En matematicas.py

def suma(a, b):

return a + b

def resta(a, b):

return a - b

# En otro archivo

import matematicas

resultado_suma = matematicas.suma(5, 3)

Así, los módulos ayudan a mantener el código organizado, promueven la reutilización y facilitan el trabajo
colaborativo en proyectos de programación.

12 -
● ¿Cómo se define un módulo?

Un módulo en Python es simplemente un archivo Python (con extensión .py) que contiene definiciones y
declaraciones de código Python. Puedes crear un módulo siguiendo estos pasos:

Crea un Archivo Python: Abre tu editor de texto o entorno de desarrollo y crea un nuevo archivo con una
extensión .py, por ejemplo, mi_modulo.py.

Escribe Código en el Módulo: Dentro del archivo, puedes escribir código Python, incluyendo definiciones
de funciones, clases, variables y cualquier otra cosa que desees incluir en tu módulo.

Por ejemplo, podrías tener un archivo mi_modulo.py con el siguiente contenido:

python

Copy code

# mi_modulo.py

def saludar(nombre):

print(f"Hola, {nombre}!")

def suma(a, b):

return a + b

def resta(a, b):

return a - b

PI = 3.1416

● ¿En qué se diferencia un módulo de un script en Python?

Un módulo y un script en Python son ambos archivos de código Python, pero se utilizan de manera
diferente y tienen propósitos distintos:

Módulo:

● Un módulo es un archivo Python que contiene definiciones y declaraciones de código Python.


● Su propósito principal es proporcionar una forma de organizar y reutilizar código en diferentes
partes de un programa o en diferentes programas.
● Los módulos se importan en otros archivos Python para utilizar las definiciones y funciones que
contienen.
● Los módulos suelen contener funciones, clases, variables y cualquier otra definición de código
que pueda ser útil en múltiples partes del programa.
● Por convención, los nombres de los módulos deben seguir las mismas reglas de nomenclatura
que las variables en Python (minúsculas, palabras separadas por guiones bajos para la
legibilidad, etc.).

Script:

● Un script es un archivo Python que se puede ejecutar directamente desde la línea de comandos
o desde un entorno de desarrollo.
● Su propósito principal es proporcionar una secuencia de instrucciones que se ejecutan en un
orden específico para llevar a cabo una tarea o resolver un problema particular.
● Los scripts suelen contener un conjunto de instrucciones que se ejecutan de arriba a abajo en el
archivo.
● Los scripts a menudo incluyen un punto de entrada o un bloque de código que se ejecuta
cuando se inicia el script.
● A diferencia de los módulos, los scripts generalmente se ejecutan directamente y no se
importan en otros archivos.

13 -
En resumen, un módulo es un archivo de código Python destinado principalmente a ser importado y
reutilizado en otros programas, mientras que un script es un archivo de código Python que se ejecuta de
manera independiente para realizar una tarea específica.

Importación de Módulo
La importación de módulos en Python permite acceder y usar las funciones, clases y variables definidas en un
módulo. Esto se hace mediante la declaración import. Existen varias formas de importar, ya sea el módulo completo
o partes específicas del mismo.

Qué tenés que saber:

● ¿Cómo se importa un módulo en Python?

Para importar un módulo en Python, puedes utilizar la palabra clave import seguida del nombre del
módulo. Aquí hay algunas formas comunes de importar módulos:

● Importar el Módulo Completo:

import mi_modulo

Esto importa todo el contenido del módulo mi_modulo. Para utilizar las definiciones del módulo,
simplemente precede el nombre con el nombre del módulo, por ejemplo mi_modulo.funcion().

● Importar un Módulo con un Alias:

A veces, es útil darle al módulo un alias (un nombre corto) para facilitar su uso:

import mi_modulo as mm

Ahora puedes usar mm en lugar de mi_modulo. Por ejemplo, mm.funcion().

● Importar Sólo Partes Específicas del Módulo:

Puedes importar solo ciertas definiciones o variables de un módulo si no necesitas todo su contenido. Esto
se hace utilizando la forma from ... import ....

Por ejemplo, si solo necesitas la función saludar del módulo mi_modulo:

from mi_modulo import saludar

Ahora puedes usar saludar() directamente sin tener que escribir mi_modulo.saludar().

● Importar Todas las Definiciones del Módulo:

Puedes importar todas las definiciones de un módulo utilizando from ... import *. Sin embargo, se
recomienda evitar este enfoque en general, ya que puede hacer que sea difícil rastrear de dónde
provienen las definiciones en tu código.

Por ejemplo:

from mi_modulo import *

Ahora puedes usar todas las definiciones del módulo sin tener que precederlas con mi_modulo..

Recuerda que para que un módulo sea importable, debe estar en el mismo directorio que el archivo que
lo está importando o en un directorio incluido en el sys.path. También puedes agregar directorios al
sys.path para hacer que los módulos en esos directorios sean importables.

Una vez que hayas importado un módulo, puedes utilizar sus definiciones y funciones en tu código.

● ¿Cuál es la diferencia entre import module y from module import function?

14 -
La diferencia principal entre import module y from module import function radica en cómo se accede a las
definiciones del módulo y cómo se utilizan en tu código.

import module:

Cuando importas un módulo usando import module, importas todo el módulo con todas sus definiciones y
variables. Esto significa que el módulo en sí se convierte en un objeto y debes acceder a sus definiciones
utilizando el nombre del módulo como prefijo.

Por ejemplo, si tienes un módulo llamado mi_modulo y deseas usar una función llamada funcion definida
en ese módulo, debes hacerlo de esta manera:

import mi_modulo

resultado = mi_modulo.funcion()

Esto hace que el código sea más explícito y evita conflictos de nombres, ya que todas las definiciones del
módulo se acceden a través del prefijo mi_modulo..

from module import function:

Cuando importas una función específica desde un módulo usando from module import function, importas
solo esa función y puedes utilizarla directamente sin el prefijo del nombre del módulo.

Por ejemplo, si tienes el mismo módulo mi_modulo y deseas usar solo la función funcion, puedes hacerlo
de esta manera:

from mi_modulo import funcion

resultado = funcion()

Esto hace que el código sea más conciso y permite utilizar la función sin el prefijo del nombre del módulo.

La elección entre import module y from module import function depende de tus necesidades y
preferencias:

Si el módulo es grande y solo necesitas unas pocas definiciones de él, es más eficiente importar solo las
definiciones necesarias utilizando from module import function.

Si el módulo es pequeño o planeas utilizar muchas de sus definiciones, es más claro y explícito importar el
módulo completo con import module.

En general, se recomienda usar import module cuando sea posible para evitar conflictos de nombres y
hacer que el código sea más legible, especialmente en proyectos más grandes. Sin embargo, en casos
donde solo necesitas unas pocas funciones o definiciones de un módulo grande, from module import
function puede ser conveniente.

● ¿Qué sucede si intentas importar un módulo que no existe?

Si intentas importar un módulo que no existe en Python, se generará un error llamado


ModuleNotFoundError. Esto indica que Python no puede encontrar el archivo correspondiente al módulo
que estás tratando de importar.

import modulo_inexistente

Obtendrás un error como este:

ModuleNotFoundError: No module named 'modulo_inexistente'

15 -
Biblioteca Estándar
La biblioteca estándar de Python es un conjunto de módulos que vienen incluidos con cualquier instalación normal
de Python. Estos módulos ofrecen funcionalidades que van desde operaciones matemáticas hasta el manejo de
archivos, facilitando muchas tareas comunes.

Qué tenés que saber:

● ¿Qué es la biblioteca estándar en Python?

La biblioteca estándar de Python se refiere a un conjunto de módulos y paquetes que vienen incluidos con
la instalación estándar de Python. Estos módulos proporcionan una amplia gama de funcionalidades y
herramientas que abarcan áreas como manipulación de archivos, networking, manejo de hilos,
matemáticas, procesamiento de texto, entre muchas otras.

La biblioteca estándar es parte integral de Python y está disponible para su uso inmediato sin necesidad
de instalar nada adicional. Contiene módulos que facilitan el desarrollo de aplicaciones en Python, ya que
proporciona una gran cantidad de código reutilizable que aborda tareas comunes.

La biblioteca estándar es una de las características distintivas de Python y es una de las razones por las
que Python es conocido por su legibilidad, facilidad de uso y rapidez en el desarrollo. Los módulos de la
biblioteca estándar son ampliamente utilizados en la comunidad de Python y forman una parte esencial
del ecosistema de desarrollo de Python.

● ¿Por qué es útil la biblioteca estándar?

La biblioteca estándar de Python es extremadamente útil por varias razones:

● Amplia Gama de Funcionalidades: Cubre una amplia variedad de áreas, desde operaciones
básicas hasta tareas más complejas, lo que significa que no tienes que escribir código desde cero
para muchas tareas comunes.
● Eficiencia en el Desarrollo: Proporciona una gran cantidad de código predefinido y probado, lo
que acelera el proceso de desarrollo al reducir la necesidad de escribir código repetitivo o de
bajo nivel.
● Consistencia y Calidad: Los módulos de la biblioteca estándar están escritos y mantenidos por
expertos en Python, lo que garantiza su calidad y coherencia. Además, siguen las convenciones y
estándares de codificación de Python.
● Portabilidad: Al estar incluida en la instalación estándar de Python, la biblioteca estándar está
disponible en todas las plataformas compatibles con Python, lo que garantiza la portabilidad de
tu código entre diferentes sistemas operativos.
● Facilita el Desarrollo de Aplicaciones Complejas: Proporciona herramientas esenciales para
desarrollar aplicaciones complejas, como manipulación de archivos, acceso a bases de datos,
manipulación de fechas y horas, y más.
● Documentación Abundante: Cada módulo de la biblioteca estándar viene con documentación
detallada que describe cómo usarlo y proporciona ejemplos, lo que facilita su aprendizaje y uso.
● Base para Ecosistema de Paquetes y Librerías Externas: Muchas bibliotecas y paquetes de
terceros están construidos sobre la base de la biblioteca estándar, lo que significa que es
esencial para el funcionamiento de muchas aplicaciones y proyectos Python.
● Facilita la Programación Multidisciplinaria: Al cubrir una amplia gama de áreas, desde
matemáticas hasta manipulación de archivos y networking, la biblioteca estándar facilita la
programación en diversos dominios y disciplinas.
● Ahorra Tiempo y Esfuerzo: Al proporcionar funcionalidades listas para usar, la biblioteca
estándar te permite concentrarte en la lógica específica de tu aplicación en lugar de tener que
implementar funcionalidades básicas desde cero.

En resumen, la biblioteca estándar es una de las fortalezas fundamentales de Python y es una razón
importante por la cual Python es una elección popular para una amplia variedad de aplicaciones y
proyectos de desarrollo.

● Menciona módulos que formen parte de la biblioteca estándar y describe brevemente su funcionalidad

16 -
Algunos ejemplos de módulos en la biblioteca estándar incluyen:

● os: Proporciona una interfaz para interactuar con el sistema operativo, permitiendo manipular
archivos, directorios y otros recursos del sistema.
● datetime: Ofrece clases y funciones para trabajar con fechas y horas de manera efectiva.
● math: Contiene funciones matemáticas comunes y constantes.
● urllib: Permite interactuar con URLs y realizar operaciones como descarga de archivos desde la
web.
● random: Proporciona herramientas para la generación de números pseudoaleatorios.
● re: Ofrece herramientas para el procesamiento de expresiones regulares.
● json: Permite la serialización y deserialización de datos en formato JSON
● urllib: Permite interactuar con URLs y realizar operaciones como descarga de archivos desde la
web.
● socket: Proporciona funcionalidades para la programación de sockets, lo que permite la
comunicación entre procesos en una red.
● sqlite3: Proporciona una interfaz de Python para trabajar con bases de datos SQLite.
● collections: Ofrece alternativas a los tipos de datos incorporados de Python, como dict, list,
tuple, etc., proporcionando funcionalidades adicionales.
● csv: Facilita la lectura y escritura de archivos CSV (Comma Separated Values), un formato de
archivo comúnmente utilizado para intercambiar datos tabulares.
● os.path: Este módulo proporciona funciones para manipular rutas de archivo y nombres de
archivo de manera independiente del sistema operativo.
● argparse: Ayuda a analizar los argumentos de línea de comandos de un programa, lo que facilita
la creación de interfaces de usuario basadas en texto.
● threading: Proporciona herramientas para trabajar con hilos de ejecución en Python, lo que
permite la ejecución concurrente de tareas.
● multiprocessing: Ofrece funcionalidades para la creación y gestión de procesos en Python, lo
que permite la ejecución paralela de tareas.
● logging: Facilita la creación y configuración de registros (logs) en Python, lo que es esencial para
el seguimiento y la depuración de aplicaciones.

Estos son solo algunos ejemplos de los muchos módulos que forman parte de la biblioteca estándar de Python.
Cada uno de estos módulos proporciona funcionalidades esenciales que pueden ser utilizadas en una amplia
variedad de aplicaciones y proyectos.

Cuaderno (También conocido como Jupyter Notebook)


Jupyter Notebook es una aplicación web que permite crear y compartir documentos que contienen código en vivo,
ecuaciones, visualizaciones y texto explicativo. Es ampliamente utilizado en análisis de datos, ciencia de datos,
investigación científica y educación debido a su capacidad de combinar explicación narrativa con ejecución de
código en tiempo real. Estos documentos se guardan con la extensión .ipynb. Un lugar donde se pueden usar es en
Google Colab.

Qué tenés que saber:

● ¿Qué es un Jupyter Notebook y cuáles son sus principales características?

Un Jupyter Notebook es un entorno de desarrollo interactivo que te permite escribir y ejecutar código en
un formato de documento combinado con texto enriquecido, gráficos, ecuaciones y más. Es una
herramienta popular en el ámbito de la ciencia de datos y la investigación, pero también se utiliza en otros
campos de la programación.

Aquí están algunas de las principales características de un Jupyter Notebook:

● Entorno Interactivo: Permite ejecutar código de manera interactiva, lo que significa que puedes
ejecutar bloques de código uno a la vez y ver los resultados inmediatamente.
● Soporte para Múltiples Lenguajes: Aunque se originó como un entorno para Python, Jupyter
Notebook admite una amplia gama de lenguajes de programación, incluidos Python, R, Julia y
muchos otros.

17 -
● Documentación Integrada: Permite combinar texto explicativo (escrito en Markdown o LaTeX)
con celdas de código, lo que facilita la creación de documentos que incluyan explicaciones,
ecuaciones, gráficos y código ejecutable en un solo lugar.
● Gráficos y Visualizaciones: Puedes generar gráficos, visualizaciones y otros tipos de
representaciones visuales directamente en el notebook, lo que facilita la exploración de datos y
la presentación de resultados.
● Facilidad de Compartir y Exportar: Los notebooks se pueden guardar en un archivo con
extensión .ipynb, lo que facilita su intercambio y colaboración con otros. También se pueden
exportar en otros formatos, como PDF, HTML o presentaciones interactivas.
● Integración con Herramientas de Ciencia de Datos: Se integra bien con herramientas populares
de ciencia de datos y análisis de datos, como pandas, NumPy, matplotlib, seaborn, entre otras.
● Acceso a Recursos del Sistema: Puedes acceder a recursos del sistema, como el sistema de
archivos y servicios del sistema operativo, lo que hace que sea posible realizar tareas más
complejas en un entorno interactivo.
● Widgets Interactivos: Puedes agregar widgets interactivos como deslizadores, botones y cuadros
de texto, lo que permite una interacción más dinámica con tu código.
● Celdas de Texto y Código Ejecutables: Los notebooks están compuestos de celdas, que pueden
ser de texto o de código. Las celdas de texto permiten documentar y explicar el código, mientras
que las celdas de código contienen el código ejecutable.
● Reproducibilidad: Facilita la reproducibilidad de los resultados, ya que todos los pasos desde la
carga de datos hasta la visualización y el análisis están documentados y pueden ser ejecutados
en el mismo entorno.

En resumen, un Jupyter Notebook proporciona una forma interactiva y altamente flexible de escribir y
ejecutar código, lo que lo convierte en una herramienta invaluable para la investigación, el análisis de
datos y el desarrollo de proyectos que requieran una combinación de código y documentación.

● ¿Cómo se ejecuta una celda de código en un Jupyter Notebook?

Para ejecutar una celda de código en un Jupyter Notebook, sigue estos pasos:

Selecciona la Celda: Haz clic en la celda de código que deseas ejecutar. La celda seleccionada se resaltará.

Ejecuta la Celda:

Utiliza la combinación de teclas Shift + Enter o presiona el botón "Run" (que generalmente se representa
como un triángulo) en la barra de herramientas.

Otra opción es utilizar Ctrl + Enter para ejecutar la celda actual y permanecer en ella, o Alt + Enter para
ejecutar la celda y agregar una nueva celda debajo de ella.

Espera la Ejecución: Durante la ejecución, verás un asterisco [*] a la izquierda de la celda. Una vez que se
completa la ejecución, se mostrará un número [n], donde n es el número de ejecución actual.

Observa el Resultado: Si el código genera una salida, como texto impreso o gráficos, se mostrará debajo
de la celda de código.

Es importante tener en cuenta que las celdas de un Jupyter Notebook se pueden ejecutar en cualquier
orden, lo que permite una flexibilidad y exploración interactiva del código.

Recuerda que las variables y funciones definidas en una celda se mantienen en memoria y pueden ser
utilizadas en celdas posteriores en la misma sesión del notebook.

● ¿Cuál es la diferencia entre un archivo: .ipynb y un script de Python .py?

La principal diferencia entre un archivo .ipynb y un archivo Python .py radica en el formato y el propósito
para el que están diseñados:

Archivo .ipynb (Jupyter Notebook):

Un archivo .ipynb es un formato específico de Jupyter Notebook.

18 -
Combina celdas de código ejecutable con celdas de texto enriquecido (escritas en Markdown) en un solo
documento.

Es un entorno de desarrollo interactivo que permite ejecutar código en bloques y ver los resultados
inmediatamente, lo que facilita la exploración de datos y la documentación del proceso.

Puedes incluir gráficos, ecuaciones, texto explicativo y otros elementos multimedia directamente en el
notebook.

Es muy popular en la comunidad de ciencia de datos y análisis de datos, así como en la investigación y
documentación técnica.

Archivo Python .py (Script de Python):

Un archivo Python .py es un script de código fuente Python independiente.

Contiene código Python que puede ser ejecutado directamente desde la línea de comandos o desde un
entorno de desarrollo Python.

No incluye celdas de texto enriquecido ni elementos multimedia. Es principalmente para ejecución de


código.

Es utilizado para tareas que no requieren la combinación de código y documentación en un solo


documento, como desarrollo de aplicaciones, scripts de automatización, y más.

Los scripts Python se pueden ejecutar de forma no interactiva, es decir, sin necesidad de una interfaz
gráfica como la proporcionada por un Jupyter Notebook.

En resumen, un archivo .ipynb es un entorno interactivo que combina celdas de código ejecutable con
texto enriquecido y otros elementos multimedia, mientras que un archivo Python .py es un script de
código fuente independiente destinado principalmente para la ejecución de código de manera no
interactiva. Ambos tienen usos y aplicaciones específicas en el desarrollo y la programación en Python.

Variables
Variable
Una variable en programación es un espacio en memoria donde se puede almacenar un valor. Este valor puede
cambiar durante la ejecución del programa. Las variables en Python se crean al asignar un valor a un nombre.

Qué tenés que saber:

● ¿Cómo se crea una variable en Python?

Para crear una variable en Python, simplemente necesitas elegir un nombre para la variable y asignarle un
valor. Aquí está la sintaxis básica:

nombre_de_variable = valor

Por ejemplo, si quieres crear una variable llamada edad y asignarle el valor 25, lo harías de la siguiente
manera:

edad = 25

Ahora, la variable edad contiene el valor 25. Python infiere automáticamente el tipo de datos basado en el
valor que asignas.

Ten en cuenta algunas reglas al nombrar variables en Python:

El nombre de la variable debe comenzar con una letra o un guión bajo _.

Puede contener letras, números y guiones bajos.

19 -
Python distingue entre mayúsculas y minúsculas (edad y Edad serían variables diferentes).

No puedes usar palabras clave de Python como nombres de variables (por ejemplo, if, else, for, etc.).

Es una buena práctica usar nombres descriptivos que indiquen el propósito de la variable.

Ejemplo de creación de variables:

nombre = "Juan"

edad = 30

altura_cm = 175.5

es_estudiante = True

Ahora, has creado cuatro variables: nombre, edad, altura_cm y es_estudiante, cada una con su respectivo
valor y tipo de datos asociado. Estas variables pueden ser utilizadas en tu programa para almacenar y
manipular información.

● ¿Qué sucede si intentas acceder a una variable que no ha sido definida?

Si intentas acceder a una variable que no ha sido definida en Python, se generará un error llamado
NameError. Esto indica que Python no puede encontrar ninguna definición para la variable que estás
tratando de utilizar.

● ¿Por qué es importante elegir nombres descriptivos para las variables?

En resumen, elegir nombres descriptivos para las variables es una práctica esencial para escribir código
legible, comprensible y fácilmente mantenible. Ayuda a mejorar la calidad y la eficiencia del código, y es
una de las mejores formas de comunicar tus intenciones a través de tu código.

Identificador
También conocido como Nombre de Variable

Un identificador de variables es el nombre que se le da a una variable para identificarla en el código. En Python, un
identificador comienza con una letra (A-Z o a-z) o un guion bajo (_), seguido por letras, números o guiones bajos. No
pueden ser palabras reservadas y son sensibles al caso, lo que significa que Variable y variable serían identificadores
diferentes.

Qué tenés que saber:

● ¿Qué es un identificador en programación y por qué es importante?


Un identificador en programación es un nombre que se utiliza para identificar y referenciar variables,
funciones, clases y otros elementos en un programa. Puedes pensar en los identificadores como etiquetas
que asignas a diferentes partes de tu código para poder referenciarlas y utilizarlas en otros lugares.

● ¿Cuáles son las reglas para nombrar identificadores de variables en Python?

Reglas de Nomenclatura: Los identificadores deben seguir ciertas reglas específicas del lenguaje, como
comenzar con una letra o guión bajo, seguido de letras, dígitos o guiones bajos. Además, los nombres de
identificadores suelen ser sensibles a mayúsculas y minúsculas.

Descriptividad: Es importante elegir identificadores descriptivos que indiquen claramente el propósito o


contenido de la variable, función, clase, etc. Esto hace que el código sea más legible y comprensible.

Consistencia: Es importante mantener una convención de nomenclatura consistente en todo tu código


para que sea más fácil de leer y entender

20 -
● ¿Por qué no debemos usar palabras reservadas como identificadores?

Evitar Palabras Reservadas: Los identificadores no deben coincidir con palabras reservadas o palabras
clave del lenguaje, ya que estas tienen significados especiales y están destinadas a ser utilizadas por el
propio lenguaje.

Tipo int
El tipo int (abreviatura de "integer") en Python se refiere a números enteros. Estos pueden ser tanto positivos como
negativos y no tienen una parte decimal. Python maneja automáticamente la asignación de memoria para los
enteros, permitiendo trabajar con números muy grandes sin preocuparse por el desbordamiento.

Qué tenés que saber:

● ¿Qué es el tipo de dato int y qué tipo de valores representa?

En programación, el tipo de dato `int` (abreviatura de "entero") se refiere a números enteros, es decir,
números sin parte decimal y sin fracciones. Los valores que representa el tipo de dato `int` son números
enteros positivos, negativos y el cero.

Ejemplos de valores que pueden ser representados como `int` en Python son:

- `-5`

- `0`

- `42`

- `1000`

- `-100`

Los números enteros pueden ser tanto positivos como negativos y pueden abarcar un rango amplio de
valores, dependiendo de la implementación específica del lenguaje de programación y del sistema en el
que se ejecuta. En Python, los números enteros pueden ser de tamaño arbitrario, lo que significa que no
hay un límite fijo en el tamaño de los números enteros que puedes representar.

Por ejemplo, puedes utilizar enteros para contar cosas, representar edades, identificar posiciones en una
lista, realizar operaciones matemáticas y mucho más. Son uno de los tipos de datos fundamentales y
ampliamente utilizados en programación.

● ¿Cómo se define una variable de tipo int en Python?

En Python, para definir una variable de tipo `int` (entero), simplemente asignas un valor numérico entero
a un nombre de variable. La sintaxis básica es la siguiente:

nombre_de_variable = valor_entero

Por ejemplo, si quieres crear una variable llamada `edad` y asignarle el valor de 25, lo harías de la
siguiente manera:

edad = 25

Ahora, la variable `edad` contiene el valor `25` y es de tipo `int`.

También puedes asignar números enteros negativos de la misma manera:

numero_negativo = -10

Python infiere automáticamente el tipo de dato de la variable basándose en el valor que le asignas. En
este caso, `numero_negativo` también será de tipo `int`.

Si deseas verificar el tipo de dato de una variable, puedes usar la función `type()`:

21 -
print(type(edad)) # Esto imprimirá <class 'int'>

Ten en cuenta que en Python, los números enteros pueden ser de tamaño arbitrario, lo que significa que
no hay un límite fijo en el tamaño de los números enteros que puedes representar. Esto es diferente de
algunos otros lenguajes de programación que tienen límites en el tamaño de los enteros.

● ¿Qué operaciones comunes se pueden realizar con enteros en Python?

En Python, puedes realizar una amplia variedad de operaciones con números enteros. Aquí están algunas
de las operaciones comunes que puedes realizar:

1. **Suma (`+`)**: Suma dos o más enteros para obtener un resultado.

resultado = 5 + 3 # resultado será 8

2. **Resta (`-`)**: Resta un número entero de otro.

resultado = 7 - 2 # resultado será 5

3. **Multiplicación (`*`)**: Multiplica dos o más enteros.

resultado = 4 * 6 # resultado será 24

4. **División (`/`)**: Divide un número entero por otro. El resultado siempre es un número de punto
flotante, incluso si la división es exacta.

resultado = 10 / 2 # resultado será 5.0 (número de punto flotante)

5. **División Entera (`//`)**: Realiza una división entera y redondea el resultado al número entero más
cercano.

resultado = 10 // 3 # resultado será 3

6. **Módulo (`%`)**: Devuelve el residuo de una división.

resultado = 10 % 3 # resultado será 1

7. **Exponente (`**`)**: Eleva un número entero a una potencia.

resultado = 2 ** 3 # resultado será 8

8. **Comparaciones (`==`, `!=`, `<`, `<=`, `>`, `>=`)**: Compara dos enteros y devuelve un valor booleano
que indica si la comparación es verdadera o falsa.

resultado = 5 > 3 # resultado será True

9. **Operaciones de Asignación (`+=`, `-=`, `*=`, `/=`, `//=`, `%=`, `**=`)**: Realiza la operación y actualiza
el valor de la variable.

numero = 10

numero += 5 # Equivale a número = número + 5

10. **Operaciones Bit a Bit (`&`, `|`, `^`, `~`, `<<`, `>>`)**: Realiza operaciones a nivel de bits en números
enteros. Esto puede ser útil en situaciones específicas.

a = 5 # Representación binaria: 0101

b = 3 # Representación binaria: 0011

resultado = a & b # resultado será 1 (AND bit a bit)

Estas son solo algunas de las operaciones comunes que puedes realizar con números enteros en Python.
Python también proporciona funciones y métodos incorporados para realizar operaciones más complejas
y manipulaciones de enteros.

a = 5 # Representación binaria: 0101

22 -
b = 3 # Representación binaria: 0011

resultado = a & b # resultado será 1 (AND bit a bit)

Estas son solo algunas de las operaciones comunes que puedes realizar con números enteros en Python.
Python también proporciona funciones y métodos incorporados para realizar operaciones más complejas
y manipulaciones de enteros.

Tipo float
El tipo float en Python representa números de punto flotante o, en otras palabras, números que tienen una parte
decimal. Se caracterizan por tener un punto decimal en su representación, como 3.14 o -0.001.

Qué tenés que saber:

● ¿Qué es el tipo de dato float y cómo se diferencia del tipo int?

El tipo de dato `float` en programación se refiere a números de punto flotante, que son números que
pueden tener una parte decimal. En Python, los números de punto flotante se representan utilizando el
tipo `float`.

Por ejemplo, números como `3.14`, `-0.5`, `2.71828` son ejemplos de números de punto flotante.

La principal diferencia entre los tipos de datos `int` y `float` radica en la presencia o ausencia de una parte
decimal:

- **`int` (Entero)**: Representa números enteros sin parte decimal. Ejemplos incluyen `-5`, `0`, `42`,
`1000`.

- **`float` (Punto Flotante)**: Representa números con parte decimal. Ejemplos incluyen `-3.14`, `0.0`,
`2.71828`.

Además, los números de punto flotante también pueden representar números en notación científica,
como `1.5e2` que representa 150.0.

Es importante tener en cuenta que los números de punto flotante tienen precisión finita, lo que significa
que pueden haber pequeños errores de redondeo en cálculos que involucran números muy grandes o
muy pequeños.

Cuando realizas operaciones con números de punto flotante, es posible que obtengas resultados con
decimales, incluso si las entradas son enteras. Por ejemplo, la división de dos enteros en Python (`10 / 3`)
produce un resultado de punto flotante (`3.333...`).

En resumen, mientras que `int` representa números enteros sin parte decimal, `float` representa números
con parte decimal y la posibilidad de notación científica. Ambos tipos son fundamentales en la
programación y se utilizan en situaciones diferentes dependiendo de los requisitos del problema.

● ¿Cómo se define una variable de tipo float en Python?

Para definir una variable de tipo `float` en Python, asignas un valor numérico con parte decimal a un
nombre de variable. La sintaxis básica es la siguiente:

nombre_de_variable = valor_decimal

Por ejemplo, si quieres crear una variable llamada `pi` y asignarle el valor de 3.14 (que es una
aproximación de π), lo harías de la siguiente manera:

pi = 3.14

Ahora, la variable `pi` contiene el valor `3.14` y es de tipo `float`.

También puedes asignar números de punto flotante negativos de la misma manera:

23 -
numero_negativo = -2.5

Python infiere automáticamente el tipo de dato de la variable basándose en el valor que le asignas. En
este caso, `numero_negativo` también será de tipo `float`.

Si deseas verificar el tipo de dato de una variable, puedes usar la función `type()`:

print(type(pi)) # Esto imprimirá <class 'float'>

Recuerda que los números de punto flotante tienen precisión finita, lo que significa que pueden haber
pequeños errores de redondeo en cálculos que involucran números muy grandes o muy pequeños. Es
importante tener en cuenta esto al realizar operaciones con `float`.

● ¿Qué precisiones y limitaciones deben considerarse al trabajar con números de punto flotante?

Cuando trabajas con números de punto flotante en cualquier lenguaje de programación, incluido Python,
es importante tener en cuenta varias precisiones y limitaciones:

1. **Precisión Finita**: Los números de punto flotante tienen una precisión finita. Esto significa que no
todos los números reales pueden ser representados exactamente en el sistema de punto flotante, lo que
puede llevar a pequeños errores de redondeo en cálculos.

2. **Rango de Representación**: Los números de punto flotante tienen un rango limitado de


representación, lo que significa que hay un límite en el tamaño de los números que pueden ser
representados con precisión.

3. **Problemas de Comparación**: Debido a la precisión finita, la comparación de números de punto


flotante puede ser un poco complicada. A menudo, se recomienda utilizar técnicas como la comparación
con una tolerancia en lugar de una comparación exacta.

4. **Problemas de Cancelación Catastrófica**: En algunas operaciones, como la substracción de números


muy cercanos, puede ocurrir lo que se conoce como "cancelación catastrófica", donde la precisión de los
números en juego puede llevar a resultados inesperados.

5. **Notación Científica y Epsilon de la Máquina**: Los números de punto flotante a menudo se


representan en notación científica (por ejemplo, `1.5e2` para 150.0). El "epsilon de la máquina" es el
número más pequeño que se puede sumar a 1.0 y aún así obtener un resultado diferente de 1.0.

6. **NaN y Infinito**: Los números de punto flotante pueden representar valores especiales como "NaN"
(Not a Number) y "Inf" (Infinito) que indican resultados no definidos o valores que superan el rango de
representación.

7. **Operaciones Asociativas y Conmutativas**: En algunos casos, el orden de las operaciones puede


afectar el resultado debido a la precisión finita.

8. **Evitar Comparaciones Directas**: Debido a los errores de redondeo, a menudo es mejor evitar
comparaciones directas entre números de punto flotante. En su lugar, se recomienda usar una tolerancia
aceptable.

Para mitigar estos problemas, es importante comprender las limitaciones de los números de punto
flotante y utilizar técnicas adecuadas, como ajustar la precisión y utilizar algoritmos numéricos robustos,
según las necesidades específicas de tu aplicación.

Tipo bool
El tipo bool en Python representa valores booleanos, que son True (verdadero) y False (falso). Estos valores son
fundamentales para la lógica y las operaciones condicionales en la programación. Se derivan generalmente de
comparaciones o condiciones.

Qué tenés que saber:

● ¿Qué es el tipo de dato bool y qué valores puede tener?

24 -
El tipo de dato `bool` en programación se refiere a un tipo de dato booleano, que puede tener uno de dos
valores: `True` o `False`. Estos valores representan el concepto de verdad o falsedad en lógica booleana.

En Python, `True` se utiliza para representar afirmaciones verdaderas y `False` se utiliza para representar
afirmaciones falsas.

Por ejemplo:

verdadero = True

falso = False

Los valores booleanos son esenciales en programación porque se utilizan en estructuras de control de
flujo (como `if`, `while`, `for`) para tomar decisiones basadas en condiciones. También son utilizados en
expresiones lógicas y operaciones de comparación.

Por ejemplo:

if verdadero:

print("Esta afirmación es verdadera")

if not falso:

print("Esta afirmación es falsa, pero se negó con 'not'")

Estos valores booleanos también pueden ser el resultado de operaciones lógicas o comparaciones. Por
ejemplo:

mayor_que_cero = 5 > 0 # Esto asigna el valor True a la variable mayor_que_cero

menor_que_cero = -5 > 0 # Esto asigna el valor False a la variable menor_que_cero

Los valores booleanos son fundamentales para la toma de decisiones y el control de flujo en cualquier
programa. Permiten que el programa ejecute diferentes bloques de código según las condiciones
establecidas.

● ¿Cómo se define una variable de tipo bool en Python?

Para definir una variable de tipo `bool` (booleano) en Python, asignas el valor `True` o `False` a un nombre
de variable. La sintaxis básica es la siguiente:

nombre_de_variable = True # Para asignar el valor Verdadero

nombre_de_variable = False # Para asignar el valor Falso

Por ejemplo, si quieres crear una variable llamada `es_mayor_de_edad` y asignarle el valor `True` para
indicar que una persona es mayor de edad, lo harías de la siguiente manera:

es_mayor_de_edad = True

Ahora, la variable `es_mayor_de_edad` contiene el valor `True` y es de tipo `bool`

Si deseas verificar el tipo de dato de una variable, puedes usar la función `type()`:

print(type(es_mayor_de_edad)) # Esto imprimirá <class 'bool'>

Recuerda que los valores booleanos `True` y `False` son palabras clave reservadas en Python y deben
escribirse en mayúsculas al asignarlos a una variable.

● ¿Qué operadores lógicos se utilizan comúnmente con valores booleanos en Python?

En Python, se utilizan varios operadores lógicos para realizar operaciones sobre valores booleanos. Los
operadores lógicos más comunes son:

1. **`and`**: Este operador devuelve `True` si ambas condiciones son verdaderas.

25 -
Ejemplo:

a = True

b = False

resultado = a and b # resultado será False

2. **`or`**: Este operador devuelve `True` si al menos una de las condiciones es verdadera.

Ejemplo:

a = True

b = False

resultado = a or b # resultado será True

3. **`not`**: Este operador niega una condición, es decir, si la condición es `True`, la convierte en `False` y
viceversa

Ejemplo:

a = True

resultado = not a # resultado será False

Estos operadores lógicos son fundamentales para la toma de decisiones y la construcción de expresiones
lógicas en Python. Puedes combinarlos para crear condiciones más complejas y controlar el flujo de tu
programa. Por ejemplo, puedes tener múltiples condiciones en una instrucción `if` utilizando operadores
lógicos.

Cadenas de Caracteres
También conocido como Strings

Las cadenas (o "strings" en inglés) en Python son secuencias de caracteres encerradas entre comillas simples (' ') o
dobles (" "). Se utilizan para representar texto y pueden contener letras, números, símbolos y espacios. Python
ofrece una amplia variedad de métodos y operaciones para trabajar y manipular cadenas. Los caracteres pueden ser
letras, números, emojis y otros símbolos.

Qué tenés que saber:

● ¿Qué es una cadena de caracteres en programación y cómo se representa en Python?

Una cadena de caracteres, conocida comúnmente como "cadena" o "string" en programación, es una
secuencia de caracteres alfanuméricos, como letras, números, espacios y símbolos. Puedes pensar en una
cadena como una serie de caracteres que forman texto.

En Python, las cadenas se representan utilizando comillas simples (`' '`), comillas dobles (`" "`), o triple
comillas (`''' '''` o `""" """`). Por ejemplo:

cadena_con_comillas_simples = 'Hola, soy una cadena.'

cadena_con_comillas_dobles = "¡Hola, también soy una cadena!"

cadena_multilinea = '''Soy una cadena que abarca

varias líneas.'''

Todas las variables `cadena_con_comillas_simples`, `cadena_con_comillas_dobles` y `cadena_multilinea`


son ejemplos de cadenas en Python.

Las comillas simples y dobles funcionan de manera similar y puedes elegir cuál usar según tus preferencias
o necesidades. Sin embargo, si necesitas incluir comillas dentro de una cadena, puedes usar comillas del
otro tipo para delimitarla. Por ejemplo:

26 -
cadena_con_comillas_dobles = "Esta es una cadena con 'comillas simples' dentro."

Las triple comillas (`''' '''` o `""" """`) permiten definir cadenas multilinea que pueden abarcar varias líneas
de texto. Esto es útil cuando necesitas trabajar con texto que contiene saltos de línea.

cadena_multilinea = '''Esta es una cadena

que se extiende

por varias líneas.'''

Las cadenas son un tipo de dato fundamental en la programación y se utilizan para representar texto,
nombres, mensajes y mucho más en tus programas.

● ¿Cómo se accede a un carácter específico en una cadena?

En Python, puedes acceder a un carácter específico en una cadena utilizando la indexación. La indexación
te permite referenciar un carácter específico en una cadena según su posición.

La indexación en Python comienza desde `0`. Esto significa que el primer carácter de una cadena tiene el
índice `0`, el segundo tiene el índice `1`, y así sucesivamente.

Para acceder a un carácter específico, utilizas corchetes `[]` después de la cadena, indicando el índice del
carácter que deseas.

Ejemplo:

mensaje = "Hola"

primer_caracter = mensaje[0] # Esto asigna 'H' a la variable primer_caracter

segundo_caracter = mensaje[1] # Esto asigna 'o' a la variable segundo_caracter

También puedes utilizar índices negativos para acceder a los caracteres desde el final de la cadena. `-1`
representa el último carácter, `-2` el penúltimo, y así sucesivamente.

Ejemplo:

ultimo_caracter = mensaje[-1] # Esto asigna 'a' a la variable ultimo_caracter

● ¿Qué significa que las cadenas en Python son "inmutables"?

Es importante tener en cuenta que las cadenas en Python son inmutables, lo que significa que no puedes
cambiar individualmente un carácter en una cadena existente. Si necesitas modificar una cadena, tendrás
que crear una nueva con los cambios deseados.

Conversión de tipos
La conversión de tipos, también conocida como "casting", se refiere al proceso de cambiar el tipo de dato de un
valor a otro tipo de dato. En Python, esto se puede hacer utilizando funciones predefinidas como int(), float(), y
str(), entre otras.

Qué tenés que saber:

● ¿Qué es la conversión de tipos y por qué es necesaria en programación?

La conversión de tipos, también conocida como "casting", es el proceso de cambiar el tipo de un valor o
una variable de un tipo de datos a otro en un programa. Esto es necesario en programación porque a
veces necesitas operar con datos de diferentes tipos o adaptarlos para que sean compatibles con ciertas
operaciones.

Hay varias razones por las que la conversión de tipos es necesaria en programación:

27 -
1. **Operaciones entre Tipos Diferentes**: Al realizar operaciones matemáticas o comparaciones, a veces
necesitas asegurarte de que los operandos sean del mismo tipo. Por ejemplo, sumar un número entero y
un número de punto flotante.

2. **Interacción con Funciones**: Al llamar a una función, es importante que los argumentos sean del
tipo correcto que la función espera. Si los tipos no coinciden, es posible que se produzcan errores o
resultados inesperados.

3. **Entrada y Salida de Datos**: Al recibir datos del usuario o de un archivo, a menudo es necesario
convertirlos al tipo correcto antes de usarlos en cálculos o manipulaciones.

4. **Manipulación de Datos**: A veces necesitas realizar operaciones específicas que requieren que los
datos estén en un formato particular. Por ejemplo, formatear una cadena de texto como un número.

5. **Compatibilidad de Tipos**: Al trabajar con bibliotecas o módulos externos, es importante asegurarse


de que los tipos de datos que se utilizan sean compatibles con las funciones y operaciones proporcionadas
por esas bibliotecas.

6. **Prevención de Errores**: Convertir tipos puede ayudar a prevenir errores y comportamientos


inesperados que pueden ocurrir cuando se utilizan tipos incompatibles en operaciones o funciones.

Ejemplo de conversión de tipos:

numero_entero = 5

numero_flotante = float(numero_entero) # Convertir el entero a punto flotante

En este ejemplo, `float()` convierte el número entero `5` en el número de punto flotante `5.0`. Esto es útil
cuando necesitas realizar cálculos que requieren números de punto flotante en lugar de enteros.

En resumen, la conversión de tipos es una herramienta esencial en programación que te permite


manipular y operar con diferentes tipos de datos de manera efectiva y garantizar la compatibilidad en tus
programas.

● ¿Cómo se convierte un float en un int en Python?

Para convertir un número de punto flotante (`float`) en un número entero (`int`) en Python, puedes
utilizar la función `int()`. Esta función truncará la parte decimal del número y devolverá la parte entera.

La sintaxis básica es la siguiente:

numero_entero = int(numero_flotante)

Por ejemplo:

numero_flotante = 3.14

numero_entero = int(numero_flotante) # Esto convierte 3.14 en 3

Es importante tener en cuenta que la conversión de `float` a `int` elimina la parte decimal, no redondea.
Por lo tanto, si tienes `3.99`, la conversión a `int` resultará en `3`, no `4`.

También ten en cuenta que si la parte decimal del número flotante es mayor o igual a `0.5`, la conversión
a entero se realizará redondeando hacia arriba.

numero_flotante = 3.99

numero_entero = int(numero_flotante) # Esto convierte 3.99 en 4

Recuerda que esta operación puede causar pérdida de información, ya que elimina la parte decimal.
Asegúrate de que esto sea adecuado para tu aplicación antes de realizar la conversión.

● ¿Qué sucede si intentas convertir una cadena que no representa un número a un tipo int o float?

28 -
Si intentas convertir una cadena que no representa un número válido a un tipo `int` o `float` en Python, se
generará un error. Esto se debe a que Python no puede interpretar la cadena como un número y no
puede realizar la conversión.

Por ejemplo, si intentas convertir la cadena `"abc"` a un número, o incluso una cadena con un formato
numérico incorrecto como `"3.14.159"` a un `float`, se generará un error.

Los errores específicos que se generan en estos casos son `ValueError`, que indica que el valor
proporcionado no es válido para la conversión solicitada.

Para evitar este tipo de errores, es importante asegurarse de que la cadena que intentas convertir a un
número contenga representaciones válidas de números. Puedes utilizar funciones y métodos para
verificar si una cadena es numérica antes de intentar la conversión.

Asignación
La asignación en programación se refiere al proceso de dar un valor a una variable. En Python, el operador de
asignación es el signo igual (=). Cuando asignas un valor a una variable, estás reservando espacio en memoria para
almacenar ese valor y referenciarlo con un identificador.

Qué tenés que saber:

● ¿Cómo se realiza una asignación en Python?

En Python, una asignación se realiza utilizando el operador `=`. Esto le dice a Python que tome el valor a la
derecha del operador y lo guarde en la variable a la izquierda.

La sintaxis básica de una asignación es la siguiente:

nombre_de_variable = valor

Por ejemplo, si quieres asignar el valor `10` a la variable `numero`, lo harías de la siguiente manera:

numero = 10

Ahora, la variable `numero` contiene el valor `10`.

También puedes asignar el resultado de una expresión o una operación a una variable. Por ejemplo:

resultado = 5 * 3 # Esto asigna el valor 15 a la variable resultado

Recuerda que en Python, el nombre de la variable está en el lado izquierdo del operador `=`, y el valor o la
expresión que se asigna a la variable está en el lado derecho.

Es importante tener en cuenta que la asignación en Python no es una igualdad matemática, sino una
operación de asignación de valor. Esto significa que el valor a la derecha del operador se evalúa primero y
luego se asigna a la variable a la izquierda.

● ¿Qué sucede en memoria cuando asignas un valor a una variable?

Cuando asignas un valor a una variable en Python, se llevan a cabo varios pasos en la memoria del
sistema:

1. **Reserva de Espacio**: Python reserva un espacio en la memoria para almacenar el valor de la


variable. La cantidad de espacio reservada depende del tipo de dato y del tamaño del valor asignado.

2. **Asociación del Nombre con el Espacio de Memoria**: El nombre de la variable (identificador) se


asocia con la dirección de memoria donde se guarda el valor. Esto permite que Python encuentre y acceda
al valor cuando se refiere a la variable.

3. **Almacenamiento del Valor**: El valor asignado se almacena en el espacio de memoria reservado


para la variable.

29 -
4. **Actualización de Referencias**: Si la variable ya tenía un valor previamente asignado, este valor
puede ser liberado si ya no está siendo referenciado por otras partes del programa. El espacio de
memoria liberado puede ser reutilizado para otras variables.

Es importante destacar que en Python, las variables son referencias a objetos en la memoria, no
contenedores directos de valores. Esto significa que puedes tener múltiples variables que apuntan al
mismo objeto en la memoria.

Por ejemplo, si haces:

a = 10

b=a

Ambas `a` y `b` apuntan al mismo objeto `10` en la memoria. Si cambias el valor de `a`, también afectará a
`b`.

a --> 10

b -----^

Cuando se asigna un nuevo valor a una variable, la antigua referencia se pierde y la variable ahora apunta
al nuevo objeto.

a --> 20

b -----^

Estos conceptos son importantes para comprender cómo Python maneja la asignación de valores y la
gestión de memoria.

● ¿Es posible asignar valores a múltiples variables en una sola línea en Python? Si es así, ¿cómo?

Sí, en Python es posible asignar valores a múltiples variables en una sola línea. Esto se conoce como
"asignación múltiple" o "asignación en paralelo". Puedes hacerlo de la siguiente manera:

variable1, variable2, variable3 = valor1, valor2, valor3

Por ejemplo:

x, y, z = 10, 20, 30

En este ejemplo, `x` se asigna a `10`, `y` se asigna a `20` y `z` se asigna a `30`.

También puedes realizar asignaciones múltiples utilizando una única expresión en el lado derecho:

a=b=c=0

En este ejemplo, `a`, `b` y `c` se asignan todos al valor `0`

También es posible intercambiar valores entre variables en una sola línea utilizando asignaciones
múltiples y sin la necesidad de una variable temporal:

x, y = y, x

Esta técnica aprovecha la asignación simultánea y es una característica poderosa en Python.

La asignación múltiple es una herramienta útil para asignar valores a múltiples variables de forma
eficiente y concisa. Puedes usarla para inicializar variables, intercambiar valores o realizar otras
operaciones relacionadas con la asignación de valores.

30 -
Operadores aritméticos
Los operadores aritméticos son símbolos que se utilizan para realizar operaciones matemáticas. En Python, algunos
de los operadores aritméticos más comunes son: + (suma), - (resta), * (multiplicación), / (división), // (división
entera), % (módulo) y ** (exponenciación).

Qué tenés que saber:

● ¿Qué son los operadores aritméticos y cuáles son los más comunes en Python?

Los operadores aritméticos son símbolos que se utilizan para realizar operaciones matemáticas en Python.
Los operadores aritméticos más comunes en Python son:

➔ Suma (+): Se utiliza para sumar dos números.


➔ Resta (-): Se utiliza para restar un número de otro.
➔ Multiplicación (*): Se utiliza para multiplicar dos números.
➔ División (/): Se utiliza para dividir un número entre otro. El resultado siempre es un número de
punto flotante.
➔ División Entera (//): Realiza una división entera y redondea el resultado al número entero más
cercano.
➔ Módulo (%): Devuelve el residuo de una división.
➔ Exponente ()**: Eleva un número a una potencia.
➔ **Operaciones de Asignación (+=, -=, *=, /=, //=, %=, =): Realiza la operación y actualiza el valor
de la variable.

Estos son los operadores aritméticos más comunes en Python. Puedes combinarlos y utilizarlos en tus
programas para realizar una amplia variedad de operaciones matemáticas.

● ¿Cómo se diferencia la división (/) de la división entera (//) en Python?

La diferencia entre la división (`/`) y la división entera (`//`) en Python radica en el tipo de resultado que
producen.

1. **División (`/`)**:

- El operador de división (`/`) realiza una división regular entre dos números.

- El resultado de la división siempre es un número de punto flotante, incluso si los números son enteros
y la división es exacta.

- Siempre produce un valor de tipo `float`.

Ejemplo:

resultado = 10 / 3 # resultado será 3.333... (un número de punto flotante)

2. **División Entera (`//`)**:

- El operador de división entera (`//`) también realiza una división, pero el resultado se redondea al
número entero más cercano, sin importar si la división es exacta o no.

- Si ambos operandos son enteros, el resultado será un número entero. Si uno o ambos son de punto
flotante, el resultado será de punto flotante.

- Siempre produce un valor del mismo tipo que los operandos.

resultado = 10 // 3 # resultado será 3 (un número entero)

Para ilustrar la diferencia:

- `10 / 3` produce `3.333...` (un número de punto flotante).

- `10 // 3` produce `3` (un número entero).

31 -
La división entera es útil cuando solo te interesa el cociente entero de una división y no te importa el
residuo. Por ejemplo, al calcular cuántas veces cabe un número en otro.

Es importante elegir el operador de división adecuado según tus necesidades específicas en un problema
dado.

● ¿Qué operador se usa para calcular el resto de una división en Python?

➔ Módulo (%): Devuelve el residuo de una división.

resultado = 10 % 3 # resultado será 1

Concatenación de cadenas
La concatenación de cadenas es el proceso de unir dos o más cadenas para formar una sola. En Python, esto se
logra utilizando el operador +. También es posible repetir una cadena un número determinado de veces utilizando
el operador *.

Qué tenés que saber:

● ¿Qué es la concatenación de cadenas y cómo se realiza en Python?

La concatenación de cadenas en Python es el proceso de combinar dos o más cadenas de texto en una

sola cadena más larga. Esto te permite construir mensajes, crear texto dinámico y manipular datos de

texto de manera efectiva.

En Python, puedes realizar la concatenación de cadenas utilizando el operador +. Aquí hay un ejemplo:

saludo = "Hola"

nombre = "Ludmila"

mensaje_completo = saludo + ", " + nombre + "!"

En este ejemplo, se concatenan las cadenas "Hola", ", ", "Ludmila", y "!" para formar la cadena

"Hola, Ludmila!".

Es importante tener en cuenta que Python no agrega automáticamente espacios o caracteres de

separación entre las cadenas concatenadas. Debes incluir los espacios o caracteres de separación

necesarios explícitamente en las cadenas si deseas que aparezcan entre las palabras o frases

concatenadas.

● Si tienes las cadenas "Python" y "Rocks", ¿cómo las concatenarías para formar la cadena "Python Rocks"?

cadena1 = "Python "

cadena2 = "Rocks"

resultado = cadena1 + cadena2 # Concatenación usando el operador +

32 -
● ¿Cómo puedes repetir una cadena, digamos "Hello", 3 veces para obtener "HelloHelloHello"?

Para repetir una cadena en Python, puedes usar el operador de multiplicación `*`. Esto te permite duplicar
la cadena múltiples veces. Por ejemplo, para repetir la cadena "Hello" tres veces y obtener
"HelloHelloHello", puedes hacer lo siguiente:

cadena_original = "Hello"

resultado = cadena_original * 3

En este ejemplo, `resultado` contendrá la cadena `"HelloHelloHello"`.

El operador `*` toma una cadena y un número entero como operandos y repite la cadena esa cantidad de
veces. Puedes cambiar el número para repetir la cadena más o menos veces según tus necesidades.

Estructuras

Lista
Una lista en Python es una colección ordenada de elementos que pueden ser de cualquier tipo. Se definen
encerrando sus elementos entre corchetes [] y separándolos con comas. Las listas son mutables, lo que significa que
puedes cambiar, agregar o eliminar elementos después de que la lista ha sido creada.

Qué tenés que saber:

● ¿Qué es una lista en Python y cómo se diferencia de otros tipos de datos?

Una lista en Python es una colección ordenada y mutable de elementos que pueden ser de diferentes
tipos de datos. Esta flexibilidad hace que las listas sean una de las estructuras de datos más utilizadas y
versátiles en Python, pueden ser de cualquier tipo de dato, como números, cadenas, booleanos, e incluso
otras listas. Cada elemento en una lista tiene una posición o índice único que comienza desde 0.

Puedes acceder a elementos individuales de una lista utilizando su índice. Por ejemplo, para acceder al
primer elemento, usarías mi_lista[0], para el segundo sería mi_lista[1], y así sucesivamente.

Son mutables, lo que significa que puedes modificar los elementos individuales de una lista después de
que ha sido creada.

Por ejemplo, puedes cambiar el segundo elemento de mi_lista de 2 a 10 de la siguiente manera:

mi_lista[1] = 10

Esto modificará mi_lista para que sea [1, 10, "Hola", True, [3, 4, 5]].

● ¿Cómo se define una lista vacía?

Para definir una lista vacía en Python, simplemente utilizas corchetes `[]` sin ningún elemento dentro de
ellos. Aquí tienes un ejemplo:

lista_vacia = []

En este ejemplo, `lista_vacia` es una lista que no contiene ningún elemento. Es importante destacar que
incluso una lista vacía es un objeto de lista válido en Python y puede ser utilizada para almacenar
elementos más adelante.

También puedes crear una lista vacía utilizando la función `list()` sin pasar ningún argumento:

lista_vacia = list()

33 -
Ambas formas son equivalentes y crearán una lista vacía que puedes llenar con elementos más tarde.

● ¿Es posible tener una lista con elementos de diferentes tipos, como enteros y cadenas?

La principal diferencia entre una lista y otros tipos de datos como números o cadenas es que una lista
puede contener múltiples elementos y cada elemento puede ser de un tipo de dato diferente. Esto la hace
extremadamente flexible y poderosa para organizar y manipular conjuntos de datos.

Por ejemplo, aquí hay una lista que contiene números, cadenas y una lista anidada:

mi_lista = [1, 2, "Hola", True, [3, 4, 5]]

En este ejemplo, mi_lista contiene cinco elementos:

"Hola"

True

[3, 4, 5] (que a su vez es otra lista)

Funciones de Lista
Python proporciona una serie de funciones y métodos integrados para trabajar con listas. Algunos ejemplos
incluyen append() para agregar un elemento al final, remove() para eliminar un elemento específico y sort() para
ordenar la lista.

Qué tenés que saber:

● ¿Cómo agregas un elemento al final de una lista?

Para agregar un elemento al final de una lista en Python, puedes utilizar el método append(). Este método
agrega un elemento al final de la lista. Aquí está el uso básico:

mi_lista = [1, 2, 3]

mi_lista.append(4) # Agrega el elemento 4 al final de la lista

Después de ejecutar este código, mi_lista contendrá [1, 2, 3, 4].

También puedes agregar elementos a una lista utilizando la concatenación (+) o la función extend(). Sin
embargo, estas opciones son más adecuadas para combinar dos listas, no para agregar un solo elemento
al final.

Por ejemplo, si tienes otra lista [5], puedes usar la concatenación así:

mi_lista = [1, 2, 3]

mi_lista = mi_lista + [5]

Esto dará como resultado mi_lista igual a [1, 2, 3, 5].

Sin embargo, ten en cuenta que esta operación crea una nueva lista y asigna el resultado de la
concatenación a mi_lista. Si tienes una lista muy grande, esta operación puede ser menos eficiente que
usar append() para agregar elementos.

Por lo tanto, si solo estás agregando un solo elemento al final de una lista, se recomienda usar append()
para la eficiencia y claridad del código.

34 -
● ¿Qué función usarías para eliminar un elemento específico de una lista?

Para eliminar un elemento específico de una lista en Python, puedes usar el método `remove()`. Este
método busca el primer elemento con el valor especificado y lo elimina de la lista. La sintaxis es la
siguiente:

mi_lista.remove(elemento)

Donde `mi_lista` es la lista en la que deseas realizar la operación y `elemento` es el valor del elemento que
deseas eliminar.

Por ejemplo, si tienes la lista:

mi_lista = [1, 2, 3, 4, 2, 5]

y deseas eliminar el elemento `2`, puedes hacerlo así:

mi_lista.remove(2)

Después de ejecutar este código, `mi_lista` quedará como `[1, 3, 4, 2, 5]`. Observa que solo se eliminó el
primer `2` encontrado en la lista.

Es importante destacar que si el elemento que intentas eliminar no existe en la lista, se generará un error
`ValueError`. Por lo tanto, asegúrate de verificar si el elemento existe antes de intentar eliminarlo o
manejar el posible error.

Si deseas eliminar un elemento en una posición específica (por índice), puedes utilizar el comando `del`:

del mi_lista[indice]

Donde `indice` es la posición del elemento que deseas eliminar.

También puedes utilizar el método `pop()` para eliminar y obtener el elemento en una posición específica
al mismo tiempo.

mi_lista = [1, 2, 3, 4, 5]

elemento_eliminado = mi_lista.pop(2) # Elimina el elemento en el índice 2 (que es el valor 3) y lo


devuelve

print("Elemento eliminado:", elemento_eliminado)

print("Lista actualizada:", mi_lista)

output:

Elemento eliminado: 3

Lista actualizada: [1, 2, 4, 5]

● ¿Cómo ordenarías una lista en orden descendente?

Para ordenar una lista en orden descendente en Python, puedes utilizar el método `sort()` o la función
`sorted()` con el argumento `reverse=True`. Aquí tienes ejemplos de ambas opciones:

### Usando el Método `sort()`:

mi_lista = [3, 1, 4, 1, 5, 9, 2, 6, 5]

mi_lista.sort(reverse=True) # Ordena la lista en lugar y en orden descendente

print(mi_lista)

Este código imprimirá:

[9, 6, 5, 5, 4, 3, 2, 1, 1]

35 -
### Usando la Función `sorted()`:

mi_lista = [3, 1, 4, 1, 5, 9, 2, 6, 5]

lista_ordenada = sorted(mi_lista, reverse=True) # Crea una nueva lista ordenada en orden descendente

print(lista_ordenada)

Este código imprimirá:

[9, 6, 5, 5, 4, 3, 2, 1, 1]

La diferencia entre ambas opciones radica en que `sort()` ordena la lista en su lugar (es decir, modifica la
lista original), mientras que `sorted()` crea una nueva lista ordenada sin modificar la lista original.

Ambas opciones te permiten ordenar una lista en orden descendente según los valores de sus elementos.

Índices y Elementos
Los elementos de una lista en Python pueden ser accedidos mediante índices. El índice inicial es 0 para el primer
elemento, 1 para el segundo, y así sucesivamente. También es posible usar índices negativos para acceder a los
elementos desde el final de la lista.

Qué tenés que saber:

● ¿Cómo accederías al tercer elemento de una lista?

Para acceder al tercer elemento de una lista en Python, puedes utilizar el índice `2`, ya que los índices en
Python comienzan desde `0`. Aquí tienes un ejemplo:

mi_lista = [10, 20, 30, 40, 50]

tercer_elemento = mi_lista[2] # El tercer elemento tiene el índice 2

print(tercer_elemento)

En este ejemplo, `mi_lista[2]` devuelve el valor `30`, que es el tercer elemento de la lista `[10, 20, 30, 40,
50]`.

Recuerda que en Python, los índices empiezan desde `0`, por lo que el primer elemento tiene el índice `0`,
el segundo el índice `1`, el tercer elemento el índice `2`, y así sucesivamente.

● ¿Qué sucede si intentas acceder a un índice que no existe en la lista?

Si intentas acceder a un índice que no existe en una lista en Python, se generará un error llamado
`IndexError`. Este error indica que estás tratando de acceder a un elemento en una posición que está más
allá de los límites de la lista.

Por ejemplo, si intentas acceder al elemento en el índice `5` de una lista que solo tiene `3` elementos, se
generará un `IndexError` porque el índice `5` está fuera del rango válido para esa lista.

Aquí hay un ejemplo que generaría un `IndexError`:

mi_lista = [10, 20, 30]

elemento = mi_lista[5] # Esto generará un IndexError

El mensaje de error que recibirías sería algo así:

IndexError: list index out of range

Para evitar este tipo de errores, es importante asegurarse de que el índice al que estás intentando
acceder esté dentro del rango válido de la lista. Puedes usar la función `len()` para obtener la longitud de
la lista y luego verificar si el índice está dentro de esos límites antes de intentar acceder al elemento.

36 -
● ¿Cómo se accede al último elemento de una lista usando índices negativos?

Para acceder al último elemento de una lista en Python utilizando un índice negativo, simplemente debes
usar `-1` como el índice. En Python, el índice `-1` hace referencia al último elemento, `-2` al penúltimo, y
así sucesivamente.

Por ejemplo, si tienes una lista llamada `mi_lista` y quieres acceder al último elemento, puedes hacerlo
así:

mi_lista = [10, 20, 30, 40, 50]

ultimo_elemento = mi_lista[-1]

En este ejemplo, `mi_lista[-1]` devolverá el valor `50`, que es el último elemento de la lista `[10, 20, 30, 40,
50]`.

Esta forma de acceder a elementos utilizando índices negativos es muy útil, especialmente cuando no
sabes cuántos elementos tiene la lista o cuando necesitas acceder a elementos desde el final hacia el
principio.

Tupla
Una tupla en Python es similar a una lista en términos de almacenar una colección de elementos. Sin embargo, a
diferencia de las listas, las tuplas son inmutables, lo que significa que no puedes modificar sus elementos una vez
que se ha creado. Las tuplas se definen encerrando sus elementos entre paréntesis ().

Qué tenés que saber:

● ¿Qué es una tupla y cómo se diferencia de una lista?

Una tupla en Python es una colección ordenada e inmutable de elementos. Esto significa que una vez que
se crea una tupla, no se pueden modificar sus elementos. Las tuplas se crean utilizando paréntesis `()` y
los elementos están separados por comas.

Por ejemplo, aquí hay una tupla que contiene tres elementos:

mi_tupla = (1, 2, 3)

A diferencia de una lista, no puedes agregar, eliminar o modificar elementos en una tupla después de que
se ha creado. Si intentas hacerlo, se generará un error.

### Principales diferencias entre una lista y una tupla:

1. **Mutabilidad**:

- **Lista**: Es mutable, lo que significa que puedes cambiar, agregar o eliminar elementos después de
que se ha creado.

- **Tupla**: Es inmutable, lo que significa que no puedes modificar los elementos después de que se ha
creado.

2. **Sintaxis**:

- **Lista**: Se crea utilizando corchetes `[]`.

- **Tupla**: Se crea utilizando paréntesis `()`.

3. **Velocidad**:

- Debido a su inmutabilidad, las tuplas tienden a ser más eficientes en términos de rendimiento que las
listas, especialmente para operaciones como acceso a elementos.

37 -
4. **Uso**:

- Las listas se utilizan cuando necesitas una colección de elementos que puedas modificar (agregar,
eliminar, cambiar).

- Las tuplas se utilizan cuando necesitas una colección de elementos que no debes modificar.

Las tuplas son útiles cuando deseas asegurarte de que los datos no se modifiquen accidentalmente o
cuando necesitas una estructura de datos que se comporte como una lista, pero que no deba ser
cambiada.

● ¿Cómo se define una tupla con un solo elemento?

Para definir una tupla con un solo elemento en Python, es necesario incluir una coma `,` después del
elemento. Esto es importante porque Python interpreta los paréntesis `()` como operadores de
agrupación, no como indicadores de una tupla de un solo elemento.

Por ejemplo, si quieres crear una tupla con el número `5` como único elemento, deberías hacerlo de la
siguiente manera:

mi_tupla = (5,)

Observa que hay una coma después del `5`. Esto le indica a Python que se trata de una tupla con un solo
elemento, en lugar de simplemente un valor rodeado de paréntesis.

Si omites la coma, Python tratará el valor entre paréntesis como simplemente el valor en sí, y no como
una tupla:

mi_tupla_incorrecta = (5) # Esto no será una tupla, sino simplemente el número 5

Por lo tanto, recuerda siempre incluir una coma después del elemento cuando estés creando una tupla
con un solo elemento.

● ¿Por qué podrías preferir usar una tupla en lugar de una lista en algunos escenarios?

Existen varias situaciones en las que preferirías usar una tupla en lugar de una lista en Python:

1. **Inmutabilidad**:

- Cuando necesitas un conjunto de datos que no debe ser modificado después de su creación, las tuplas
ofrecen inmutabilidad. Esto puede ser útil para garantizar la integridad de los datos en situaciones donde
no se deben realizar cambios.

2. **Eficiencia**:

- Las tuplas son más eficientes en términos de rendimiento que las listas debido a su inmutabilidad. Al
no poder cambiar los elementos, Python puede optimizar ciertas operaciones y acceder a los elementos
de manera más rápida.

3. **Seguridad de los datos**:

- Si quieres asegurarte de que los datos no sean alterados por accidente, una tupla proporciona una
capa adicional de seguridad.

4. **Integridad de datos**:

- Cuando se trabaja con datos que representan conceptos inmutables (como coordenadas geográficas,
información sobre una fecha, etc.), es preferible usar tuplas para garantizar que los valores no cambien
inadvertidamente.

5. **Desempaquetado de tuplas**:

- Las tuplas pueden ser desempaquetadas fácilmente en variables individuales. Esto es útil cuando una
función retorna múltiples valores que están relacionados entre sí.

38 -
6. **Como claves de diccionario**:

- Las tuplas pueden usarse como claves en un diccionario porque son inmutables. Las listas, al ser
mutables, no pueden ser usadas como claves de diccionario.

7. **Usar en conjuntos (set)**:

- Las tuplas pueden formar parte de un conjunto (`set`) porque son inmutables. Las listas no pueden ser
miembros de un conjunto debido a su mutabilidad.

En resumen, las tuplas son útiles cuando necesitas datos inmutables y quieres asegurarte de que no se
produzcan cambios accidentales. También pueden ser más eficientes en términos de rendimiento en
ciertos escenarios. Sin embargo, si necesitas modificar o extender la colección de elementos, una lista
sería la elección adecuada.

Funciones de Tupla
Aunque las tuplas son inmutables, Python proporciona funciones para trabajar con ellas. Algunas funciones
comunes incluyen len() para obtener el número de elementos y index() para encontrar el índice de un elemento
específico.

Qué tenés que saber:

● ¿Cómo obtendrías el número de elementos en una tupla?

Para obtener el número de elementos en una tupla en Python, puedes utilizar la función `len()`. Esta
función devuelve la cantidad de elementos en una secuencia, ya sea una lista, tupla o cualquier otro tipo
de colección.

Por ejemplo, si tienes una tupla llamada `mi_tupla`, puedes obtener su longitud de la siguiente manera:

mi_tupla = (1, 2, 3, 4, 5)

longitud = len(mi_tupla)

En este ejemplo, `len(mi_tupla)` devuelve `5`, ya que hay cinco elementos en la tupla `(1, 2, 3, 4, 5)`.

Ten en cuenta que `len()` también puede utilizarse para obtener la longitud de listas, cadenas y otras
secuencias en Python.

● Si tienes una tupla con elementos repetidos, ¿cómo encuentras el índice del primer elemento específico?

Puedes utilizar el método `index()` para encontrar el índice del primer elemento específico en una tupla
que contiene elementos repetidos. Este método devuelve el índice de la primera ocurrencia del elemento
que estás buscando.

La sintaxis básica para usar `index()` es la siguiente:

mi_tupla = (1, 2, 3, 2, 4, 2, 5)

indice = mi_tupla.index(elemento)

Donde `mi_tupla` es la tupla en la que deseas buscar, y `elemento` es el valor que estás tratando de
encontrar.

Por ejemplo, si tienes una tupla con elementos repetidos y deseas encontrar el índice del primer `2`,
puedes hacerlo así:

mi_tupla = (1, 2, 3, 2, 4, 2, 5)

indice = mi_tupla.index(2)

39 -
En este ejemplo, `indice` contendría el valor `1`, ya que el primer `2` se encuentra en el índice `1`.

Si el elemento que estás buscando no existe en la tupla, el método `index()` generará un error
`ValueError`. Por lo tanto, es importante asegurarse de verificar si el elemento existe antes de intentar
obtener su índice.

● ¿Es posible modificar un elemento de una tupla directamente?

No, no es posible modificar un elemento de una tupla directamente. Las tuplas en Python son inmutables,
lo que significa que una vez que se crean, no se pueden cambiar.

Si intentas modificar un elemento de una tupla directamente, Python generará un error `TypeError` para
indicar que la operación no es permitida.

Por ejemplo:

mi_tupla = (1, 2, 3)

mi_tupla[1] = 5 # Esto generará un TypeError

Este código generará un error similar a:

TypeError: 'tuple' object does not support item assignment

Si necesitas modificar los elementos, deberías considerar usar una lista en su lugar, ya que las listas son
mutables y te permiten realizar cambios en sus elementos después de su creación.

Diccionario
Un diccionario en Python es una colección no ordenada de elementos en pares de clave-valor. A diferencia de las
listas y las tuplas, donde los elementos se acceden mediante índices, los elementos de un diccionario se acceden
mediante claves únicas. Los diccionarios se definen encerrando sus elementos entre llaves {}

Qué tenés que saber:

● ¿Qué es un diccionario en Python y cómo se diferencia de listas y tuplas?

Un diccionario en Python es una estructura de datos que permite almacenar y organizar datos en pares
clave-valor. Cada elemento en un diccionario consiste en una clave única y su correspondiente valor
asociado. Las claves pueden ser de cualquier tipo inmutable, como cadenas, números o tuplas, y los
valores pueden ser de cualquier tipo, incluyendo listas, tuplas, diccionarios u otros objetos.

A diferencia de listas y tuplas, los elementos en un diccionario no están ordenados, lo que significa que no
tienen un índice específico asociado a ellos. En cambio, se accede a los valores a través de sus claves.

Principales diferencias entre listas, tuplas y diccionarios:

1. **Listas**:

- Colección ordenada de elementos que pueden ser de cualquier tipo.

- Los elementos están indexados por números enteros.

- Mutable: Pueden ser modificadas después de su creación.

2. **Tuplas**:

- Colección ordenada e inmutable de elementos.

- Los elementos están indexados por números enteros.

- Inmutable: No se pueden modificar después de su creación.

40 -
3. **Diccionarios**:

- Colección no ordenada de pares clave-valor.

- Los elementos están indexados por sus claves (que pueden ser de cualquier tipo inmutable).

- Mutable: Pueden ser modificados después de su creación.

- Útil para representar relaciones entre datos y para acceder a valores de manera eficiente a través de
sus claves.

Ejemplo de un diccionario en Python:

mi_diccionario = {

"nombre": "Juan",

"edad": 30,

"ciudad": "Buenos Aires"

En este ejemplo, `mi_diccionario` contiene tres pares clave-valor: "nombre" con el valor "Juan", "edad"
con el valor `30`, y "ciudad" con el valor "Buenos Aires".

Los diccionarios son especialmente útiles cuando necesitas asociar información o datos de manera
significativa a través de claves descriptivas.

● ¿Cómo se accede al valor asociado con una clave específica en un diccionario?

Para acceder al valor asociado con una clave específica en un diccionario en Python, utilizas la notación de
corchetes `[]` junto con la clave que deseas consultar. Aquí hay un ejemplo:

mi_diccionario = {

"nombre": "Juan",

"edad": 30,

"ciudad": "Buenos Aires"

nombre = mi_diccionario["nombre"]

En este ejemplo, `mi_diccionario["nombre"]` devuelve el valor `"Juan"`, que es el valor asociado con la
clave `"nombre"`.

También puedes utilizar el método `get()` para obtener el valor asociado con una clave. La ventaja de
`get()` es que si la clave no existe, en lugar de generar un error, devuelve un valor predeterminado (o
`None` si no se proporciona un valor predeterminado).

nombre = mi_diccionario.get("nombre")

Ambos métodos son útiles, pero la notación de corchetes `[]` es más común y directa cuando sabes que la
clave existe en el diccionario. Por otro lado, `get()` es útil si no estás seguro de la existencia de la clave y
quieres evitar posibles errores.

● ¿Qué sucede si intentas acceder a una clave que no existe en el diccionario?

Si intentas acceder a una clave que no existe en el diccionario, Python generará un error `KeyError`.

41 -
Flujos
Condición lógica
Una condición lógica es una expresión que puede evaluar como verdadera (True) o falsa (False). Estas condiciones
son la base de la toma de decisiones en la programación y se utilizan en estructuras de control como if, elif y else.

Qué tenés que saber:

● ¿Qué es una condición lógica y por qué es esencial en programación?

Una condición lógica, en programación, es una expresión que evalúa si una cierta afirmación es verdadera
o falsa. Estas condiciones son fundamentales en la toma de decisiones en un programa. Dependiendo de
si una condición es verdadera o falsa, el programa ejecutará diferentes bloques de código.

Las condiciones lógicas permiten que un programa se comunique y reaccione de manera dinámica a
diferentes situaciones. Esto es esencial para escribir programas que no sigan un flujo de ejecución lineal y
que puedan adaptarse a diferentes escenarios.

Por ejemplo, imagina un programa que debe determinar si un usuario tiene permiso para acceder a cierta
parte de un sitio web. Se podría usar una condición lógica para verificar si el usuario tiene las credenciales
adecuadas. Si la condición es verdadera, se le permite el acceso; si es falsa, se le niega.

Las condiciones lógicas son vitales para la lógica de control de flujo en programación, lo que significa que
te permiten decidir qué instrucciones ejecutar en función de ciertas condiciones. Esto es esencial para
crear programas dinámicos y capaces de responder a diferentes situaciones y datos de entrada.

● ¿En qué situaciones usarías una condición lógica?

Las condiciones lógicas se utilizan en una amplia variedad de situaciones en programación para controlar
el flujo de ejecución del programa. Aquí hay algunas situaciones comunes en las que usarías una condición
lógica:

1. **Toma de decisiones**:

- Para ejecutar un bloque de código si una condición es verdadera y otro bloque si es falsa. Por ejemplo,
determinar si un usuario tiene los permisos adecuados para acceder a cierta parte de una aplicación.

2. **Bucles**:

- Para determinar si se debe continuar o detener la ejecución de un bucle. Por ejemplo, en un bucle
`while`, puedes usar una condición lógica como criterio de terminación.

3. **Filtrado de datos**:

- Para seleccionar o filtrar elementos de una colección de datos según ciertos criterios. Por ejemplo,
filtrar una lista para obtener solo los números pares.

4. **Manejo de errores**:

- Para decidir cómo manejar un error o excepción en base a ciertas condiciones.

5. **Validación de entrada**:

- Para verificar si los datos ingresados por un usuario cumplen con ciertos requisitos antes de
procesarlos.

6. **Personalización de la experiencia del usuario**:

- Para adaptar la interfaz o el comportamiento de una aplicación según las preferencias o características
del usuario.

42 -
7. **Control de flujo en juegos**:

- En la programación de juegos, las condiciones lógicas son fundamentales para determinar cómo
responder a las acciones del jugador y al estado del juego.

8. **Automatización de tareas**:

- En la automatización de scripts, se utilizan condiciones lógicas para decidir qué acciones tomar en
función de ciertas condiciones del sistema.

9. **Optimización de algoritmos**:

- En algoritmos y algoritmia, las condiciones lógicas son fundamentales para controlar el


comportamiento de los algoritmos y determinar la lógica subyacente.

En resumen, las condiciones lógicas son esenciales para tomar decisiones en tiempo de ejecución y
permiten que los programas se adapten y respondan a diferentes situaciones y datos de entrada. Son una
parte fundamental de la programación y permiten la creación de programas dinámicos y flexibles.

● ¿Qué valores se consideran "falsy" en Python?

En Python, los valores que se consideran "falsy" (es decir, se evalúan como `False` en un contexto
booleano) son aquellos que son considerados como "falsos" cuando se utilizan en expresiones lógicas o de
control de flujo.

Los valores considerados "falsy" en Python son los siguientes:

1. **False**: El valor booleano `False` en sí mismo se considera "falsy".

2. **None**: El valor especial `None` también se considera "falsy".

3. **Cero numérico**: Cualquier número igual a `0` (ya sea de tipo entero, decimal o complejo) se
considera "falsy".

4. **Secuencias y colecciones vacías**:

- Cadenas vacías: `""` (cadena vacía).

- Listas vacías: `[]`.

- Tuplas vacías: `()`.

- Diccionarios vacíos: `{}`.

- Conjuntos vacíos: `set()`.

5. **Instancias de clases personalizadas**:

- Puedes definir tu propia clase y sobreescribir el método `__bool__()` para controlar si las instancias de
esa clase se evalúan como "falsy" o no.

6. **Objetos con `__bool__` o `__len__` definidos**:

- Si una clase define el método especial `__bool__` o `__len__`, el objeto se evaluará en función del valor
retornado por estos métodos. Por ejemplo, si `__bool__` devuelve `False`, el objeto será considerado
"falsy".

7. **Otras instancias de clases incorporadas**:

- Algunas instancias de clases incorporadas pueden tener un comportamiento "falsy" si están diseñadas
de esa manera. Por ejemplo, `datetime.datetime(0, 0, 0)` (una fecha que representa el "inicio del tiempo")
se evalúa como "falsy".

Es importante entender los valores "falsy" porque son fundamentales en las expresiones lógicas y las
declaraciones de control de flujo, como las instrucciones `if`, `while` y `for`. Por lo tanto, entender qué
valores se consideran "falsy" es crucial para escribir código Python efectivo y preciso.

43 -
Operadores de comparación
Los operadores de comparación son símbolos utilizados para comparar dos valores. Los operadores comunes en
Python incluyen: == (igual a), != (diferente de), < (menor que), > (mayor que), <= (menor o igual que) y >= (mayor o
igual que).

Qué tenés que saber:

● ¿Qué son los operadores de comparación y cuáles son los más comunes en Python?

Los operadores de comparación en Python son utilizados para comparar dos valores y determinar la
relación entre ellos. Estos operadores devuelven un valor booleano (`True` o `False`) que indica si la
comparación es verdadera o falsa.

Los operadores de comparación más comunes en Python son:

1. **Igual a (`==`)**: Comprueba si dos valores son iguales.

2. **Diferente de (`!=`) o (`<>`) en versiones anteriores de Python 2.x**: Comprueba si dos valores no son
iguales.

3. **Mayor que (`>`) y Menor que (`<`)**: Comprueban si un valor es mayor o menor que otro,
respectivamente.

4. **Mayor o igual que (`>=`) y Menor o igual que (`<=`)**: Comprueban si un valor es mayor o igual, o
menor o igual que otro, respectivamente.

5. **Pertenencia (`in`)**: Comprueba si un valor está presente en una secuencia (como una lista, tupla o
cadena).

6. **No pertenencia (`not in`)**: Comprueba si un valor no está presente en una secuencia.

Estos operadores son fundamentales para realizar comparaciones y tomar decisiones basadas en
condiciones en un programa Python. Por ejemplo, se utilizan en estructuras de control como `if`, `elif` y
`while` para determinar qué código se debe ejecutar en función de las condiciones evaluadas.

Ejemplo de uso de operadores de comparación:

x=5

y=3

# Igual a

print(x == y) # False

# Diferente de

print(x != y) # True

# Mayor que

print(x > y) # True

# Menor que

print(x < y) # False

# Mayor o igual que

print(x >= y) # True

44 -
# Menor o igual que

print(x <= y) # False

# Pertenencia

lista = [1, 2, 3, 4, 5]

print(3 in lista) # True

# No pertenencia

print(6 not in lista) # True

● ¿Cuál es la diferencia entre = y == en Python?

La principal diferencia entre = y == es que = se utiliza para asignar valores a variables, mientras que == se
utiliza para comparar si dos valores son iguales. Es importante no confundir estos dos operadores, ya que
un error común en programación es usar = cuando se debería usar == para realizar una comparación.

● ¿Cómo compararías si dos cadenas son iguales en contenido?

Para comparar si dos cadenas son iguales en contenido en Python, puedes usar el operador de
comparación `==`. Esto verifica si los caracteres en ambas cadenas son idénticos.

Por ejemplo:

cadena1 = "Hola"

cadena2 = "Hola"

if cadena1 == cadena2:

print("Las cadenas son iguales")

else:

print("Las cadenas son diferentes")

En este ejemplo, las dos cadenas contienen el mismo contenido ("Hola"), por lo que la condición `cadena1
== cadena2` se evalúa como `True` y el mensaje "Las cadenas son iguales" se imprime en la consola.

Ten en cuenta que la comparación de cadenas es sensible a mayúsculas y minúsculas. Por lo tanto, "hola"
y "Hola" se considerarían diferentes en una comparación directa. Si necesitas realizar una comparación sin
distinguir entre mayúsculas y minúsculas, puedes convertir ambas cadenas a minúsculas (o mayúsculas)
antes de la comparación utilizando los métodos `lower()` o `upper()`.

Por ejemplo:

cadena1 = "Hola"

cadena2 = "hola"

if cadena1.lower() == cadena2.lower():

print("Las cadenas son iguales, sin importar mayúsculas y minúsculas")

else:

print("Las cadenas son diferentes")

En este caso, la comparación se realiza en minúsculas, por lo que las cadenas se considerarán iguales.

45 -
Tabla de Verdad
Una tabla de verdad es una representación matemática que muestra todas las posibles verdades (verdadero o falso)
de una expresión lógica, basada en todas las posibles combinaciones de verdades de sus variables.

Qué tenés que saber:

● ¿Qué es una tabla de verdad y para qué se utiliza?

Una tabla de verdad es una representación tabular que muestra todas las posibles combinaciones de
valores de entrada y los resultados correspondientes de una expresión lógica. Cada fila en la tabla de
verdad representa una combinación única de valores de entrada y el resultado de la expresión lógica para
esa combinación.

Las tablas de verdad son fundamentales en la lógica y en la teoría de circuitos booleanos, y se utilizan para
analizar y comprender el comportamiento de operaciones lógicas, como conjunciones (`AND`),
disyunciones (`OR`), negaciones (`NOT`), entre otras.

Las tablas de verdad son esenciales para el diseño y la comprensión de circuitos lógicos, así como para la
programación en lenguajes que utilizan lógica booleana, como Python, donde se utilizan en expresiones
condicionales y de control de flujo.

● ¿Cómo se representa la operación lógica AND en una tabla de verdad?

| A | B | A AND B |

|---|---|--------|

| 0 | 0 | 0 |F

| 0 | 1 | 0 |F

| 1 | 0 | 0 |F

| 1 | 1 | 1 |T

En esta tabla, `A` y `B` son las variables de entrada, y `A AND B` es el resultado de la operación `AND`
entre `A` y `B`. La tabla muestra todas las posibles combinaciones de valores de `A` y `B` y el resultado
correspondiente de la operación `AND`.

● ¿Qué combinación de entradas produce un True para el operador OR?

En una operación lógica `OR`, el resultado es `True` si al menos uno de los operandos es `True`. Por lo
tanto, para obtener un resultado `True`, al menos uno de los valores de entrada debe ser `True`.

En una tabla de verdad para el operador `OR`, la combinación de entradas que produce un resultado
`True` es aquella donde al menos una de las variables de entrada es `True`. Veamos la tabla de verdad
para la operación `OR`:

| A | B | A OR B |

|---|---|-------|

| 0 | 0 | 0 |F

| 0 | 1 | 1 |T

| 1 | 0 | 1 |T

| 1 | 1 | 1 |T

En esta tabla, las combinaciones de entradas que producen un resultado `True` son:

- Cuando `A` es `False` y `B` es `True` (`0 OR 1`).

46 -
- Cuando `A` es `True` y `B` es `False` (`1 OR 0`).

- Cuando `A` es `True` y `B` es `True` (`1 OR 1`).

Por lo tanto, cualquier combinación en la que al menos una de las variables de entrada sea `True`
producirá un resultado `True` en una operación `OR`.

Operador "and"
El operador lógico AND retorna True si y solo si ambos operandos son verdaderos. En Python, se representa por la
palabra clave and

Qué tenés que saber:

● ¿Cómo funciona el operador AND y cuándo se evalúa como verdadero?

El operador lógico `AND` en Python (y en lógica booleana en general) funciona de la siguiente manera:

- **Operador `AND` (`&&` en algunos otros lenguajes)**:

- En una expresión `A AND B`, el resultado es `True` si **ambos** `A` y `B` son `True`. En todos los
demás casos, el resultado es `False`.

- Si `A` es `False`, no importa cuál sea el valor de `B`, la expresión `A AND B` será siempre `False`.

- Si `A` es `True`, entonces el resultado dependerá del valor de `B`. Si `B` es `True`, la expresión será
`True`; si `B` es `False`, la expresión será `False`.

- Ejemplos:

- `True AND True` es `True`.

- `True AND False` es `False`.

- `False AND True` es `False`.

- `False AND False` es `False`.

Por lo tanto, el operador `AND` solo evalúa como verdadero cuando **ambas** condiciones son
verdaderas. Si al menos una de las condiciones es falsa, el resultado es falso.

● En una operación con AND, si el primer operando es False, ¿se evalúa el segundo operando?

En una operación con el operador `AND` en Python, si el primer operando es `False`, el segundo operando
no se evalúa. Esto se debe a una propiedad conocida como "evaluación perezosa" (short-circuit
evaluation) en Python.

La evaluación perezosa significa que si el resultado de la operación se puede determinar a partir del
primer operando, Python no evaluará el segundo operando. Esto ahorra tiempo de ejecución y puede
mejorar la eficiencia del código.

Por ejemplo, considera la siguiente expresión con `AND`:

A = False

B = some_function() # Supongamos que some_function() es una función que realiza algún cálculo

resultado = A and B

En este caso, si `A` es `False`, el resultado de la operación `A and B` será siempre `False`,
independientemente del valor de `B`. Por lo tanto, Python no necesita evaluar `B` y la función
`some_function()` no se ejecutará.

47 -
Esta propiedad es útil en situaciones en las que la evaluación de un operando puede ser costosa y no es
necesaria si el primer operando ya determina el resultado de la operación.

● Proporcione un ejemplo práctico de cuándo usaría el operador AND.

Supongamos que estás escribiendo un programa para verificar las credenciales de un usuario antes de
permitirle acceder a una función importante. El usuario debe proporcionar un nombre de usuario y una
contraseña válidos.

# Obtener nombre de usuario y contraseña del usuario

usuario = input("Ingrese su nombre de usuario: ")

contraseña = input("Ingrese su contraseña: ")

# Verificar si las credenciales son correctas

if usuario == "usuario_correcto" and contraseña == "contraseña_correcta":

print("¡Bienvenido! Puede acceder a la función importante.")

else:

print("Credenciales incorrectas. Acceso denegado.")

En este ejemplo, el programa solicita al usuario que ingrese un nombre de usuario y una contraseña.
Luego, utiliza una declaración `if` con el operador `AND` para verificar si tanto el nombre de usuario como
la contraseña son correctos.

- Si el nombre de usuario y la contraseña son correctos, se imprime el mensaje de bienvenida y se permite


el acceso a la función importante.

- Si alguna de las condiciones (`usuario == "usuario_correcto"` o `contraseña == "contraseña_correcta"`)


es falsa, se imprimirá el mensaje de "Credenciales incorrectas. Acceso denegado."

En este caso, el operador `AND` se utiliza para asegurarse de que ambas condiciones sean verdaderas
antes de permitir el acceso. Si cualquiera de las condiciones es falsa, el acceso se deniega.

Operador "or"
El operador lógico OR retorna True si al menos uno de los operandos es verdadero. En Python, se representa por la
palabra clave or.

Qué tenés que saber:

● ¿Cómo funciona el operador OR y cuándo se evalúa como verdadero?

El operador lógico `OR` en Python (y en lógica booleana en general) funciona de la siguiente manera:

- **Operador `OR` (`||` en algunos otros lenguajes)**:

- En una expresión `A OR B`, el resultado es `True` si al menos uno de los operandos (`A` o `B`) es `True`.
Si ambos son `False`, el resultado es `False`.

- Si `A` es `True`, no importa cuál sea el valor de `B`, la expresión `A OR B` será siempre `True`.

- Si `A` es `False`, entonces el resultado dependerá del valor de `B`. Si `B` es `True`, la expresión será
`True`; si `B` es `False`, la expresión será `False`.

- Ejemplos:

- `True OR True` es `True`.

48 -
- `True OR False` es `True`.

- `False OR True` es `True`.

- `False OR False` es `False`.

Por lo tanto, el operador `OR` evalúa como verdadero cuando al menos uno de los operandos es `True`. Si
ambos operandos son `False`, el resultado es `False`.

● En una operación con OR, si el primer operando es True, ¿se evalúa el segundo operando?

En una operación con el operador OR en Python, si el primer operando es True, el segundo operando no
se evalúa. Esto también se debe a la propiedad de "evaluación perezosa" (short-circuit evaluation) en
Python.

● Proporcione un ejemplo práctico de cuándo usaría el operador OR

Supongamos que estás escribiendo un programa para una tienda en línea y quieres determinar si un
cliente es elegible para un descuento especial. El descuento se aplica si el cliente tiene una membresía
premium o si ha acumulado cierta cantidad de puntos de fidelidad.

# Obtener información del cliente

tiene_membresia = True # Indica si el cliente tiene membresía premium

puntos_fidelidad = 300 # Número de puntos de fidelidad del cliente

# Verificar elegibilidad para el descuento

if tiene_membresia or puntos_fidelidad >= 200:

print("¡Felicidades! Eres elegible para un descuento especial.")

else:

print("Lo siento, no eres elegible para un descuento en este momento.")

En este ejemplo, el programa verifica si el cliente es elegible para un descuento especial. Se utiliza una
declaración `if` con el operador `OR` para evaluar dos condiciones:

1. `tiene_membresia` indica si el cliente tiene una membresía premium. Si es `True`, el cliente es elegible
para el descuento.

2. `puntos_fidelidad >= 200` verifica si el cliente tiene al menos 200 puntos de fidelidad. Si es así, el cliente
también es elegible para el descuento.

Si cualquiera de las condiciones es verdadera (es decir, el cliente tiene membresía o tiene suficientes
puntos de fidelidad), el cliente es elegible para el descuento y se imprime el mensaje de felicitación. Si
ambas condiciones son falsas, se imprime un mensaje indicando que el cliente no es elegible en este
momento.

En este caso, el operador `OR` se utiliza para determinar si al menos una de las condiciones es verdadera
para otorgar el descuento. Esto permite flexibilidad en las condiciones de elegibilidad para los clientes.

Operador "not"
El operador lógico NOT invierte el valor booleano de su operando. Si el operando es True, NOT retorna False y
viceversa. En Python, se representa por la palabra clave not.

Qué tenés que saber:

● ¿Cómo funciona el operador NOT y cuál es su propósito?

49 -
El operador lógico `NOT` en Python (y en lógica booleana en general) tiene el siguiente funcionamiento y
propósito:

- **Operador `NOT` (`not` en Python)**:

- El operador `NOT` invierte el valor de una expresión booleana. Es decir, si la expresión es `True`, `NOT`
la convierte en `False`, y si la expresión es `False`, `NOT` la convierte en `True`.

- En términos de una tabla de verdad:

| A | not A |

|---|-------|

|0| 1 |

|1| 0 |

- Ejemplos:

- `not True` es `False`.

- `not False` es `True`.

- El propósito del operador `NOT` es negar o invertir el valor de una expresión booleana. Esto es útil en
situaciones donde se necesita verificar si una condición no se cumple.

Por ejemplo, si queremos verificar si un usuario no tiene una membresía básica, podemos usar el
operador `NOT`:

tiene_membresia_basica = False

if not tiene_membresia_basica:

print("El usuario no tiene membresía básica.")

else:

print("El usuario tiene membresía básica.")

En este ejemplo, si `tiene_membresia_basica` es `False`, la expresión `not tiene_membresia_basica` será


`True`, lo que indica que el usuario no tiene membresía básica. Si `tiene_membresia_basica` fuera `True`,
la expresión `not tiene_membresia_basica` sería `False`, lo que indicaría que el usuario tiene membresía
básica.

En resumen, el operador `NOT` es útil para negar una condición y cambiar el sentido de una expresión
booleana. Esto es esencial en la lógica de control de flujo y toma de decisiones en programación.

● ¿Qué resultado obtendrías al aplicar NOT a True?

Al aplicar el operador NOT a True, obtendrías False.

resultado = not True

print(resultado) # Esto imprimirá False

● Proporcione un ejemplo práctico de cuándo usaría el operador NOT.

Supongamos que estás desarrollando un sistema de autenticación y quieres verificar si un usuario no ha


proporcionado una contraseña vacía.

# Obtener la contraseña del usuario

50 -
contraseña = input("Ingrese su contraseña: ")

# Verificar si la contraseña no está vacía

if not contraseña:

print("La contraseña no puede estar vacía. Por favor, ingrese una contraseña.")

else:

print("Contraseña válida. Acceso concedido.")

En este ejemplo, el programa solicita al usuario que ingrese una contraseña. Luego, utiliza una declaración
`if` con el operador `NOT` para verificar si la contraseña no está vacía.

- Si el usuario no ingresa ninguna contraseña (es decir, la variable `contraseña` es una cadena vacía), la
condición `not contraseña` se evalúa como `True`. Esto significa que la contraseña está vacía y se imprime
el mensaje indicando que debe ingresar una contraseña.

- Si el usuario proporciona una contraseña, la condición `not contraseña` se evalúa como `False`. Esto
significa que la contraseña no está vacía y se imprime el mensaje de acceso concedido.

En este caso, el operador `NOT` se utiliza para verificar si una condición no se cumple, lo que es útil para
garantizar que ciertos requisitos se cumplan antes de proceder.

if-else
if-else es una estructura de control en Python que permite ejecutar un bloque de código si una condición es
verdadera (if) y otro bloque si es falsa (else).

Qué tenés que saber:

● ¿Cómo funciona la estructura if-else en Python y en qué situaciones es útil?

La estructura `if-else` en Python es una construcción que permite tomar decisiones en función de una
condición. Funciona de la siguiente manera:

```python

if condicion:

# Código a ejecutar si la condición es verdadera

else:

# Código a ejecutar si la condición es falsa

```

Explicación de cómo funciona:

- Se evalúa la condición especificada después del `if`. Si la condición es verdadera, se ejecuta el bloque de
código dentro del `if`. Si es falsa, se ejecuta el bloque de código dentro del `else`.

- La parte `else` es opcional. Si no se proporciona, el programa simplemente continúa después del bloque
de código del `if`.

- La estructura `if-else` permite bifurcar el flujo del programa en dos direcciones diferentes dependiendo
de si una condición es verdadera o falsa.

if condicion:

51 -
# Código a ejecutar si la condición es verdadera

else:

# Código a ejecutar si la condición es falsa

La estructura `if-else` es útil en una amplia variedad de situaciones, como:

1. **Tomar decisiones basadas en condiciones**: Por ejemplo, determinar si un usuario tiene permiso
para acceder a cierta función o si un producto está disponible para la compra.

2. **Manejo de errores y excepciones**: Puedes usar `if-else` para manejar casos en los que se producen
errores o excepciones.

3. **Control de flujo del programa**: Puedes utilizar `if-else` para guiar el flujo de ejecución del programa
en función de diferentes escenarios.

4. **Validación de datos de entrada**: Puedes verificar si los datos ingresados por un usuario cumplen
con ciertos criterios antes de procesarlos.

5. **Implementación de lógica condicional**: Esencialmente, cualquier situación en la que necesites


tomar decisiones basadas en ciertas condiciones.

La estructura `if-else` es una herramienta fundamental en la programación y te permite escribir


programas que pueden responder y adaptarse a diferentes situaciones.

● Si tienes una declaración if sin un else y la condición se evalúa como falsa, ¿qué sucede?

Si tienes una declaración `if` sin un `else` y la condición se evalúa como falsa, entonces el bloque de código
dentro del `if` simplemente no se ejecutará y el programa continuará con la siguiente línea de código
después del `if`.

En otras palabras, si la condición de la declaración `if` es falsa y no hay un `else` asociado, el programa
simplemente omitirá el bloque de código dentro del `if` y continuará ejecutando el código que sigue
después de la declaración `if`.

Por ejemplo:

condicion = False

if condicion:

print("Esta línea se ejecutaría si la condición es verdadera")

# Si la condición es falsa, el programa continúa aquí

print("Esta línea siempre se ejecuta, independientemente de la condición")

En este ejemplo, si `condicion` es `False`, la línea dentro del bloque `if` no se ejecutará, pero la línea que
sigue después del `if` se ejecutará independientemente de la condición.

● Proporcione un ejemplo práctico de cómo usaría la estructura if-else en un programa.

Supongamos que estás escribiendo un programa para determinar si un estudiante ha aprobado un curso
basado en su puntaje final.

```

# Obtener el puntaje final del estudiante

puntaje_final = float(input("Ingrese el puntaje final del estudiante: "))

# Definir el puntaje mínimo para aprobar

52 -
puntaje_minimo_aprobacion = 60.0

# Verificar si el estudiante aprobó o no

if puntaje_final >= puntaje_minimo_aprobacion:

print("¡El estudiante ha aprobado el curso!")

else:

print("El estudiante no ha alcanzado el puntaje mínimo. Debe estudiar más para la próxima vez.")

```

En este ejemplo:

1. El programa solicita al usuario que ingrese el puntaje final del estudiante.

2. Se define un puntaje mínimo de aprobación (`puntaje_minimo_aprobacion`) como 60.0.

3. Luego, se utiliza una estructura `if-else` para determinar si el estudiante ha aprobado o no.

- Si el `puntaje_final` es mayor o igual al puntaje mínimo de aprobación, se imprime el mensaje "¡El


estudiante ha aprobado el curso!".

- Si el `puntaje_final` es menor que el puntaje mínimo de aprobación, se imprime el mensaje "El


estudiante no ha alcanzado el puntaje mínimo. Debe estudiar más para la próxima vez."

Este es un ejemplo práctico de cómo usar la estructura `if-else` para tomar decisiones en un programa.
Dependiendo del puntaje final ingresado, el programa proporcionará un mensaje apropiado indicando si
el estudiante ha aprobado o no el curso.

Elif
elif, que es una abreviatura de "else if", permite comprobar múltiples condiciones después de un if y antes de un
else. Se ejecuta si su condición es verdadera y todas las condiciones if y elif anteriores son falsas.

Qué tenés que saber:

● ¿Qué es elif y cómo se diferencia de if y else?

`elif` es una abreviación de "else if" y se utiliza en Python para evaluar múltiples condiciones en una
estructura de control `if-elif-else`. `elif` se coloca después de un bloque `if` y antes de un bloque `else`.

La estructura es la siguiente:

```

if condicion_1:

# Código si condicion_1 es verdadera

elif condicion_2:

# Código si condicion_1 es falsa pero condicion_2 es verdadera

else:

# Código si ninguna de las condiciones anteriores es verdadera

```

Explicación de cómo funciona `elif` y cómo se diferencia de `if` y `else`:

53 -
- `if`: Se utiliza para evaluar una condición y ejecutar un bloque de código si esa condición es verdadera. Es
la primera condición que se evalúa y solo se ejecuta un bloque de código dentro de un `if`.

- `elif`: Se utiliza para evaluar una condición si la condición en el `if` es falsa. Puedes tener múltiples
bloques `elif` para evaluar condiciones adicionales. Se ejecuta el primer bloque `elif` cuya condición sea
verdadera.

- `else`: Se utiliza como una rama final en una estructura `if-elif-else`. Si ninguna de las condiciones
anteriores es verdadera, el bloque de código dentro del `else` se ejecuta. Solo puede haber un bloque
`else` y siempre es la última condición que se evalúa.

Ejemplo:

```

numero = 5

if numero > 10:

print("El número es mayor que 10")

elif numero > 5:

print("El número es mayor que 5 pero no mayor que 10")

else:

print("El número es 5 o menor")

```

En este ejemplo, si `numero` es mayor que 10, se ejecuta el primer bloque de código. Si no, se verifica si
`numero` es mayor que 5 pero no mayor que 10, y si eso es cierto, se ejecuta el segundo bloque de
código. Si ninguna de las condiciones anteriores es verdadera, se ejecuta el bloque de código en el `else`.

● ¿Cómo se usa elif para manejar múltiples condiciones?

`elif` se utiliza en una estructura de control `if-elif-else` para manejar múltiples condiciones de manera
secuencial. Esto te permite evaluar una serie de condiciones y ejecutar el bloque de código asociado a la
primera condición que sea verdadera.

A continuación te muestro un ejemplo de cómo usar `elif` para manejar múltiples condiciones:

```

opcion = 3

if opcion == 1:

print("Elegiste la opción 1")

elif opcion == 2:

print("Elegiste la opción 2")

elif opcion == 3:

print("Elegiste la opción 3")

else:

print("Opción no válida")

```

En este ejemplo:

54 -
1. Se define una variable `opcion` con el valor 3.

2. Se utiliza una estructura `if-elif-else` para evaluar la variable `opcion` en diferentes condiciones.

- Si `opcion` es igual a 1, se ejecuta el primer bloque de código y se imprime "Elegiste la opción 1".

- Si `opcion` es igual a 2, se ejecuta el segundo bloque de código y se imprime "Elegiste la opción 2".

- Si `opcion` es igual a 3, se ejecuta el tercer bloque de código y se imprime "Elegiste la opción 3".

- Si ninguna de las condiciones anteriores es verdadera, se ejecuta el bloque `else` y se imprime "Opción
no válida".

En este caso, dado que `opcion` tiene el valor 3, se cumple la tercera condición (`opcion == 3`), por lo que
se ejecuta el bloque de código asociado a esa condición y se imprime "Elegiste la opción 3".

Este es solo un ejemplo, pero puedes usar `elif` para manejar cualquier número de condiciones que
necesites en tu programa.

● Proporcione un ejemplo en el que sea útil usar elif en lugar de múltiples declaraciones if. (ejemplo
anterior)

Ciclo for
También conocido como Bucle for

El ciclo for en Python es utilizado para iterar sobre una secuencia (que puede ser una lista, una tupla, un diccionario,
un conjunto o una cadena). Con este bucle, es posible ejecutar un bloque de código para cada elemento en la
secuencia. A diferencia de muchos otros lenguajes de programación, donde un bucle for típicamente itera a través
de una progresión aritmética de números, el bucle for de Python itera sobre los ítems de cualquier secuencia en el
orden que aparecen en la secuencia.

Qué tenés que saber:

● ¿Qué es un bucle for y cómo se usa en Python para iterar sobre secuencias?

Un bucle `for` en Python es una estructura de control que permite iterar sobre una secuencia de
elementos, como una lista, una tupla, una cadena de caracteres, un rango de números, entre otros.
Permite ejecutar un bloque de código repetidamente para cada elemento de la secuencia.

La sintaxis básica de un bucle `for` es la siguiente:

```

for elemento in secuencia:

# Código a ejecutar en cada iteración

```

- `elemento` es una variable que tomará el valor de cada elemento de la secuencia en cada iteración.

- `secuencia` es la colección de elementos sobre la cual se itera.

El bucle `for` es una herramienta poderosa para procesar colecciones de datos y realizar tareas repetitivas
de manera eficiente en Python. Puedes combinarlo con condicionales y otros conceptos para realizar
tareas más complejas.

55 -
● ¿Cómo se usaría un bucle for para imprimir todos los elementos de una lista?

Supongamos que queremos imprimir cada elemento de una lista:

```

frutas = ["manzana", "banana", "cereza"]

for fruta in frutas:

print(fruta)

```

En este ejemplo, el bucle `for` recorre la lista `frutas` y en cada iteración, la variable `fruta` toma el valor
de un elemento de la lista. El bloque de código dentro del bucle (`print(fruta)`) se ejecuta con cada valor
de `fruta`.

La salida sería:

```

manzana

banana

cereza

```

● ¿Qué es la función range() y cómo se utiliza en un bucle for?

**Iterando sobre un rango de números**:

También puedes usar un bucle `for` junto con la función `range()` para iterar sobre una secuencia de
números. Por ejemplo:

```

for i in range(5):

print(i)

```

En este caso, el bucle imprimirá los números del 0 al 4.

Ciclo while
También conocido como Bucle while

El ciclo while en Python se utiliza para repetir un bloque de código mientras una condición sea verdadera. La
ejecución del bucle comienza con la evaluación de la condición; si es True, se ejecuta el bloque de código dentro del
bucle. Después de cada ejecución del bloque de código, la condición se vuelve a evaluar. El bucle continúa mientras
la condición sea verdadera y se detiene cuando la condición se convierte en False. Es crucial garantizar que, en
algún momento, la condición del bucle while se evalúe como False para evitar bucles infinitos.

Qué tenés que saber:

● ¿Qué es un bucle while y cómo difiere del bucle for?

56 -
Un bucle `while` en Python es una estructura de control que permite ejecutar un bloque de código
repetidamente mientras una condición especificada sea verdadera. A diferencia del bucle `for`, que itera
sobre una secuencia de elementos, el bucle `while` se basa en la evaluación de una condición booleana.

La sintaxis básica de un bucle `while` es la siguiente:

```

while condicion:

# Código a ejecutar mientras la condición sea verdadera

```

- `condicion` es una expresión booleana que se evalúa en cada iteración. Si la condición es `True`, el
bloque de código se ejecuta; si es `False`, el bucle se detiene.

**Diferencias entre bucle `for` y bucle `while`**:

1. **Control de la iteración**:

- En un bucle `for`, se itera sobre una secuencia predefinida de elementos (como una lista o un rango de
números).

- En un bucle `while`, se itera mientras una condición especificada sea verdadera.

2. **Condiciones de terminación**:

- En un bucle `for`, el número de iteraciones está determinado por la longitud de la secuencia sobre la
cual se itera.

- En un bucle `while`, las iteraciones continúan mientras la condición sea verdadera y se detienen
cuando la condición se vuelve falsa.

En resumen, un bucle `while` es útil cuando no sabes cuántas iteraciones necesitarás y quieres que la
iteración continúe mientras una condición sea verdadera. Por otro lado, un bucle `for` es más adecuado
cuando sabes cuántas veces necesitas iterar sobre una secuencia de elementos.

● Proporcione un ejemplo en el que un bucle while sería más apropiado que un bucle for.

**Ejemplo práctico**:

Supongamos que queremos imprimir los números del 1 al 5 usando un bucle `while`:

```

contador = 1

while contador <= 5:

print(contador)

contador += 1

```

En este ejemplo, inicializamos una variable `contador` a 1. El bucle `while` verifica si `contador` es menor
o igual a 5 en cada iteración. Mientras esta condición sea verdadera, el bloque de código dentro del bucle
se ejecutará, lo que imprimirá el valor de `contador`. Luego, incrementamos `contador` en 1 en cada
iteración.

La salida sería:

```

57 -
2

```

● ¿Qué precauciones deben tomarse al usar un bucle while para evitar bucles infinitos?

Para evitar bucles infinitos al usar un bucle `while`, es importante tener en cuenta algunas precauciones y
buenas prácticas:

1. **Asegurarse de que la condición sea eventualmente falsa**:

- La condición en el bucle `while` debe eventualmente evaluar a `False` para que el bucle se detenga. Si
la condición siempre es `True`, el bucle continuará indefinidamente.

2. **Actualizar la variable de control**:

- Dentro del bucle, asegúrate de modificar la variable que controla la condición en algún momento. Si no
lo haces, es posible que la condición siempre sea verdadera y el bucle se vuelva infinito.

```

contador = 1

while contador <= 5:

print(contador)

contador += 1 # ¡Es importante actualizar la variable de control!

```

3. **Evitar condiciones siempre verdaderas**:

- Evita condiciones que siempre sean verdaderas. Por ejemplo, `while True:` creará un bucle infinito a
menos que haya una forma explícita de salir del bucle.

4. **Tener un plan de salida**:

- Si es posible, incluye una condición que permita salir del bucle en algún momento. Puedes usar una
sentencia `break` para salir del bucle basado en una condición adicional.

```

while condicion:

if condicion_de_salida:

break

# Resto del código

```

5. **Controlar las entradas de usuario**:

- Si estás usando un bucle `while` que depende de entradas de usuario, asegúrate de validar y verificar
las entradas para evitar situaciones que puedan llevar a bucles infinitos.

```

while True:

58 -
entrada = input("Ingrese un valor (q para salir): ")

if entrada == 'q':

break

# Resto del código

```

6. **Tener una condición de terminación clara**:

- Asegúrate de que la condición de terminación del bucle sea clara y fácil de entender para cualquier
persona que lea tu código.

Siguiendo estas precauciones y buenas prácticas, puedes evitar bucles infinitos y garantizar que tu
programa se comporte de manera controlada.

Corte de Flujo de Bucles


Durante la ejecución de bucles en Python, puede surgir la necesidad de modificar el flujo normal de iteración. Para
esto, Python ofrece dos declaraciones clave: break y continue. La declaración break permite finalizar el bucle
completamente antes de que haya recorrido toda la secuencia o antes de que la condición lógica del bucle se evalúe
como falsa. Es especialmente útil cuando se ha encontrado una condición particular en la que ya no es necesario
continuar la iteración. Por otro lado, continue permite saltarse el resto del bloque de código dentro del bucle para
la iteración actual y continuar con la siguiente iteración del bucle.

Qué tenés que saber:

● ¿Qué hacen las declaraciones break y continue en un bucle?

Las declaraciones `break` y `continue` son instrucciones que afectan el flujo de ejecución dentro de un
bucle en Python:

1. **break**:

- La declaración `break` se utiliza para salir inmediatamente de un bucle, sin importar si la condición de
salida se ha cumplido completamente o no.

- Cuando se encuentra una declaración `break`, el flujo del programa se salta fuera del bucle y continúa
con la siguiente línea de código después del bucle.

- Se suele usar en situaciones donde se necesita salir del bucle en función de alguna condición específica.

**Ejemplo**:

```

for i in range(5):

if i == 3:

break

print(i)

```

En este ejemplo, cuando `i` es igual a 3, se ejecuta la declaración `break` y el bucle se detiene
inmediatamente. La salida sería:

```

59 -
1

```

2. **continue**:

- La declaración `continue` se utiliza para interrumpir la iteración actual de un bucle y continuar con la
siguiente iteración.

- Cuando se encuentra una declaración `continue`, el flujo del programa salta a la siguiente iteración del
bucle, sin ejecutar el resto del código dentro del bucle en esa iteración en particular.

- Se suele usar cuando quieres omitir ciertas iteraciones basado en una condición.

**Ejemplo**:

```

for i in range(5):

if i == 2:

continue

print(i)

```

En este ejemplo, cuando `i` es igual a 2, se ejecuta la declaración `continue`, lo que hace que el bucle
pase directamente a la siguiente iteración. Como resultado, el número 2 no se imprime. La salida sería:

```

```

En resumen, `break` se utiliza para salir completamente de un bucle cuando se cumple una condición
específica, mientras que `continue` se utiliza para omitir la iteración actual y pasar a la siguiente cuando se
cumple una condición. Ambas declaraciones son herramientas poderosas para controlar el flujo de
ejecución dentro de un bucle.

● Proporcione un ejemplo en el que usaría break en un bucle for.

Supongamos que queremos encontrar el primer número en una lista que sea mayor que 10. Una vez que
lo encontramos, no necesitamos continuar buscando. Podemos usar `break` para salir del bucle en ese
punto.

```

numeros = [5, 8, 12, 3, 15, 7]

for numero in numeros:

if numero > 10:

print(f"El primer número mayor que 10 es: {numero}")

break

60 -
```

En este ejemplo, el bucle `for` itera a través de la lista `numeros`. Cuando encuentra un número mayor
que 10 (en este caso, 12), imprime el mensaje y luego ejecuta la declaración `break`. Esto detiene el bucle
y el programa continúa con la siguiente línea de código después del bucle.

La salida sería:

```

El primer número mayor que 10 es: 12

```

Sin la declaración `break`, el bucle continuaría iterando a través de la lista incluso después de haber
encontrado un número mayor que 10. Sin embargo, gracias a `break`, podemos detener el bucle en el
momento adecuado.

● ¿Cómo usaría continue para saltarse la ejecución de ciertos ítems en una lista durante la iteración?

Puedes usar la declaración `continue` para omitir la ejecución de ciertos ítems en una lista durante la
iteración. Aquí tienes un ejemplo práctico:

Supongamos que queremos imprimir solo los números impares de una lista y saltar los números pares:

```

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for numero in numeros:

if numero % 2 == 0: # Si el número es par

continue

print(numero)

```

En este ejemplo, el bucle `for` itera a través de la lista `numeros`. Para cada número, se verifica si es par
(`numero % 2 == 0`). Si es par, se ejecuta la declaración `continue`, lo que hace que el bucle pase
directamente a la siguiente iteración sin ejecutar el código que sigue después del `if`. Si el número es
impar, se imprime.

La salida sería:

```

```

En este caso, el bucle omite los números pares (2, 4, 6, 8, 10) y solo imprime los números impares. Esto
demuestra cómo `continue` te permite controlar qué elementos procesar durante una iteración.

61 -
Funciones
Función
Una función en Python es un bloque organizado y reutilizable de código que realiza una única acción relacionada.
Las funciones proporcionan modularidad y eficiencia a los programas, permitiendo que ciertas tareas se encapsulen
y se invoquen cuando sea necesario sin repetir código.

Qué tenés que saber:

● ¿Qué es una función en programación y cuál es su propósito principal?

En programación, una función es un bloque de código reutilizable que realiza una tarea específica o un
conjunto de tareas relacionadas. Una función toma ciertos inputs, realiza operaciones en ellos y puede
devolver un resultado como output.

El propósito principal de las funciones es dividir un programa en bloques más pequeños y manejables.

Ejemplo simple de una función en Python que suma dos números:

```

def suma(a, b):

resultado = a + b

return resultado

# Uso de la función

resultado_suma = suma(3, 5)

print(resultado_suma) # Esto imprimirá 8

```

En este ejemplo, la función `suma` toma dos argumentos (`a` y `b`), realiza una operación de suma y luego
devuelve el resultado. Esta función puede ser utilizada en diferentes partes del programa para realizar
sumas sin necesidad de escribir el código de suma repetidamente.

● ¿Por qué es beneficioso usar funciones en un programa?

1. **Reutilización de código**: Una vez que defines una función, puedes usarla en múltiples lugares de tu
programa sin tener que escribir el mismo código una y otra vez.

2. **Organización**: Las funciones permiten organizar el código de manera lógica y modular, lo que hace
que sea más fácil de entender y mantener.

3. **Abstracción**: Las funciones permiten a los programadores utilizar una función sin necesidad de
entender los detalles internos de cómo funciona. Esto facilita el trabajo en equipo y la colaboración.

4. **Facilita la depuración**: Si hay un error en una función, puedes concentrarte en esa función
específica para corregir el problema, en lugar de tener que buscar errores en todo el programa.

5. **Mejora la legibilidad**: Utilizar funciones con nombres descriptivos puede hacer que tu código sea
más legible y comprensible.

6. **Permite dividir problemas complejos**: Puedes dividir un problema grande en problemas más
pequeños y escribir funciones para resolver cada uno de ellos por separado.

62 -
● ¿Cómo se diferencia una función de un método en Python?

En Python, la diferencia principal entre una función y un método radica en cómo se utilizan y a qué se
aplican:

1. **Función**:

- Una función en Python es un bloque de código que realiza una tarea específica. Puede tomar cero o
más argumentos como entrada, procesarlos y devolver un resultado como salida.

- Las funciones en Python pueden ser independientes y no están asociadas a ningún objeto o clase en
particular.

- Se definen utilizando la palabra clave `def` seguida del nombre de la función y la lista de parámetros
entre paréntesis.

**Ejemplo**:

```

def saludar(nombre):

return f"Hola, {nombre}!"

```

2. **Método**:

- Un método en Python es una función que pertenece a un objeto o a una clase. Es una función que
puede acceder y modificar los atributos y datos asociados al objeto.

- Los métodos son invocados en el contexto de un objeto específico y pueden acceder a sus atributos a
través del uso de la palabra clave `self`.

- Se definen dentro de una clase y están asociados a esa clase.

**Ejemplo**:

```

class Persona:

def saludar(self, nombre):

return f"Hola, {nombre}!"

```

En este ejemplo, `saludar` es un método de la clase `Persona`. Puede acceder y modificar los atributos
de la instancia de `Persona` a través de la variable `self`.

En resumen, la diferencia clave es que una función es independiente y no está asociada a ningún objeto o
clase en particular, mientras que un método está definido dentro de una clase y está asociado a instancias
específicas de esa clase. Los métodos se utilizan para definir el comportamiento de los objetos de una
clase, mientras que las funciones pueden realizan tareas independientes sin estar vinculadas a un objeto
específico.

Definición de Función
La definición de una función en Python se realiza utilizando la palabra clave def seguida del nombre de la función y
paréntesis. El código dentro de la función se escribe con una indentación después de los dos puntos (:) que siguen a
la definición.

Qué tenés que saber:

63 -
● ¿Cómo se define una función en Python?

Para definir una función en Python, utiliza la palabra clave `def` seguida del nombre que deseas darle a la
función.

● ¿Qué sigue después de la palabra clave def en la definición de una función?

A continuación, coloca los parámetros de la función entre paréntesis. Si la función no requiere


parámetros, simplemente deja los paréntesis vacíos.

Añade dos puntos (`:`) al final de la línea de definición de la función para indicar el comienzo del bloque de
código de la función.

Escribe el código que quieres que la función ejecute, sangrando con espacios o tabulaciones para indicar
que este código pertenece al cuerpo de la función.

Si la función debe devolver un valor, utiliza la palabra clave `return` seguida del valor que deseas devolver.

● Proporcione un ejemplo simple de la definición de una función.

Aquí tienes un ejemplo de cómo definir una función simple que suma dos números:

```

def suma(a, b):

resultado = a + b

return resultado

```

En este ejemplo, hemos definido una función llamada `suma` que toma dos argumentos (`a` y `b`). El
cuerpo de la función realiza la operación de suma y luego devuelve el resultado.

Invocación de Función
También conocido como Ejecución o Llamado

Una vez que una función ha sido definida, puede ser invocada o llamada por su nombre seguido de paréntesis. Esto
provoca la ejecución del bloque de código dentro de la función.

Qué tenés que saber:

● ¿Cómo se invoca o llama a una función en Python?

Para utilizar la función anterior, puedes llamarla en tu programa de la siguiente manera:

```

resultado_suma = suma(3, 5)

print(resultado_suma) # Esto imprimirá 8

```

Recuerda que las funciones en Python son bloques de código reutilizables que te permiten dividir un
programa en partes más pequeñas y manejables. Puedes llamar una función tantas veces como sea
necesario en tu programa para ejecutar su código

● ¿Qué sucede si intentas llamar a una función antes de definirla?

64 -
Si intentas llamar a una función antes de definirla en tu código, Python generará un error llamado
`NameError`. Esto se debe a que Python evalúa el código en secuencia y cuando encuentra una llamada a
una función, espera que esa función ya esté definida.

Por ejemplo, si intentas llamar a una función `mi_funcion()` antes de definirla, recibirás un error similar a
este:

```

NameError: name 'mi_funcion' is not defined

```

Para resolver este problema, asegúrate de definir la función antes de intentar llamarla en tu programa.
Coloca la definición de la función antes de cualquier lugar en el que la utilices. Esto asegurará que Python
conozca la función antes de intentar ejecutarla.

● ¿Puede una función llamarse a sí misma?

Sí, una función puede llamarse a sí misma. Esto se conoce como "recursión". Una función que se llama a sí
misma se llama una función recursiva.

Para que una función recursiva funcione correctamente, debe tener un caso base, que es una condición
que indica cuándo la función debe dejar de llamarse a sí misma y comenzar a devolver valores. Sin un caso
base, la función recursiva continuaría llamándose a sí misma indefinidamente, lo que llevaría a un error de
desbordamiento de pila (llamado "RecursionError: maximum recursion depth exceeded").

Un ejemplo clásico de una función recursiva es el cálculo del factorial de un número:

```

def factorial(n):

if n == 0:

return 1

else:

return n * factorial(n-1)

```

En este ejemplo, la función `factorial` se llama a sí misma con el argumento `n-1` hasta que `n` alcanza el
caso base de 0, momento en el que la función comienza a devolver valores. Esto ilustra cómo una función
puede utilizar la recursión para resolver problemas que se pueden dividir en casos más pequeños y
manejables.

Parámetro
Los parámetros son valores que se pasan a una función cuando se la invoca. Estos valores se utilizan dentro de la
función para realizar operaciones o manipulaciones. En la definición de la función, los parámetros se especifican
entre los paréntesis y se separan por comas.

Qué tenés que saber:

● ¿Qué son los parámetros en una función y cómo se pasan?

Los parámetros en una función son variables que se utilizan para recibir valores que la función necesita
para llevar a cabo su tarea. Estos valores se proporcionan cuando se llama a la función y se utilizan dentro
del cuerpo de la función para realizar operaciones.

65 -
La definición de una función incluye los nombres de los parámetros entre paréntesis, separados por
comas. Por ejemplo, en la función `suma(a, b)`, `a` y `b` son los parámetros.

Cuando se llama a una función, los valores que se pasan como argumentos se corresponden con los
parámetros en la misma posición. Por ejemplo, si llamamos a `suma(3, 5)`, se asignará 3 a `a` y 5 a `b`.

Un ejemplo más completo sería:

```

def saludar(nombre, saludo):

mensaje = f"{saludo}, {nombre}!"

return mensaje

resultado_saludo = saludar("Juan", "Hola")

```

En este caso, `nombre` y `saludo` son los parámetros de la función `saludar`. Cuando llamamos a
`saludar("Juan", "Hola")`, "Juan" se asigna a `nombre` y "Hola" se asigna a `saludo`.

Es importante recordar que el número de argumentos que se pasen debe coincidir con el número de
parámetros definidos en la función. Si no coinciden, Python generará un error.

Además, los nombres de los parámetros en la definición de la función son locales a esa función. Esto
significa que no afectarán a variables con el mismo nombre en otros lugares del programa.

● ¿Cuál es la diferencia entre parámetros y argumentos?

Los términos "parámetros" y "argumentos" se utilizan en el contexto de funciones y métodos en


programación, y a menudo se utilizan indistintamente, pero tienen significados específicos:

1. **Parámetros**:

- Los parámetros son nombres de variables que se utilizan en la definición de una función o método.

- Los parámetros se encuentran entre paréntesis en la declaración de la función y representan los


valores que la función espera recibir cuando se llama.

- Los parámetros son como marcadores de posición para los valores que se pasarán cuando se llame a la
función.

- Los parámetros son locales a la función, lo que significa que solo son válidos y visibles dentro del
cuerpo de la función.

Ejemplo:

```

def suma(a, b):

resultado = a + b

return resultado

```

En este caso, `a` y `b` son parámetros de la función `suma`.

2. **Argumentos**:

- Los argumentos son los valores reales que se pasan a una función cuando se llama.

- Los argumentos se utilizan para proporcionar valores específicos a los parámetros de la función.

66 -
- Los argumentos se especifican cuando se llama a la función y se corresponden en orden y número con
los parámetros de la función.

Ejemplo:

```

resultado_suma = suma(3, 5)

```

En este caso, 3 y 5 son argumentos que se pasan a la función `suma`, y se corresponden con los
parámetros `a` y `b` respectivamente.

Entonces, en resumen, los parámetros son las variables definidas en la declaración de una función,
mientras que los argumentos son los valores reales que se pasan cuando se llama a la función. Los
argumentos se asignan a los parámetros de acuerdo con su posición en la llamada a la función.

● ¿Cómo se define una función que acepta un número variable de argumentos?

En Python, puedes definir una función que acepte un número variable de argumentos utilizando el
símbolo de asterisco `*` en el nombre del último parámetro. Esto se conoce como "empaquetamiento de
argumentos" o "argumentos arbitrarios".

Hay dos formas comunes de hacer esto:

1. **Argumentos Arbitrarios sin Nombre (Empaquetamiento de Tuplas)**:

Puedes utilizar `*args` para aceptar un número variable de argumentos sin nombre. Esto empaqueta
los argumentos en una tupla.

Ejemplo:

```

def mi_funcion(*args):

for arg in args:

print(arg)

mi_funcion(1, 2, 3, 4)

```

En este ejemplo, `*args` empaqueta los argumentos en una tupla llamada `args`. La función itera sobre
esta tupla e imprime cada elemento.

2. **Argumentos Arbitrarios con Nombre (Empaquetamiento de Diccionarios)**:

Puedes utilizar `**kwargs` para aceptar un número variable de argumentos con nombre. Esto
empaqueta los argumentos en un diccionario.

Ejemplo:

```

def mi_funcion(**kwargs):

for clave, valor in kwargs.items():

print(f"{clave}: {valor}")

mi_funcion(nombre="Juan", edad=30, ciudad="Madrid")

67 -
```

En este ejemplo, `**kwargs` empaqueta los argumentos con nombre en un diccionario llamado
`kwargs`. La función itera sobre este diccionario e imprime cada par clave-valor.

Al utilizar estos símbolos de empaquetamiento (`*args` y `**kwargs`), puedes crear funciones que acepten
un número variable de argumentos sin tener que especificar de antemano cuántos argumentos se
pasarán. Esto es útil cuando no sabes cuántos argumentos se proporcionarán en la llamada a la función.

Retorno
Las funciones en Python pueden devolver un valor al punto desde el cual fueron llamadas utilizando la declaración
return. Esto permite que las funciones produzcan un resultado que puede ser almacenado en una variable o
utilizado de otras maneras en el programa principal.

Qué tenés que saber:

● ¿Cómo devuelve una función un valor en Python?

Una función en Python devuelve un valor utilizando la palabra clave `return`. Cuando se ejecuta una
instrucción `return`, la función detiene su ejecución y devuelve el valor especificado. Esto permite que el
resultado de la función sea utilizado en otras partes del programa.

Por ejemplo, aquí hay una función simple que suma dos números y devuelve el resultado:

```

def suma(a, b):

resultado = a + b

return resultado

```

En este caso, `return resultado` indica que la función debe devolver el valor contenido en la variable
`resultado`.

Para utilizar el valor devuelto por la función, puedes asignarlo a una variable cuando llamas a la función:

```

resultado_suma = suma(3, 5)

print(resultado_suma) # Esto imprimirá 8

```

En este ejemplo, la función `suma(3, 5)` devuelve el resultado de la suma, que es 8. Luego, ese valor se
asigna a la variable `resultado_suma` y se imprime. Es importante recordar que una función puede tener
múltiples instrucciones `return`, pero una vez que se ejecuta una de ellas, la función termina y devuelve el
valor especificado.

● ¿Qué sucede si una función no tiene una declaración return?

Si no hay una instrucción `return` en una función, o si se ejecuta sin un valor después de `return`, la
función devuelve automáticamente `None`.

● ¿Es posible que una función devuelva múltiples valores? Si es así, ¿cómo?

68 -
Sí, es posible que una función devuelva múltiples valores en Python. Esto se logra al separar los valores
que deseas devolver con comas en la instrucción `return`. Los valores devueltos se empaquetarán en una
tupla y se pueden desempaquetar cuando se llama a la función.

Por ejemplo, supongamos que queremos una función que calcule tanto la suma como el producto de dos
números:

```

def operaciones(a, b):

suma = a + b

producto = a * b

return suma, producto

```

En este caso, la función `operaciones` devuelve dos valores: `suma` y `producto`. Cuando llamamos a la
función y almacenamos el resultado, podemos desempaquetar esos valores:

```

resultado_suma, resultado_producto = operaciones(3, 5)

```

Ahora, `resultado_suma` contendrá el valor de la suma (8) y `resultado_producto` contendrá el valor del
producto (15).

También es posible recibir los valores devueltos directamente en una tupla, por ejemplo:

```

resultados = operaciones(3, 5)

```

En este caso, `resultados` será una tupla que contiene los valores de la suma y el producto.

Este mecanismo de devolución de múltiples valores es muy útil en muchas situaciones, ya que permite
que una función proporcione una variedad de resultados útiles.

Variable local
Una variable definida dentro del cuerpo de una función se llama variable local. Esta variable solo existe y es
accesible dentro de esa función. Cuando la función se completa, la variable local se destruye y su memoria se libera.

Qué tenés que saber:

● ¿Qué es una variable local y cuándo se utiliza?

Una variable local en programación es una variable que se declara y se utiliza dentro de un bloque de
código o función y tiene un ámbito (scope) limitado a ese bloque o función específica. Esto significa que la
variable solo es accesible y válida dentro de ese contexto local y no puede ser utilizada fuera de él.

Las variables locales se utilizan para almacenar y manipular datos en un ámbito específico sin interferir
con otras partes del programa. Esto proporciona un nivel de encapsulamiento y evita conflictos de
nombres entre diferentes partes de un programa más grande.

Por ejemplo, en el siguiente código, la variable `nombre` es una variable local dentro de la función
`saludar`:

69 -
```

def saludar():

nombre = "Juan"

print(f"Hola, {nombre}!")

saludar()

```

En este caso, `nombre` solo es válido dentro de la función `saludar`. Si intentamos acceder a `nombre`
fuera de la función, Python generaría un error.

● ¿Qué sucede con una variable local cuando la función se ha completado?

Es importante tener en cuenta que una variable local en una función no es visible ni accesible desde fuera
de esa función. Además, cada vez que se llama a la función, se crea una nueva instancia de la variable
local, por lo que las variables locales en diferentes llamadas a la función no están vinculadas entre sí.

En resumen, una variable local se utiliza para almacenar datos temporalmente dentro de un bloque de
código o función y solo es válida dentro de ese contexto específico. Esto ayuda a organizar y gestionar
datos de manera eficiente en un programa.

● ¿Puede una función acceder a una variable local definida en otra función?

No, una función no puede acceder directamente a una variable local definida en otra función. Las
variables locales tienen un ámbito (scope) limitado al bloque o función en el que fueron definidas, lo que
significa que solo son accesibles dentro de ese contexto específico.

or ejemplo, en el siguiente código:

```

def funcion1():

variable_local = "Hola"

print(variable_local)

def funcion2():

print(variable_local)

funcion1()

funcion2()

```

La función `funcion1` define una variable local llamada `variable_local` y la imprime con éxito. Sin
embargo, cuando intentamos imprimir `variable_local` desde `funcion2`, se generará un error, ya que
`variable_local` no está definida en el ámbito de `funcion2`.

Si necesitas que una función comparta datos con otra, puedes hacerlo pasando esos datos como
argumentos cuando llamas a la función. También puedes utilizar variables globales o devolver valores de
una función y luego usarlos como argumentos para otra función.

Por ejemplo:

```

def funcion1():

variable_local = "Hola"

70 -
return variable_local

def funcion2(valor):

print(valor)

resultado = funcion1()

funcion2(resultado)

```

En este caso, la función `funcion1` devuelve el valor de `variable_local` y luego ese valor se pasa como
argumento a la función `funcion2`. Esto permite que las funciones se comuniquen entre sí sin tener que
acceder directamente a las variables locales de otras funciones.

Variable global
A diferencia de las variables locales, una variable global es una variable que se define en el cuerpo principal del
código Python y no dentro de una función. Es accesible desde cualquier función y mantiene su valor entre llamadas
a funciones.

Qué tenés que saber:

● ¿Qué es una variable global y cómo se diferencia de una variable local?

Una variable global en programación es una variable que se define fuera de cualquier función o bloque de
código y está disponible en todo el programa, incluyendo dentro de funciones y métodos. Esto significa
que su ámbito (scope) es global y puede ser accedida y modificada desde cualquier parte del programa.

Por otro lado, una variable local es una variable que se define dentro de un bloque de código o función y
solo es válida y accesible dentro de ese contexto específico. Su ámbito está limitado al bloque o función
en el que se declaró.

La principal diferencia entre variables globales y locales radica en su ámbito de visibilidad y dónde pueden
ser utilizadas:

- **Variables Globales**:

- Se definen fuera de cualquier función o bloque de código.

- Son accesibles en todo el programa, incluyendo dentro de funciones y métodos.

- Pueden ser utilizadas y modificadas en cualquier parte del programa.

- **Variables Locales**:

- Se definen dentro de un bloque de código o función.

- Solo son válidas y accesibles dentro de ese contexto específico.

- No son visibles desde fuera del bloque o función en el que se declararon.

Es importante tener en cuenta que, si existe una variable local y una variable global con el mismo nombre,
la variable local tiene prioridad dentro del bloque o función en el que fue declarada. Esto significa que la
variable local oculta la variable global con el mismo nombre dentro de ese ámbito específico.

El uso de variables globales y locales permite organizar y gestionar datos de manera eficiente en un
programa, y proporciona un nivel de encapsulamiento que ayuda a evitar conflictos de nombres entre
diferentes partes del código.

● ¿Cuándo es conveniente usar variables globales?

71 -
Es conveniente usar variables globales cuando necesitas que un valor sea accesible y modificado en
diferentes partes de tu programa, o cuando quieres evitar pasar el mismo valor como argumento a
múltiples funciones.

Sin embargo, es importante utilizar variables globales con precaución, ya que su uso excesivo puede hacer
que el código sea menos legible y más difícil de depurar. Además, las variables globales pueden complicar
el rastreo de errores y dificultar la comprensión de cómo interactúan diferentes partes del programa.

Algunos escenarios comunes en los que puede ser conveniente utilizar variables globales son:

1. **Constantes o valores invariables**: Si tienes valores que se utilizan en muchas partes del programa y
no cambian, como por ejemplo configuraciones o parámetros constantes, puedes utilizar variables
globales para evitar tener que repetir esos valores en cada función.

2. **Configuraciones de aplicación**: Configuraciones que afectan el comportamiento general de la


aplicación y que deben ser accesibles en muchos lugares, como la configuración de idioma o el nivel de
depuración.

3. **Cachés o estados compartidos**: En algunos casos, puede ser útil tener una variable global para
almacenar un estado o una caché que debe ser compartida por varias partes del programa.

Es importante tener en cuenta que si decides usar variables globales, es recomendable mantener un
control cuidadoso sobre su uso y documentar claramente su propósito y cómo deben ser utilizadas.
Además, considera si hay alternativas, como el uso de argumentos de función o la organización de tu
código de manera que reduzca la necesidad de variables globales. Esto puede hacer que tu código sea más
modular y fácil de entender.

● ¿Cómo se modifica una variable global desde dentro de una función?

Para modificar una variable global desde dentro de una función en Python, debes indicar explícitamente
que deseas acceder y modificar la variable global utilizando la palabra clave `global` seguida del nombre
de la variable global. De lo contrario, Python creará automáticamente una variable local con el mismo
nombre dentro de la función, lo que no modificará la variable global.

Aquí tienes un ejemplo que muestra cómo modificar una variable global desde dentro de una función:

```

# Variable global

variable_global = 10

def modificar_variable_global():

# Indicar que se usará la variable global

global variable_global

# Modificar la variable global

variable_global = 20

# Llamar a la función para modificar la variable global

modificar_variable_global()

# Imprimir el valor de la variable global después de la modificación

print(variable_global) # Esto imprimirá 20

```

72 -
En este ejemplo, la función `modificar_variable_global` utiliza la palabra clave `global` para indicar que se
modificará la variable global llamada `variable_global`. Después de llamar a esta función, la variable global
se actualiza a 20.

Es importante utilizar la palabra clave `global` con precaución, ya que el uso excesivo de variables globales
puede dificultar la comprensión del flujo de datos en tu programa. En general, se recomienda mantener el
uso de variables globales al mínimo y considerar alternativas, como pasar valores como argumentos de
función cuando sea posible, para mantener un código más claro y modular.

73 -

También podría gustarte