Ah, yeah, seems you are right. Hmmm... Well it looks reasonable to you, but it looks pretty silly to me to call update() and render() only to have them check if they should run. A better design would be for those methods to do their job when they're called, and only call them when it's time.
Well one can begin by trying to clean up the design. For example, an instance level event doesn't seem to make much sense. Instead track the state of the program and respond to that. It seems clear that input() is just doing too much though. It's purpose isn't clear. It seems to be doing some of the update logic, which seems duplicated...
If you want your code to work you need to keep it simple and small. Break your functions into smaller pieces, and keep their purposes simple.
For the OP: Stop posting pieces of code here and there and post the entire program in its current state so that we can try to build, run, and debug it.