#!/usr/bin/env python3 """Точка входа: интерактивный CLI-калькулятор. Читает выражения из stdin до ключевых слов «выход» / "exit". Можно запускать: python cli.py python cli.py "2 + 2" "3 * (4 - 1)" # аргументы — как входные строки """ from __future__ import annotations import sys from calculator import is_exit_command, try_evaluate def repl(exprs: list[str] | None) -> int: """Запускает цикл ввода/вычисления.""" if exprs: # режим «пакетного» запуска (аргументы строки выражений) for expr in exprs: if is_exit_command(expr): break print(try_evaluate(expr)) return 0 # интерактивный режим: читаем весь stdin целиком # (детерминированное поведение в pipe/файле) try: data = sys.stdin.read() except (EOFError, KeyboardInterrupt): print() return 0 print("Калькулятор. Введите выражение, 'выход'/'exit' — для завершения.") print("Пример: 2 + 3 * (4 - 1) % 100") for line in data.splitlines(): expr = line.strip() if not expr: continue if is_exit_command(expr): print("Пока!") return 0 print(try_evaluate(expr)) return 0 def main(argv: list[str] | None = None) -> int: argv = list(sys.argv[1:] if argv is None else argv) return repl(argv) if __name__ == "__main__": raise SystemExit(main())