Различия между версиями 8 и 9
Версия 8 от 2020-11-13 14:18:43
Размер: 3141
Редактор: FrBrGeorge
Комментарий:
Версия 9 от 2020-11-13 14:59:37
Размер: 3296
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 6: Строка 6:
 * Команда вида `Идентификатор = выражение` задаёт переменную `Идентификатор` (именование как в Python)  * Команда вида `Идентификатор = выражение` задаёт переменную `Идентификатор` (именование как в Python; отличие — допускаются ''любые'' синтаксически верные идентификаторы, например, `return`)

Написать программу — калькулятор с переменными и обработкой ошибок. Программа построчно вводит команды калькулятора, и если надо, выводит результат их выполнения или ошибку.

  • Пробелы в строках игнорируются
  • Команда, начинающаяся на '#' — комментарий, такие команды игнорируются

  • Команда вида Идентификатор = выражение задаёт переменную Идентификатор (именование как в Python; отличие — допускаются любые синтаксически верные идентификаторы, например, return)

    • Если слева от "=" стоит не идентификатор, выводится "Assignment error"; всё, что справа, игнорируется, присваивания не происходит

  • Команда вида выражение выводит значение выражения.

  • Выражение — это арифметическое выражение, состоящее из
    • целых чисел

    • уже определённых идентификаторов
    • круглых скобок
    • действий +, -, *, /, % и унарных + и -.

      • Деление целочисленное

    • Любое другое выражение приводит к выводу ошибки "Syntax error"

  • Если выражение нельзя вычислить, потому что в нём встречаются неопределённые переменные, выводится ошибка "Name error"

  • Если выражение нельзя вычислить по какой-то другой причине, выводится "Runtime error"

# Ошибок нет
234
10/3
A = 3*(2+(1-7)%5)
A+100
+ ++ - -- - + - - 0
# Начинаются ошибки
7*B
3=3
A=4=5
A()
A/0
  • Подсказка 1: удобно пользоваться eval() со всеми тремя параметрами

    • есть такая в нашем случае неприятная штука — __builtins__, её тоже следует перебить или как-то поигнорить

  • Подсказка 2: кое-какие иные конструкции Python тоже являются синтаксическими ошибками

234
3
118
0
Name error
Assignment error
Syntax error
Syntax error
Runtime error
  • В этом примере сначала приведён ввод, затем вывод (так и будет при тестировании), но если запустить вручную они перемешиваются
  • Я делал так:
       1 $ mkfifo BoldCalc
       2 $ python3 BoldCalc.py > BoldCalc
       3 … ввод
       4 
    
    • и в другом окне
       1 $ cat BoldCalc
       2 … вывод
       3 
    


CategoryHomework

LecturesCMC/PythonIntro2020/Homework_BoldCalc (последним исправлял пользователь FrBrGeorge 2020-11-16 21:27:58)