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.
Visualización del resultado en código Python
Visualización del resultado en código Python

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.

Curso de Programación en Python

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
Resultado de una calculadora en Python
Resultado de una calculadora en Python

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.

Mega Curso de Python De Principiante a Experto

Categorizado en:

Python,