Files
calculator/cli.py
T

54 lines
1.7 KiB
Python

#!/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 is not None:
# режим «пакетного» запуска (аргументы строки выражений)
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())