Sesión 3 - Python Básico¶
En esta sección aprenderemos los fundamentos de programación en Python. Python es un lenguaje de programación de alto nivel, interpretado y de propósito general, conocido por su sintaxis clara y legible.
Tipos de Datos Básicos¶
Los tipos de datos son categorías que indican qué clase de información puede almacenar una variable. Python tiene cuatro tipos de datos fundamentales que usaremos con frecuencia.
Enteros (int)¶
Los enteros son números sin parte decimal. Pueden ser positivos, negativos o cero.
edad = 25
temperatura_minima = -5
print(type(edad)) # <class 'int'>
Podemos realizar operaciones matemáticas con enteros, como suma, resta, multiplicación y división.
Números de Punto Flotante (float)¶
Los flotantes representan números con parte decimal. Se utilizan para medidas precisas y cálculos científicos.
altura = 1.75
pi = 3.14159
print(type(pi)) # <class 'float'>
Los flotantes son útiles cuando necesitamos representar valores que no son enteros, como distancias, pesos o porcentajes.
Booleanos (bool)¶
Los booleanos solo pueden tener dos valores: True (verdadero) o False (falso). Son fundamentales para la toma de decisiones en programación.
es_estudiante = True
tiene_mascota = False
print(type(es_estudiante)) # <class 'bool'>
Los valores booleanos son el resultado de expresiones de comparación y se utilizan en estructuras condicionales.
Cadenas de Texto (str)¶
Las cadenas representan texto. Se pueden definir con comillas simples o dobles.
nombre = "Ana"
mensaje = 'Hola, ¿cómo estás?'
print(type(nombre)) # <class 'str'>
Las cadenas pueden contener letras, números, símbolos y espacios. Son muy útiles para almacenar y manipular texto.
Verificación de Tipos¶
Para conocer el tipo de dato de una variable, utilizamos la función type(). Esta función nos devuelve el tipo de dato de la variable o valor que le pasemos como argumento.
Conversión entre Tipos de Datos¶
Python permite convertir datos de un tipo a otro utilizando funciones especializadas. Las conversiones más comunes son:
Conversión a entero (int())¶
La función int() convierte un valor a número entero:
# Convertir float a int (trunca la parte decimal)
x = int(10.8) # x = 10
y = int(3.2) # y = 3
# Convertir string a int
edad = int("25") # edad = 25
# Convertir booleano a int
z = int(True) # z = 1
w = int(False) # w = 0
Es importante notar que al convertir de float a int, Python trunca el número (elimina la parte decimal) en lugar de redondearlo.
Conversión a flotante (float())¶
La función float() convierte un valor a número de punto flotante:
# Convertir int a float
x = float(10) # x = 10.0
# Convertir string a float
peso = float("68.5") # peso = 68.5
# Convertir booleano a float
y = float(True) # y = 1.0
z = float(False) # z = 0.0
Conversión a cadena (str())¶
La función str() convierte cualquier valor a cadena de texto:
# Convertir int a string
edad_texto = str(25) # edad_texto = "25"
# Convertir float a string
altura_texto = str(1.75) # altura_texto = "1.75"
# Convertir booleano a string
respuesta = str(True) # respuesta = "True"
Esto es especialmente útil cuando necesitamos mostrar valores numéricos junto con texto.
Errores comunes en la conversión¶
No todas las conversiones son posibles. Algunos valores no pueden convertirse directamente:
# Esto provocará un error
numero = int("diez") # ValueError: invalid literal for int()
# Esto también provocará un error
valor = int("10.5") # ValueError: invalid literal for int()
Para evitar errores, podemos usar manejo de excepciones (try-except) o asegurarnos de que el valor es válido antes de intentar la conversión.
Operadores¶
Los operadores son símbolos especiales que realizan operaciones con variables y valores. Python tiene diferentes categorías de operadores.
Operadores Aritméticos¶
Estos operadores realizan operaciones matemáticas básicas.
a = 10
b = 3
suma = a + b # 13
resta = a - b # 7
multiplicacion = a * b # 30
division = a / b # 3.3333333333333335 (siempre devuelve float)
La división normal (/) siempre devuelve un número de punto flotante, incluso si la división es exacta.
division_entera = a // b # 3 (división entera, descarta la parte decimal)
modulo = a % b # 1 (residuo de la división)
potencia = a ** b # 1000 (a elevado a la b)
La división entera (//) descarta la parte decimal y devuelve solo la parte entera. El operador módulo (%) devuelve el residuo de la división.
Operadores de Comparación¶
Estos operadores comparan dos valores y devuelven un valor booleano (True o False).
x = 5
y = 10
igual = x == y # False
diferente = x != y # True
mayor = x > y # False
menor = x < y # True
Los operadores de comparación son fundamentales para las estructuras condicionales, ya que permiten tomar decisiones basadas en comparaciones.
mayor_igual = x >= y # False
menor_igual = x <= y # True
Los operadores >= y <= verifican si un valor es mayor o igual, o menor o igual que otro valor, respectivamente.
Operadores Lógicos¶
Los operadores lógicos combinan valores booleanos y devuelven un resultado booleano.
p = True
q = False
y_logico = p and q # False (ambas deben ser True)
o_logico = p or q # True (al menos una debe ser True)
negacion = not p # False (invierte el valor)
El operador and devuelve True solo si ambos operandos son True. El operador or devuelve True si al menos uno de los operandos es True. El operador not invierte el valor booleano.
Funciones de Entrada/Salida¶
Para interactuar con el usuario, necesitamos funciones que nos permitan mostrar información y recibir datos.
Salida de datos con print()¶
La función print() muestra información en la consola. Es una de las funciones más utilizadas para depurar y mostrar resultados.
print("Hola, mundo!")
Podemos mostrar múltiples valores separándolos con comas:
nombre = "Carlos"
edad = 22
print("Nombre:", nombre, "Edad:", edad)
También podemos formatear cadenas para incluir variables de manera más elegante:
# Formateo de cadenas con f-strings (Python 3.6+)
print(f"Hola, me llamo {nombre} y tengo {edad} años.")
Los f-strings (cadenas formateadas) permiten incluir el valor de variables directamente dentro de una cadena, haciendo que el código sea más legible.
Entrada de datos con input()¶
La función input() permite recibir datos del usuario a través del teclado. Siempre devuelve una cadena de texto.
nombre = input("Ingrese su nombre: ")
print(f"Hola, {nombre}!")
Como input() siempre devuelve una cadena, necesitamos convertir el valor a otro tipo si queremos realizar operaciones específicas:
# input() siempre devuelve un string, hay que convertir a otros tipos
edad_str = input("Ingrese su edad: ")
edad = int(edad_str) # Convertimos a entero
Podemos combinar la lectura y conversión en una sola línea:
# También podemos combinar ambos pasos
altura = float(input("Ingrese su altura en metros: "))
Las funciones int() y float() convierten cadenas a enteros y flotantes, respectivamente.
Estructuras de Control¶
Las estructuras de control determinan el flujo de ejecución de un programa. Permiten tomar decisiones y repetir acciones.
Nota
Bloques de código e indentación en Python
Python utiliza la indentación (espacios al inicio de una línea) para definir bloques de código. A diferencia de otros lenguajes que usan llaves {} o palabras clave, Python se basa en la indentación para determinar dónde comienza y termina un bloque.
Un bloque de código es un conjunto de instrucciones que se ejecutan como una unidad. Los bloques se utilizan en estructuras condicionales, bucles y funciones.
Los dos puntos (:) indican que comenzará un nuevo bloque de código indentado:
if condicion: # Los dos puntos indican que viene un bloque indentado
# Este bloque pertenece al if
instruccion1
instruccion2
# Esta línea ya no pertenece al bloque del if
La convención en Python es usar 4 espacios para cada nivel de indentación. Un error común de principiantes es mezclar espacios y tabulaciones, lo que puede causar errores difíciles de detectar.
Siempre que veas los dos puntos (:) al final de una línea, el código que sigue debe estar indentado para indicar que forma parte de ese bloque.
Condicionales (if, elif, else)¶
Las estructuras condicionales permiten ejecutar diferentes bloques de código según se cumplan o no ciertas condiciones.
Estructura if simple¶
La estructura if ejecuta un bloque de código solo si la condición es verdadera.
edad = 18
if edad >= 18:
print("Eres mayor de edad")
Si la condición es falsa, el bloque de código dentro del if no se ejecuta y el programa continúa con la siguiente instrucción fuera del bloque.
![digraph if_simple {
node [shape=box, style=rounded];
start [shape=oval, label="Inicio"];
condition [shape=diamond, label="¿edad >= 18?"];
action [label="Mostrar: Eres mayor de edad"];
end [shape=oval, label="Fin"];
start -> condition;
condition -> action [label="Sí"];
condition -> end [label="No"];
action -> end;
}](../../_images/graphviz-3de06d85883fe6fb2f2cef29eb559a1a0e58602b.png)
Estructura if-else¶
La estructura if-else permite ejecutar un bloque de código si la condición es verdadera, o un bloque alternativo si es falsa.
edad = 15
if edad >= 18:
print("Eres mayor de edad")
else:
print("Eres menor de edad")
Esta estructura garantiza que siempre se ejecutará uno de los dos bloques, dependiendo del resultado de la condición.
![digraph if_else {
node [shape=box, style=rounded];
start [shape=oval, label="Inicio"];
condition [shape=diamond, label="¿edad >= 18?"];
action_true [label="Mostrar: Eres mayor de edad"];
action_false [label="Mostrar: Eres menor de edad"];
end [shape=oval, label="Fin"];
start -> condition;
condition -> action_true [label="Sí"];
condition -> action_false [label="No"];
action_true -> end;
action_false -> end;
}](../../_images/graphviz-934a600bad5b5dec07a126aeaf40a349f42f6a00.png)
Estructura if-elif-else¶
La estructura if-elif-else permite evaluar múltiples condiciones en secuencia. Se utiliza cuando hay más de dos posibles caminos de ejecución.
nota = 85
if nota >= 90:
print("Excelente")
elif nota >= 80:
print("Muy bien")
elif nota >= 70:
print("Bien")
elif nota >= 60:
print("Suficiente")
else:
print("Reprobado")
Python evalúa las condiciones en orden. En cuanto encuentra una condición verdadera, ejecuta el bloque correspondiente y omite el resto. Si ninguna condición es verdadera, ejecuta el bloque else.
![digraph if_elif_else {
node [shape=box, style=rounded];
start [shape=oval, label="Inicio"];
cond1 [shape=diamond, label="¿nota >= 90?"];
cond2 [shape=diamond, label="¿nota >= 80?"];
cond3 [shape=diamond, label="¿nota >= 70?"];
cond4 [shape=diamond, label="¿nota >= 60?"];
action1 [label="Mostrar: Excelente"];
action2 [label="Mostrar: Muy bien"];
action3 [label="Mostrar: Bien"];
action4 [label="Mostrar: Suficiente"];
action5 [label="Mostrar: Reprobado"];
end [shape=oval, label="Fin"];
start -> cond1;
cond1 -> action1 [label="Sí"];
cond1 -> cond2 [label="No"];
cond2 -> action2 [label="Sí"];
cond2 -> cond3 [label="No"];
cond3 -> action3 [label="Sí"];
cond3 -> cond4 [label="No"];
cond4 -> action4 [label="Sí"];
cond4 -> action5 [label="No"];
action1 -> end;
action2 -> end;
action3 -> end;
action4 -> end;
action5 -> end;
}](../../_images/graphviz-780a619ca8536fc2eb04ae6da8b2652bc4987b36.png)
Bucles en Python¶
Los bucles permiten repetir un bloque de código múltiples veces. Son útiles para procesar listas, realizar cálculos iterativos o repetir acciones hasta que se cumpla una condición.
El bucle while¶
El bucle while ejecuta un bloque de código mientras una condición sea verdadera. Es útil cuando no sabemos exactamente cuántas veces necesitamos repetir el código.
contador = 1
while contador <= 5:
print(f"Contador: {contador}")
contador += 1 # Equivalente a: contador = contador + 1
Es crucial modificar la variable de control dentro del bucle (en este caso, incrementar el contador) para que eventualmente la condición se vuelva falsa. De lo contrario, se creará un bucle infinito.
![digraph while_loop {
node [shape=box, style=rounded];
start [shape=oval, label="Inicio"];
init [label="contador = 1"];
condition [shape=diamond, label="¿contador <= 5?"];
action [label="Mostrar contador\ncontador += 1"];
end [shape=oval, label="Fin"];
start -> init;
init -> condition;
condition -> action [label="Sí"];
action -> condition;
condition -> end [label="No"];
}](../../_images/graphviz-df98dadacd94e611246cb94c412bdbd00abdb244.png)
El flujo de un bucle while es: evalúa la condición; si es verdadera, ejecuta el bloque de código y vuelve a evaluar la condición; si es falsa, sale del bucle y continúa con el resto del programa.
El bucle for con range()¶
El bucle for con la función range() es ideal cuando sabemos exactamente cuántas veces queremos repetir un bloque de código. Es especialmente útil para recorrer secuencias de números.
# Imprime números del 0 al 4
for i in range(5):
print(i)
La función range(n) genera una secuencia de números desde 0 hasta n-1. También podemos especificar el valor inicial, final y el paso:
# Imprime números del 1 al 5
for i in range(1, 6):
print(i)
El rango range(1, 6) genera números del 1 al 5. El primer parámetro es inclusivo, mientras que el segundo es exclusivo.
# Imprime números pares del 0 al 10
for i in range(0, 11, 2):
print(i)
El tercer parámetro de range() indica el paso o incremento. En este ejemplo, generamos números de 2 en 2, obteniendo los números pares entre 0 y 10.
Ejemplos de Uso¶
A continuación veremos algunos ejemplos prácticos que combinan los conceptos aprendidos.
Clasificación de un número¶
Este programa clasifica un número ingresado por el usuario como positivo, negativo o cero:
numero = int(input("Ingrese un número: "))
if numero > 0:
print("El número es positivo")
elif numero < 0:
print("El número es negativo")
else:
print("El número es cero")
Utilizamos la estructura if-elif-else para cubrir todas las posibilidades (mayor que cero, menor que cero, o igual a cero).
Conversor de unidades¶
Este programa convierte entre diferentes unidades según la elección del usuario:
print("Conversor de unidades")
print("1. Kilómetros a Millas")
print("2. Millas a Kilómetros")
print("3. Celsius a Fahrenheit")
print("4. Fahrenheit a Celsius")
opcion = int(input("Elija una opción (1-4): "))
Primero mostramos un menú y leemos la opción del usuario. Luego, según la opción elegida, solicitamos los datos necesarios y realizamos la conversión correspondiente:
if opcion == 1:
km = float(input("Ingrese la distancia en kilómetros: "))
millas = km * 0.621371
print(f"{km} kilómetros equivalen a {millas} millas")
elif opcion == 2:
millas = float(input("Ingrese la distancia en millas: "))
km = millas / 0.621371
print(f"{millas} millas equivalen a {km} kilómetros")
elif opcion == 3:
celsius = float(input("Ingrese la temperatura en Celsius: "))
fahrenheit = (celsius * 9/5) + 32
print(f"{celsius}°C equivalen a {fahrenheit}°F")
elif opcion == 4:
fahrenheit = float(input("Ingrese la temperatura en Fahrenheit: "))
celsius = (fahrenheit - 32) * 5/9
print(f"{fahrenheit}°F equivalen a {celsius}°C")
else:
print("Opción no válida")
Este ejemplo muestra cómo combinar entrada de usuario, condicionales y operaciones matemáticas para crear un programa útil.
Sumatoria con bucle while¶
Este programa calcula la suma de los números del 1 al 10 utilizando un bucle while:
# Sumatoria de los números del 1 al 10
suma = 0
contador = 1
while contador <= 10:
suma += contador
contador += 1
print(f"La suma de los números del 1 al 10 es: {suma}")
Inicializamos una variable suma en 0 y un contador en 1. En cada iteración del bucle, añadimos el valor actual del contador a la suma y luego incrementamos el contador. El bucle termina cuando el contador supera 10.
Conclusión¶
En esta introducción hemos cubierto los conceptos básicos de Python:
Tipos de datos (int, float, bool, str): las categorías fundamentales para almacenar información.
Conversión entre tipos de datos: mecanismos para transformar valores de un tipo a otro.
Operadores (aritméticos, comparación, lógicos): símbolos que nos permiten manipular y comparar datos.
Funciones de entrada/salida (input, print): herramientas esenciales para la interacción con el usuario.
Estructuras de control (if, elif, else): mecanismos para tomar decisiones en nuestros programas.
Bucles (while, for con range): técnicas para repetir acciones múltiples veces.
Estos conceptos son los cimientos sobre los que construiremos programas más complejos a lo largo del curso. En las próximas sesiones, profundizaremos en estos temas y aprenderemos nuevas técnicas de programación.