3. Programas
Podemos definir un programa como un conjunto de sentencias, donde cada sentencia representa una declaración o instrucción específica que debe cumplirse. Sin embargo, para que estas sentencias puedan ser ejecutadas correctamente por el computador, es fundamental que estén bien definidas.
En el caso de Python y otros lenguajes de programación, cada línea de código escrita representa una sentencia, y su correcta definición depende de la sintaxis establecida por el lenguaje. La sintaxis es un conjunto de reglas que determina cómo debe ser escrito un programa. Si no se cumple con las reglas sintácticas, el programa será considerado incorrecto y generará un error, impidiendo su ejecución.
Por lo tanto, es crucial asegurarse de seguir la sintaxis correcta del lenguaje de programación que se esté utilizando, para que el programa pueda ser interpretado y ejecutado sin problemas.
En la programación, existen diferentes tipos de sentencias. Algunas son simples y representan una única instrucción, como el ejemplo de hola_mundo, que se ejecutan secuencialmente. Sin embargo, también existen estructuras de control que agrupan varias sentencias, las cuales pueden ser simples o de control.
Las estructuras de control permiten modificar el flujo de ejecución del programa. Por ejemplo, las estructuras de condiciones (como los if y else) permiten realizar diferentes acciones en función de una condición específica. Por otro lado, las estructuras repetitivas (como los bucles for y while) permiten ejecutar un conjunto de sentencias varias veces.
Estas estructuras de control proporcionan flexibilidad y permiten que los programas realicen tareas más complejas al controlar el flujo de ejecución de las sentencias. Al combinar sentencias simples y estructuras de control, se pueden construir programas más avanzados y funcionales.
A continuación, consideremos el siguiente programa como ejemplo: se le solicita al usuario que ingrese dos números y el programa devuelve la suma de estos:
#!/usr/bin/env python3
# -*- coding:utf-8 *-*
# Ingresa valores el usuario
numero1 = input("Ingrese un numero: ")
numero2 = input("Ingrese otro numero: ")
# Convierte de string a numero entero y realiza operación
numero1 = int(numero1)
numero2 = int(numero2)
suma = numero1 + numero2
# Muestra resultado
print("La suma de los numeros ingresados es: ", suma)
En el programa anterior, se pueden identificar tres grupos de sentencias que cumplen diferentes objetivos:
El primer grupo, compuesto por dos sentencias, se encarga de solicitar al usuario que ingrese los dos números que se sumarán (input). Estas sentencias son esenciales para obtener los valores necesarios para realizar la operación matemática.
El segundo grupo, formado por tres sentencias, se encarga del procesamiento de los valores ingresados por el usuario. Se convierte estos valores de texto a números enteros mediante la función int(), y la tercera sentencia suma los valores convertidos.
El tercer grupo, conformado por una sola sentencia, se encarga de mostrar al usuario el resultado de la operación matemática realizada (print).
Es importante destacar que las dos primeras sentencias del programa son necesarias para garantizar que los valores ingresados por el usuario sean interpretados correctamente como números enteros. Esto se debe a que, por defecto, la función input() devuelve una cadena de caracteres (texto), y para realizar operaciones matemáticas es necesario que los valores ingresados sean de tipo numérico. Al utilizar la función int() para convertir los valores ingresados de texto a números enteros, nos aseguramos de que se puedan realizar operaciones matemáticas válidas con ellos.
3.1. Tipos de datos básicos
Todos los lenguajes de programación modernos utilizan tipos de datos como una forma de almacenar y clasificar información según su naturaleza. Python, al igual que muchos otros lenguajes, también hace uso de tipos de datos estándar para manejar diferentes tipos de información.
En Python, se encuentran disponibles varios tipos de datos estándar, que se pueden agrupar en las siguientes categorías:
Tipos numéricos: Estos tipos de datos se utilizan para representar valores numéricos, como enteros (int) y números de punto flotante (float), que son utilizados en operaciones matemáticas y cálculos.
Tipos de texto: Estos tipos de datos se utilizan para representar cadenas de texto, como palabras, frases y caracteres individuales. El tipo de dato principal para manejar texto en Python es str (cadena de caracteres).
Tipos lógicos: Estos tipos de datos se utilizan para representar valores de verdad, es decir, valores booleanos que pueden ser True (verdadero) o False (falso). El tipo de dato utilizado para esto es bool.
Tipo nulo: Existe un tipo de dato especial llamado None, que se utiliza para representar la ausencia de valor o la falta de información. Se utiliza cuando una variable no tiene un valor asignado.
Estos son algunos ejemplos de los tipos de datos estándar que se utilizan en Python, y cada uno tiene sus propias características y funcionalidades para manejar diferentes tipos de información en un programa.
3.1.1. Tipos numéricos
Los tipos de datos numéricos en Python se utilizan para almacenar valores numéricos y se dividen en las siguientes categorías:
int
(números enteros): Este tipo de dato se utiliza para representar números enteros, como -5, 0 y 10. A diferencia de otros lenguajes de programación, en Python no existe una subclasificación para los números enteros, como "int" y "long". El tipo "int" en Python puede representar todo el conjunto de números enteros de forma infinita, siendo el límite la capacidad de memoria disponible en el sistema.
float
(números reales): Este tipo de dato se utiliza para representar números reales o de punto flotante, como 3.14, -0.5 y 1.0. Los números de punto flotante en Python siguen el estándar de representación IEEE 754 y permiten representar tanto números fraccionarios como números con parte decimal.
complex
(números complejos): Este tipo de dato se utiliza para representar números complejos, que constan de una parte real y una parte imaginaria. Los números complejos en Python se representan en la forma "a + bj", donde "a" es la parte real y "b" es la parte imaginaria.
Es importante destacar que en Python no hay una limitación en el rango de valores para el tipo de dato "int". Este tipo puede representar números enteros de forma infinita, siempre y cuando la memoria disponible lo permita. Esto significa que no hay un límite predefinido como en otros lenguajes de programación, donde se utilizan tipos diferentes para representar enteros de mayor tamaño.
# números enteros
entero = 10 + 1
entero = -11
# número real
real = 11.12
# números complejos
complejo = 3 + 9j
complejo = -1.4 + 2.7j
3.1.2. Tipo Texto
Las frases o palabras se almacenan en Python como cadenas de texto, que se representan entre comillas simples o dobles. En Python, no importa si se utilizan comillas simples o dobles, ya que ambos tipos de comillas son equivalentes y pueden usarse indistintamente para delimitar una cadena de texto.
A diferencia de otros lenguajes de programación, en Python no existe una subclasificación para caracteres individuales (como el tipo "char" en otros lenguajes) y cadenas de caracteres (como el tipo "string"). En Python, cualquier valor encerrado entre comillas se considera una cadena de texto y el tipo de dato que lo representa es siempre "str" (cadena de caracteres).
Esto significa que, en Python, el tipo "str" es utilizado tanto para almacenar cadenas de texto de una sola letra como para almacenar cadenas más largas. No hay una distinción especial para caracteres individuales en términos de tipos de datos.
Ejemplo
"Hola Mundo" == 'Hola Mundo'
Ambas sentencias son iguales, por lo tanto, esta comparación es verdadera (True). Como se explicó anteriormente, Python acepta tanto comillas simples como comillas dobles para representar cadenas de texto.
Es importante tener en cuenta que los strings en Python no siempre son visualizados de la misma manera en la salida, ya que pueden tener caracteres especiales o formatos específicos. Sin embargo, lo que determina principalmente la igualdad de dos strings es su contenido y tipo de dato subyacente, no necesariamente su representación visual.
Ejemplo
5 == '5'
La comparación entre los valores "5" y 5 es falsa ya que son de tipos distintos, uno es un número entero (int) y el otro es una cadena de caracteres (str). Es importante tener en cuenta el tipo de dato de los valores que se comparan para evitar errores en el código.
Por último, es importante tener en cuenta que las cadenas de texto en Python hacen diferencia entre mayúsculas y minúsculas, lo que significa que una letra en mayúscula y la misma letra en minúscula se consideran distintas. Por ejemplo, "Hola" y "hola" serían tratadas como cadenas diferentes.
Además, las cadenas de texto también hacen diferencia en los espacios. Por ejemplo, "hola mundo" y "holamundo" también se considerarían distintas.
Es importante tener en cuenta estas diferencias al realizar comparaciones o búsquedas en cadenas de texto para asegurarse de obtener los resultados esperados.
'hola Mundo' == 'Hola Mundo'
"Auto" == "auto"
Para ambas sentencias de comparación los resultados son distintos, por lo que para ambas el resultado Falso.
3.1.3. Valores Lógicos
Los valores lógicos "True" y "False" en Python representan los estados de verdadero y falso, respectivamente. Estos valores pertenecen al tipo de dato booleano, también conocido como bool. El tipo booleano en Python es utilizado para evaluar condiciones y controlar el flujo de ejecución en programas, ya que solo puede tener dos posibles valores: verdadero o falso.
a = True
b = False
En Python, los valores "True" y "False" son sensibles a la sintaxis y deben ser declarados siempre con la primera letra en mayúscula ("True" y "False"). Si se escriben con la primera letra en minúscula, se considerarán identificadores normales y podrían generar un error de ejecución.
3.1.4. Valor Nulo
Existe un valor especial en Python conocido como "None" (ninguno), el cual se utiliza comúnmente para representar casos en los que no hay un valor válido o para inicializar variables sin asignarles un valor específico.
El valor "None" tiene su propio tipo de dato llamado "NoneType", que es único y diferente a los demás tipos de datos. Este tipo de dato representa la ausencia de valor o la falta de algo. En términos técnicos, "None" puede considerarse como una representación de la nada. Es importante tener en cuenta que "None" no es lo mismo que una cadena vacía ("") o el valor numérico cero (0), ya que estos aún son valores válidos dentro de sus respectivos tipos de datos.
a = None
En otros lenguajes de programación, existe el tipo de dato "null" que sería equivalente al valor "None" en Python. La elección de utilizar "None" en Python se basa en dos razones:
1. Los desarrolladores de Python consideran que la palabra "null" no es amigable para los principiantes en programación. "None" se refiere de manera precisa a la funcionalidad prevista, que es la ausencia de valor y la falta de comportamiento.
2. En la mayoría de los lenguajes orientados a objetos, los nombres de los objetos suelen seguir una convención de usar mayúscula inicial, por ejemplo, "ThisIsMyObject". En capítulos posteriores, verá que el tipo "None" en Python es un objeto y se comporta como tal, con la diferencia de que es de solo lectura.
3.2. Expresiones
Una expresión es una combinación de valores y operaciones que se evalúa durante la ejecución de un algoritmo para obtener un resultado.
Por ejemplo, si tenemos la expresión 2 + 3, esta sería una expresión aritmética que siempre dará como resultado el valor 5. En esta expresión, "2" y "3" son valores literales, y el signo "+" es el operador que realiza la operación de adición.
Ejemplo
numero1 = int(input("Ingrese un número"))
numero2 = int(input("Ingrese un número"))
suma = numero1 + numero2
print(suma)
num1 = 2
num2 = 3
suma = num1 + num2
print(suma)
En el ejemplo, se realiza la operación "numero1 + numero2", donde los valores de "numero1" y "numero2" son proporcionados por el usuario y se almacenan en las variables como números enteros. La variable "suma" contendrá el resultado de la operación, que puede variar en cada ejecución según los valores ingresados por el usuario.
A diferencia de los valores literales (num1=2 y num2=3), las variables "numero1" y "numero2" contienen valores específicos que pueden cambiar en cada ejecución. Esto permite obtener resultados diferentes en función de los valores asignados a las variables.
En ambos casos, la expresión es la misma (adición), pero los valores a los que se aplica la operación son distintos: valores variables en el primer caso y valores literales en el segundo caso.
3.3. Variables
Las variables en los lenguajes de programación son espacios de memoria reservados para almacenar valores que pueden cambiar durante la ejecución del programa. Al crear o definir una variable, se asigna un espacio en la memoria para almacenar su valor, lo que permite interactuar con ella en el programa.
En Python, a diferencia de otros lenguajes de programación, no es necesario declarar explícitamente una variable ni especificar su tipo. Simplemente se utiliza el signo igual "=" para asignar un valor a una variable. Python es un lenguaje de tipado dinámico, lo que significa que el tipo de dato de una variable se determina automáticamente según el valor que se le asigna. Esto brinda flexibilidad y simplifica la escritura de código al no requerir declaraciones de tipo adicionales.
Ejemplos
hola = "Hola Mundo"
suma = 2 + 4
Se puede observar que a las variables hola y suma se les asigna un valor utilizando el operador de asignación "=".
En el caso de la variable hola, se asigna el texto 'Hola Mundo' como su valor. Esto significa que cuando se haga referencia a la variable "hola" posteriormente en el programa, se utilizará el valor 'Hola Mundo'.
En el caso de la variable suma, se realiza una operación matemática utilizando el operador "+".
Es importante destacar que es posible realizar operaciones que incluyan la misma variable que se está utilizando, lo cual es válido en Python. Por ejemplo, se puede hacer algo como "x = x + 1" para incrementar el valor de la variable "x" en 1. Esto actualiza el valor de la variable utilizando su valor anterior como parte de la operación.
x = 10
x = x + 1
En este caso específico, si el valor inicial de x es 10, la expresión x = x + 1 indica que se debe tomar el valor actual de x (que es 10), sumarle 1 y luego asignar ese nuevo valor a x. Entonces, la operación x = x + 1 se traduce en x = 10 + 1, que a su vez resulta en x = 11. Después de ejecutar esta línea de código, el valor de x se actualiza a 11.
En Python, a diferencia de otros lenguajes de programación que requieren una declaración explícita del tipo de dato de una variable, las variables no tienen un tipo de dato definido de forma imperativa. Esto significa que las variables en Python son "promiscuas" en cuanto a su tipo de dato. Pueden cambiar de tipo durante la ejecución del programa, lo que puede ser tanto una ventaja como una desventaja para el programador.
Por un lado, la flexibilidad de las variables en Python permite una programación más ágil y menos restrictiva, ya que no es necesario especificar el tipo de dato al crear una variable. Esto puede ahorrar tiempo y esfuerzo al escribir código, especialmente en programas pequeños o en prototipos.
Sin embargo, esta flexibilidad también implica una mayor responsabilidad para el programador. Como las variables pueden cambiar de tipo, es importante estar atento a cómo se utilizan y asegurarse de que su tipo sea coherente con las operaciones que se realizan sobre ellas. Si no se manejan correctamente, los cambios inesperados en el tipo de dato de una variable pueden llevar a errores difíciles de depurar.
Ejemplo
variable = 10
variable = "Hola Mundo"
En el ejemplo se puede observar que la variable "variable" se declara inicialmente como un entero (int) y luego se vuelve a asignar como una cadena de texto (str). En Python, este tipo de reasignación de variables es completamente válido y el valor final de la variable será el último valor asignado.
3.4. Entrada
Cuando deseamos que un usuario ingrese datos en nuestros programas a través de un dispositivo de entrada como un teclado, se le denomina entrada. En Python, podemos utilizar la función "input()" para obtener la entrada de datos. Esta función captura lo que el usuario ha ingresado y lo devuelve como una cadena de texto (str), que luego puede ser asignada a una variable.
Es importante tener en cuenta que el valor ingresado por el usuario siempre se considera como texto, es decir, se trata como una cadena de caracteres. Si se desea utilizar este valor como otro tipo de dato, es necesario realizar una conversión explícita. A esta conversión de tipo se le llama "casting" o "CAST".
Por ejemplo, si el usuario ingresa un número como texto y se desea utilizarlo como un valor numérico, se puede utilizar las funciones de conversión de tipos como "int()" o "float()" para convertir el texto en un entero o un número decimal, respectivamente.
Ejemplo:
numero = int(input("Ingrese un número"))
En el caso mencionado, la variable numero inicialmente recibe un valor como texto mediante la función "input()". Sin embargo, al utilizar el método "int()", se intenta convertir esa cadena de caracteres en un número entero para que pueda ser tratada como tal y asignada a la variable "numero".
Para conocer el tipo de datos de una variable en Python, podemos utilizar la función "type()" y mostrarlo como resultado. Esto nos proporcionará información sobre el tipo de dato actual de la variable.
Ejemplo:
numero = input("Ingrese un número: ")
numero = int(numero)
print(type(numero))
Este código solicitará al usuario que ingrese un número, lo convertirá en un entero utilizando "int()", y luego mostrará el tipo de dato de la variable "numero" utilizando "type()".
Es importante tener en cuenta que si el usuario ingresa un valor no numérico, la conversión a entero generará un error. Por lo tanto, se debe manejar adecuadamente la validación de entrada para garantizar que se ingresen valores apropiados antes de realizar cualquier conversión de tipo.
3.5. Salida
Le llamaremos salida a todo lo que queramos mostrar al usuario por un dispositivo o medio de salida como puede ser un monitor o una terminal en linea.
La forma más sencilla de mostrar valores en la pantalla es utilizando la función "print()" en Python. Dentro de los paréntesis de la función, colocamos los valores que deseamos mostrar, separados por comas si hay más de uno.
Ejemplo
numero = 10
print(numero)
La salida esperada sería el número 10.
Si los valores a imprimir son varios, estos pueden ser puestos por comas.
Ejemplo
numero = 10
print("El numero es:", numero)
En este caso, se está imprimiendo el mensaje 'El número es:' y a continuación, en la misma línea, el valor de la variable numero. Por lo tanto, la salida esperada sería:
El numero es: 10
Las comillas en el código se utilizan para representar un "string", pero al imprimir el valor de una variable con la función "print()", las comillas no se mostrarán en la salida. Por lo tanto, en la salida esperada no se incluirán las comillas alrededor del valor de la variable.
Es importante destacar que la función "print()" es extremadamente versátil y puede mostrar resultados para prácticamente cualquier elemento que tengamos en nuestro programa, ya sean variables, objetos, funciones u otros. Esto la convierte en una herramienta muy útil para mostrar información al usuario. Simplemente escribiendo el elemento que deseamos mostrar entre los paréntesis de la función "print()", obtendremos una respuesta para ese elemento en la salida. Sin embargo, es importante tener en cuenta que aunque puede ser útil, no se recomienda su uso para la depuración, ya que existen herramientas más adecuadas para ese propósito.
3.6. Comentarios
Un comentario es una sección del código que el intérprete del lenguaje ignora por completo durante la ejecución. Los comentarios son utilizados por los programadores para agregar notas o mensajes en el código que pueden ser útiles para ellos mismos o para otras personas que lean el código en el futuro.
En Python, cualquier texto que aparezca a la derecha del símbolo "#" es considerado un comentario y no tiene ningún efecto en la ejecución del programa.
# 10 es el valor por defecto
numero = 10
# esto es una suma
suma = numero + 10
Cuidado, puesto a que esto no contempla a los string.
print("Hola # Mundo")
La salida será
Hola # Mundo
Existe una forma de incluir comentarios más extensos o que abarquen varias líneas en Python. Se utiliza la técnica llamada docstring, que está definida en la PEP 257 (Python Enhancement Proposal 257).
Para utilizar docstrings, se emplean triple comillas (""" o ''') al inicio y al final del comentario. Esto permite escribir comentarios de varias líneas sin necesidad de agregar el símbolo "#" en cada línea.
El propósito principal de los docstrings es documentar funciones, clases y módulos en Python, proporcionando información detallada sobre su uso y funcionalidad. Estos comentarios son especialmente útiles para generar documentación automática y permiten que otros programadores entiendan rápidamente cómo utilizar el código.
Ejemplo
""" Este es un ejemplo
del uso de docstring
en python """
Esta parte del programa se omitirá durante su ejecución, ya que es un comentario dentro del código.
La técnica de utilizar comentarios es útil y elegante para describir procedimientos o procesos complejos y mantenerlos disponibles en el código fuente. Los comentarios permiten una descripción más precisa de la rutina y facilitan la comprensión del código para los programadores que lo lean en el futuro.