When we first started on our new game idea this past fall, we knew that a lot of things would be changing rapidly. Rather than dive straight into programming for the Xbox, we wanted to prototype the basic ideas on a platform that would let us make tweaks without having to recompile.
At first, the obvious choice seemed to be Python and PyGame. I was already very familiar with both, and they probably would have suited us fine. But then while looking around for a tool like this, I found LÖVE.
According to the website, "LÖVE is an unquestionably awesome 2D game engine, which allows rapid game development and prototyping in Lua." And that quote is pretty much right. LÖVE takes care of all the boilerplate, code-repetition, and nastiness to let you get down to making awesome games. We chose to go with it immediately, as it was clear that with LÖVE we'd be able to worry about algorithms and balance, rather than code.
The biggest hurdle that we ran into was largely the fault of Lua, and not LÖVE. By default, Lua is a meticulously pure scripting language, and therefore has no native support for object-oriented programming. This is highly annoying. After some searching though, we found a workaround involving tricking Lua's tables (like a Python dictionary) into behaving like classes.
Beyond that, the only issue LÖVE has is that it is just a prototyping tool. You'll probably have to port your code to something else in order to actually distribute it. But for projects that are purely academic in nature, or where you want to figure things out in a quick, interpreted language before moving over to the behemoth, it's an excellent choice.