Как-то лень было писать для задачки интерфейс, а в универе требовали, и тут в мою голову пришла мысль, что не плохо было бы иметь что-то вроде аналога интерактивного режима интерпретатора python’а (лицезреть который Вы можете выполнив команду python или нажав в виндовской IDLE F5).
Решение оказалось в одну строчку. Есть в python’е (да и не только в нём) такая функция с неприличным именем, как eval. Она пытается преобразовать полученное в качестве параметра выражение в некий результат. Например:
1 2 3 4 5 6 7 8 9 | >>> eval("2 + 2") 4 >>> a = 4 >>> eval("a ** a") 256 |
Как вы уже наверное догадались, при наличии такой функции задача сводится к тривиальной. В моей задачке был объект db, методы которого и надо было вызывать для демонстрации функций программы. Вот два варианта их вызова:
1 2 3 | while True: input() |
При исполнении программы вводим «db.method1(params)». Функция input([prompt]) эквивалентна вызову eval(raw_input([prompt])). Чтобы не писать каждый раз «db.», можно упростить ввод пользователя:
1 2 3 | while True: eval("db." + raw_input()) |
Теперь достаточно писать просто «method1(params)».
Так же у функции eval есть ещё 2 необязательных параметра eval(expression[, globals[, locals]]), через них можно передавать устанавливать значения глобальных и локальных переменных.
На этом закончим. Конечно, данный вариант не подойдёт для конечного пользователя, т.к. любой пользовательский ввод следует проверять на корректность, но для демонстрации программы в универе вполне сойдёт.