← Volver al listado de tecnologías

Capítulo 1: Calculadora CLI

Por: SiempreListo
pythonzigclibásico

Calculadora de Terminal

Crearemos una calculadora que lee dos números y una operación desde la terminal.

Conceptos que Aprenderás

Python

def calcular(a: float, b: float, op: str) -> float:
    operaciones = {
        '+': lambda x, y: x + y,
        '-': lambda x, y: x - y,
        '*': lambda x, y: x * y,
        '/': lambda x, y: x / y if y != 0 else float('inf'),
    }
    return operaciones.get(op, lambda x, y: 0)(a, b)

def main():
    try:
        a = float(input("Primer número: "))
        b = float(input("Segundo número: "))
        op = input("Operación (+, -, *, /): ")
        resultado = calcular(a, b, op)
        print(f"Resultado: {resultado}")
    except ValueError:
        print("Error: Ingresa números válidos")

if __name__ == "__main__":
    main()

Zig

const std = @import("std");

fn calcular(a: f64, b: f64, op: u8) f64 {
    return switch (op) {
        '+' => a + b,
        '-' => a - b,
        '*' => a * b,
        '/' => if (b != 0) a / b else std.math.inf(f64),
        else => 0,
    };
}

pub fn main() !void {
    const stdin = std.io.getStdIn().reader();
    const stdout = std.io.getStdOut().writer();

    try stdout.print("Primer número: ", .{});
    var buf: [100]u8 = undefined;
    const a_str = stdin.readUntilDelimiter(&buf, '\n') catch return;
    const a = std.fmt.parseFloat(f64, a_str) catch {
        try stdout.print("Error: número inválido\n", .{});
        return;
    };

    try stdout.print("Segundo número: ", .{});
    const b_str = stdin.readUntilDelimiter(&buf, '\n') catch return;
    const b = std.fmt.parseFloat(f64, b_str) catch {
        try stdout.print("Error: número inválido\n", .{});
        return;
    };

    try stdout.print("Operación (+, -, *, /): ", .{});
    const op_str = stdin.readUntilDelimiter(&buf, '\n') catch return;
    const op = if (op_str.len > 0) op_str[0] else '+';

    const resultado = calcular(a, b, op);
    try stdout.print("Resultado: {d}\n", .{resultado});
}

Diferencias Clave

AspectoPythonZig
TiposDinámicosEstáticos
ErroresExcepcionesValores de retorno
Entradainput()Reader con buffer

Ejercicios

  1. Agrega operación de potencia (^)
  2. Permite operaciones encadenadas
  3. Agrega historial de operaciones

Siguiente: Conversor de Unidades →