← Volver al listado de tecnologías
Capítulo 1: Calculadora CLI
Calculadora de Terminal
Crearemos una calculadora que lee dos números y una operación desde la terminal.
Conceptos que Aprenderás
- Entrada/salida estándar
- Parsing de strings a números
- Estructuras condicionales
- Manejo básico de errores
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
| Aspecto | Python | Zig |
|---|---|---|
| Tipos | Dinámicos | Estáticos |
| Errores | Excepciones | Valores de retorno |
| Entrada | input() | Reader con buffer |
Ejercicios
- Agrega operación de potencia (
^) - Permite operaciones encadenadas
- Agrega historial de operaciones