class CurtaSimulator: def __init__(self): self.register = 0 # Main register (result) self.input_digits = [] # Current input number (up to 11 digits) self.negative = False # Track sign of register def _clear_input(self): self.input_digits = [] def _get_input_value(self): """Convert current input digits to an integer""" if not self.input_digits: return 0 val = int(''.join(map(str, self.input_digits))) return val def add_digit(self, digit): """Add a digit to current input (like turning the setting knob)""" if len(self.input_digits) < 11: # Curta Type I has 11-digit capacity self.input_digits.append(digit) print(f" Input: {self._get_input_value()}") else: print(" Max 11 digits reached.") def clear_input(self): """Clear current input (CR)""" self._clear_input() print(" Input cleared.") def add(self): """Add current input to register""" val = self._get_input_value() self.register += val self._clear_input() print(f" Added {val}. Register = {self.register}") def subtract(self): """Subtract current input from register""" val = self._get_input_value() self.register -= val self._clear_input() print(f" Subtracted {val}. Register = {self.register}") def multiply(self): """Multiply register by current input (simulated)""" val = self._get_input_value() if val != 0: self.register *= val else: print(" Multiplication by zero not allowed (mechanical lock)") self._clear_input() print(f" Multiplied by {val}. Register = {self.register}") def divide(self): """Divide register by current input (simulated)""" val = self._get_input_value() if val == 0: print(" Division by zero not possible.") else: self.register /= val print(f" Divided by {val}. Register = {self.register:.6f}") self._clear_input() def clear_register(self): """Clear main register (CR)""" self.register = 0 self.negative = False print(" Register cleared.") def show(self): """Display current state""" print("\n=== Curta Status ===") print(f"Register: {self.register}") print(f"Current input: {self._get_input_value()}") print("===================") def run_cli(self): """Interactive command-line interface""" print("\n=== CURTA SIMULATOR (Type I) ===") print("Commands:") print(" #<digit> - enter digit (0-9)") print(" clr - clear current input") print(" + - add") print(" - - subtract") print(" * - multiply") print(" / - divide") print(" regclr - clear register") print(" show - show status") print(" quit - exit") print("================================\n") while True: cmd = input("> ").strip().lower() if cmd.startswith("#"): digit = cmd[1:] if digit.isdigit() and len(digit) == 1: self.add_digit(int(digit)) else: print(" Use # followed by a single digit (0-9)") elif cmd == "clr": self.clear_input() elif cmd == "+": self.add() elif cmd == "-": self.subtract() elif cmd == "*": self.multiply() elif cmd == "/": self.divide() elif cmd == "regclr": self.clear_register() elif cmd == "show": self.show() elif cmd == "quit": print("Goodbye!") break else: print(" Unknown command.")
# Curta Simulator (Text-Based) # Simulates a mechanical Curta calculator (Type I) # Supports addition, subtraction, multiplication, division, and clearing curta simulator
This simulator mimics the of the Curta, where you first set digits, then perform an operation. Perfect for understanding how this legendary pocket calculator worked! class CurtaSimulator: def __init__(self): self