Python es un lenguaje de programación popular y multifuncional con una sintaxis simple, adecuado para principiantes. Se utiliza en diversas áreas, desde el aprendizaje automático hasta la creación de bots de Telegram. En este artículo, veremos el proceso de escritura del código de una calculadora simple en Python paso a paso.
Funciones de la Calculadora
La calculadora creada tendrá todas las funciones aritméticas básicas:
- suma;
- resta;
- multiplicación;
- división.
Además, la calculadora incluirá funciones avanzadas:
- cálculo del porcentaje de un número;
- potenciación de un número;
- logaritmo de un número.
Por ejemplo, el programa podrá realizar los siguientes cálculos:
20 + 30 = 50;
40 - 8 = 32;
9 * 5 = 45;
25 / 5 = 5.
Después de definir las funciones del programa, se puede proceder a escribir el código.
Visualización del resultado en el código
Para mostrar texto y resultados, utilizaremos la función print()
.
Como ejemplo, se puede escribir en la consola un texto arbitrario:
print('¡Creando una calculadora en Python!')
Resultado:
¡Creando una calculadora en Python!
print(795)
Resultado:
795
Trabajo con Variables
De manera similar al ejemplo anterior, veamos un escenario donde se guarda el resultado en una variable.
Esto permitirá realizar cálculos:
resultado = 7 * 6
print(resultado)
Resultado:
42
Procesamiento de Entrada de Datos
Pasemos a trabajar con la entrada del usuario. El procesamiento de la entrada en Python se realiza con la función input()
, que permite escribir una cadena de sugerencia para el usuario. Esta función toma en cuenta la información ingresada hasta que se presiona la tecla Enter.
Veamos dos resultados con el ejemplo de nombre y apellido, uno sin la cadena de sugerencia y otro con ella.
nombre = input() #Iván
apellido = input() #Pérez
print('Tu nombre y apellido son:')
print(nombre)
print(apellido)
Resultado:
Iván
Pérez
Tu nombre y apellido son:
Iván
Pérez
Si en el programa hay muchos datos de entrada, el argumento de cadena en input()
ayuda al usuario a entender qué información debe escribir.
En la práctica, el ejemplo con la entrada se ve de la siguiente manera:
nombre = input('Indica tu nombre: ') #Iván
apellido = input('Indica tu apellido: ') #Pérez
print('Tu nombre y apellido son: ')
print(nombre)
print(apellido)
Resultado:
Indica tu nombre: Iván
Indica tu apellido: Pérez
Tu nombre y apellido son:
Iván
Pérez
Por defecto, cada llamada a print()
separa el texto con un salto de línea. Esto se puede cambiar utilizando el parámetro end
con el argumento «espacio«:
nombre = input('Indica tu nombre: ') #Iván
apellido = input('Indica tu apellido: ') #Pérez
print('Tu nombre y apellido son: ', end=' ')
print(nombre, end=' ')
print(apellido)
Como resultado, el nombre y el apellido se mostrarán en una sola línea:
Indica tu nombre: Iván
Indica tu apellido: Pérez
Tu nombre y apellido son: Iván Pérez
En lugar de múltiples llamadas a print()
, se puede gestionar eficazmente la salida del texto utilizando métodos de concatenación y formateo de cadenas.
Métodos de Unión y Formateo de Cadenas
La unión (concatenación) de cadenas permite hacer el código más limpio. Es importante no olvidar agregar un espacio entre el nombre y el apellido para mejorar la legibilidad.
nombre = input('Indica tu nombre: ') #Leo
apellido = input('Indica tu apellido: ') #Bytes
print('Tu nombre y apellido son: ' + nombre + ' ' + apellido)
Resultado:
Indica tu nombre: Leo
Indica tu apellido: Bytes
Tu nombre y apellido son: Leo Bytes
Un resultado similar se puede obtener mediante el formateo de cadenas utilizando f-strings en Python. En este caso, las variables se encierran entre llaves y se insertan directamente en la cadena, precedidas por el símbolo ‘f’.
nombre = input('Indica tu nombre: ') #Leo
apellido = input('Indica tu apellido: ') #Bytes
print(f'Tu nombre y apellido son: {nombre} {apellido}')
Resultado:
Indica tu nombre: Leo
Indica tu apellido:Bytes
Tu nombre y apellido son: Leo Bytes
Conversión de Cadenas a Números
Al utilizar la función input()
, los datos ingresados se leen por defecto como cadenas. Esto puede llevar a resultados inesperados al realizar operaciones aritméticas.
Ejemplo incorrecto:
primero = input('Indica el primer número: ') #70
segundo = input('Indica el segundo número: ') #300
suma = primero + segundo
print(f'La suma de los números es: {suma}')
Resultado:
Indica el primer número: 70
Indica el segundo número: 300
70300
Aquí ocurrió una concatenación (unión) de cadenas, no una suma de números. Para que la calculadora realice correctamente la suma, las cadenas deben convertirse en números utilizando la función int()
.
Ejemplo correcto:
primero = int(input('Indica el primer número: ')) #70
segundo = int(input('Indica el segundo número: ')) #300
suma = primero + segundo
print(f'La suma de los números es: {suma}')
Resultado:
Indica el primer número: 70
Indica el segundo número: 300
La suma de los números es: 370
Manejo de Errores
Al ingresar datos que no pueden ser convertidos a un número entero, el programa arrojará un error. Por ejemplo, si se ingresan letras en lugar de números.
primero = int(input('Indica el primer número: ')) #abc
Resultado:
Indica el primer número: abc
ValueError: invalid literal for int() with base 10: 'abc'
Esto ocurre porque la función int()
no puede convertir texto arbitrario en un número. Para evitar tales situaciones, es conveniente organizar un mecanismo de reingreso hasta que el usuario ingrese datos correctos. Discutiremos este aspecto en detalle más adelante, al hablar de los ciclos.
Arquitectura Funcional de la Calculadora
En lugar de escribir todas las operaciones aritméticas en un solo bloque de código, las dividiremos en funciones separadas. Esto hará el código más modular, fácil de probar y extender.
Primero, definamos las funciones para las operaciones aritméticas básicas de la calculadora:
- suma;
- resta;
- multiplicación;
- división.
Cada función tomará dos argumentos: primero y segundo.
Suma:
def suma(primero, segundo):
return primero + segundo
Resta:
def resta(primero, segundo):
return primero - segundo
Multiplicación:
def multiplicacion(primero, segundo):
return primero * segundo
División:
def division(primero, segundo):
return primero / segundo
Después de definir las funciones, probemos su funcionamiento:
num1 = int(input('Introduce el primer número: '))
num2 = int(input('Introduce el segundo número: '))
print(f'La suma de los dos números es: {suma(num1, num2)}, la diferencia: {resta(num1, num2)}, '
f'la multiplicación: {multiplicacion(num1, num2)}, el cociente: {division(num1, num2)}')
Resultado:
Introduce el primer número: 10
Introduce el segundo número: 5
La suma de los dos números es: 15, la diferencia: 5, la multiplicación: 50, el cociente: 2.0
De esta manera, cada función realiza su tarea, y se pueden combinar para resolver problemas más complejos.
Control del Flujo de Ejecución: Operadores if
Los operadores condicionales (operadores if) en Python permiten controlar el flujo de ejecución del programa.
El operador básico if
funciona según un principio simple:
if condición_verdadera:
# Se ejecuta este bloque de código
Comparación simple de números:
num1 = int(input('Introduce el primer número: '))
num2 = int(input('Introduce el segundo número: '))
if num1 == num2:
print('Números iguales')
Resultado:
Introduce el primer número: 9
Introduce el segundo número: 9
Números iguales
Si se ingresan números diferentes, no habrá ningún resultado, ya que no hay instrucciones para ese caso:
Introduce el primer número: 9
Introduce el segundo número: 7
Para ejecutar diferentes bloques de código según la condición, se utiliza la construcción if-else
:
if condición_verdadera:
# Se ejecuta este bloque de código
else:
# Se ejecuta este bloque de código
Para evaluar múltiples condiciones, se puede usar la estructura if-elif-else
:
if condición_1:
# Bloque de código 1
elif condición_2:
# Bloque de código 2
# ...
else:
# Bloque de código n
Ejemplo con if-else
— comparación de números:
num1 = int(input('Introduce el primer número: '))
num2 = int(input('Introduce el segundo número: '))
if num1 == num2:
print('Números iguales')
else:
print('Números diferentes')
Resultado:
Introduce el primer número: 10
Introduce el segundo número: 20
Números diferentes
Ejemplo de selección de operación:
operacion = input('Elige una operación (Introduce +, -, * o /): ')
if operacion == '+':
print('Has elegido suma')
elif operacion == '-':
print('Has elegido resta')
elif operacion == '*':
print('Has elegido multiplicación')
elif operacion == '/':
print('Has elegido división')
else:
print('¡Operación incorrecta!')
Resultado:
Elige una operación (Introduce +, -, * o /): *
Has elegido multiplicación
Elige una operación (Introduce +, -, * o /): Y
¡Operación incorrecta!
De esta manera, se puede controlar el flujo de ejecución del programa, ofreciendo al usuario la opción de operaciones y manejándolas de manera adecuada.
Ensamblar Funciones en un Programa: Calculadora
Para optimizar el código y facilitar su mantenimiento, crearemos tres funciones principales:
operacion()
para solicitar la operación del usuario;calcular()
para realizar las operaciones matemáticas;ejecutar()
— la función principal que llama a las demás y gestiona el flujo del programa.
Funciones operacion()
y calcular()
:
def operacion():
mes = input('Elige una operación (Introduce +, -, * o /): ')
if mes == '+':
print('Has elegido suma')
elif mes == '-':
print('Has elegido resta')
elif mes == '*':
print('Has elegido multiplicación')
elif mes == '/':
print('Has elegido división')
else:
print('¡Operación incorrecta!')
return mes
def calcular(primero, segundo, oper):
resultado = None
if oper == '+':
resultado = suma(primero, segundo)
elif oper == '-':
resultado = resta(primero, segundo)
elif oper == '*':
resultado = multiplicacion(primero, segundo)
elif oper == '/':
resultado = division(primero, segundo)
else:
print('¡Operación incorrecta!')
return resultado
En la función operacion()
, el usuario elige una operación, que luego se devuelve. En calcular()
, utilizamos un diccionario para simplificar la selección de la operación y realizar la función matemática correspondiente.
Función ejecutar()
:
def ejecutar():
primero = int(input('Introduce el primer número: '))
segundo = int(input('Introduce el segundo número: '))
oper = operacion()
resultado = calcular(primero, segundo, oper)
print(f'Resultado: {resultado}')
Esta función integra todo lo anterior:
- solicita los números;
- llama a
operacion()
para elegir la operación; - llama a
calcular()
para calcular el resultado, que luego se muestra.
Para ejecutar el programa, es necesario llamar a la función ejecutar()
.
Resultados del funcionamiento:
Introduce el primer número: 7
Introduce el segundo número: 10
Elige una operación (Introduce +, -, * o /): +
Has elegido suma
Resultado: 17
Introduce el primer número: 7
Introduce el segundo número: 10
Elige una operación (Introduce +, -, * o /): *
Has elegido multiplicación
Resultado: 70
Introduce el primer número: 7
Introduce el segundo número: 10
Elige una operación (Introduce +, -, * o /): er
¡Operación incorrecta!
Resultado: None
Código completo:
def suma(primero, segundo):
return primero + segundo
def resta(primero, segundo):
return primero - segundo
def multiplicacion(primero, segundo):
return primero * segundo
def division(primero, segundo):
return primero / segundo
def operacion():
mes = input('Elige una operación (Introduce +, -, * o /): ')
if mes == '+':
print('Has elegido suma')
elif mes == '-':
print('Has elegido resta')
elif mes == '*':
print('Has elegido multiplicación')
elif mes == '/':
print('Has elegido división')
else:
print('¡Operación incorrecta!')
return mes
def calcular(primero, segundo, oper):
resultado = None
if oper == '+':
resultado = suma(primero, segundo)
elif oper == '-':
resultado = resta(primero, segundo)
elif oper == '*':
resultado = multiplicacion(primero, segundo)
elif oper == '/':
resultado = division(primero, segundo)
else:
print('¡Operación incorrecta!')
return resultado
def ejecutar():
primero = int(input('Introduce el primer número: '))
segundo = int(input('Introduce el segundo número: '))
oper = operacion()
resultado = calcular(primero, segundo, oper)
print(f'Resultado: {resultado}')
# Llamada a la función principal para ejecutar la calculadora
ejecutar()
Extensión de la Funcionalidad de la Calculadora
Para mejorar la calculadora, podemos añadir más funciones, por ejemplo:
- Porcentaje;
- Potenciación;
- Cálculo de logaritmo (se requiere importar la biblioteca
math
).
Actualicemos la función calcular()
de la siguiente manera:
import math
def calcular(primero, segundo, oper):
resultado = None
if oper == '+':
resultado = primero + segundo
elif oper == '-':
resultado = primero - segundo
elif oper == '*':
resultado = primero * segundo
elif oper == '/':
if segundo == 0:
print('¡División por cero no permitida!')
return
resultado = primero / segundo
elif oper == '%':
resultado = (primero / segundo) * 100
elif oper == '**':
resultado = primero ** segundo
elif oper == 'log':
resultado = math.log(primero, segundo)
else:
print('¡Operación desconocida!')
return resultado
Ahora actualicemos la función operacion()
:
def operacion():
mes = input('''Elige una operación (Introduce +, -, *, /, %, **, log):
+ - Suma
- - Resta
* - Multiplicación
/ - División
% - Porcentaje del primer número respecto al segundo
** - Potenciación
log - Logaritmo del primer número con base del segundo\n''')
if mes == '+':
print('Has elegido suma')
elif mes == '-':
print('Has elegido resta')
elif mes == '*':
print('Has elegido multiplicación')
elif mes == '/':
print('Has elegido división')
elif mes == '%':
print('Has elegido porcentaje')
elif mes == '**':
print('Has elegido potenciación')
elif mes == 'log':
print('Has elegido logaritmo')
else:
print('¡Operación desconocida!')
return mes
Ahora, la calculadora tiene un conjunto más amplio de operaciones, y el usuario comprende claramente qué hace cada una de ellas, gracias a la entrada informativa.
Ejemplo de cálculo del 30% de 100:
Introduce el primer número: 30
Introduce el segundo número: 100
Elige una operación (Introduce +, -, *, /, %, **, log):
+ - Suma
- - Resta
* - Multiplicación
/ - División
% - Porcentaje del primer número respecto al segundo
** - Potenciación
log - Logaritmo del primer número con base del segundo
%
Has elegido porcentaje
Resultado: 30.0
Manejo de Excepciones y Mejora del Código
Para hacer la calculadora más robusta y fácil de usar, debemos abordar cuatro problemas:
- Error de «división por cero»;
- Entrada de datos no numéricos;
- Entrada incorrecta del símbolo de operación;
- Continuación del programa después de finalizar (a elección del usuario).
Para resolver el problema de la división por cero, modificamos la función calcular()
de la siguiente manera:
if segundo == 0:
print('¡División por cero no permitida!')
return
Ahora, si el usuario intenta dividir por cero, el programa emitirá una advertencia y detendrá la operación.
Para manejar errores de entrada y símbolos de operación incorrectos, utilizaremos bucles y excepciones.
Uso de Bucles y Manejo de Excepciones
Para hacer el programa más resistente a errores y fácil de usar, aplicaremos bucles y mecanismos de manejo de excepciones.
Primero, necesitamos escribir una lista de todas las operaciones permitidas:
operaciones_correctas = ['+', '-', '*', '/', '%', '**', 'log']
El siguiente paso es verificar la operación ingresada. Usaremos un bucle while
para solicitar una nueva entrada si la operación es incorrecta:
while mes not in operaciones_correctas:
print('Operación no válida. ¡Intenta nuevamente!')
mes = input()
Para manejar situaciones en las que se ingresan datos no numéricos, agregamos un bloque try-except
en la función ejecutar()
:
def ejecutar():
try:
primero = int(input('Introduce el primer número: '))
except ValueError:
primero = int(input('Dato no válido. Por favor, introduce un número entero: '))
try:
segundo = int(input('Introduce el segundo número: '))
except ValueError:
segundo = int(input('Dato no válido. Por favor, introduce un número entero: '))
oper = operacion()
resultado = calcular(primero, segundo, oper)
print(f'Resultado: {resultado}')
Para continuar usando la calculadora después de finalizar una operación, añadimos el siguiente código:
programa_en_ejecucion = True
while programa_en_ejecucion:
ejecutar()
respuesta = input('¿Quieres continuar?\nIntroduce + para sí o cualquier otro carácter para no: ')
if respuesta != '+':
programa_en_ejecucion = False
Así, el programa continuará ejecutándose en un bucle hasta que el usuario decida finalizar.
Código completo:
import math
def suma(primero, segundo):
return primero + segundo
def resta(primero, segundo):
return primero - segundo
def multiplicacion(primero, segundo):
return primero * segundo
def division(primero, segundo):
return primero / segundo
def calcular(primero, segundo, oper):
resultado = None
if oper == '+':
resultado = suma(primero, segundo)
elif oper == '-':
resultado = resta(primero, segundo)
elif oper == '*':
resultado = multiplicacion(primero, segundo)
elif oper == '/':
if segundo == 0:
print('¡División por cero no permitida!')
return
resultado = division(primero, segundo)
elif oper == '%':
resultado = (primero / segundo) * 100
elif oper == '**':
resultado = primero ** segundo
elif oper == 'log':
resultado = math.log(primero, segundo)
else:
print('¡Operación desconocida!')
return resultado
def operacion():
mes = input('''Elige una operación (Introduce +, -, *, /, %, **, log):
+ - Suma
- - Resta
* - Multiplicación
/ - División
% - Porcentaje del primer número respecto al segundo
** - Potenciación
log - Logaritmo del primer número con base del segundo\n''')
if mes == '+':
print('Has elegido suma')
elif mes == '-':
print('Has elegido resta')
elif mes == '*':
print('Has elegido multiplicación')
elif mes == '/':
print('Has elegido división')
elif mes == '%':
print('Has elegido porcentaje')
elif mes == '**':
print('Has elegido potenciación')
elif mes == 'log':
print('Has elegido logaritmo')
operaciones_correctas = ['+', '-', '*', '/', '%', '**', 'log']
while mes not in operaciones_correctas:
print('Operación no válida. ¡Intenta nuevamente!')
mes = input()
return mes
def ejecutar():
try:
primero = int(input('Introduce el primer número: '))
except ValueError:
primero = int(input('Dato no válido. Por favor, introduce un número entero: '))
try:
segundo = int(input('Introduce el segundo número: '))
except ValueError:
segundo = int(input('Dato no válido. Por favor, introduce un número entero: '))
oper = operacion()
resultado = calcular(primero, segundo, oper)
print(f'Resultado: {resultado}')
programa_en_ejecucion = True
while programa_en_ejecucion:
ejecutar()
respuesta = input('¿Quieres continuar?\nIntroduce + para sí o cualquier otro carácter para no: ')
if respuesta != '+':
programa_en_ejecucion = False
Conclusión
Con esto, el proceso de creación de una calculadora en Python se considera completo. Hemos cubierto las operaciones aritméticas básicas, agregado funcionalidades adicionales y considerado el manejo de errores. Ahora sabes no solo los fundamentos del lenguaje, sino también los principios de buena programación: estructuración del código, manejo de excepciones y la interacción con el usuario. Este es un buen comienzo para aprender Python y desarrollar programas más complejos. Esperamos que este material sea útil en tu aprendizaje y crecimiento profesional.