On 2013-11-11 10:39, Chris Angelico wrote:
A 'minor weapon' is based on a roll of a 100-sided dice. If it's 01 to 70, "+1 weapon: 2,000gp [weapon]"; if it's 71 to 85, "+2 weapon: 8,000gp [weapon]"; if 86 to 90, "Specific weapon [minor specific weapon]"; and if 91 to 100, "Special ability [minor special weapon] and roll again".My code to handle that starts out with this array: "minor weapon":({ 70,"+1 weapon: 2,000gp [weapon]", 85,"+2 weapon: 8,000gp [weapon]", 90,"Specific weapon [minor specific weapon]", 100,"Special ability [minor special weapon] and roll again", }), (that's Pike; in Python it'd be a list, or maybe a tuple of tuples), and denormalizes it into a lookup table by creating 70 entries quoting the first string, 15 quoting the second, 5, and 10, respectively. So, with a bit of preprocessing, a lookup table (which in this case is an array (list), but could just as easily be a dict) can be used to handle inequalities. But this is because lookup tables can be treated as data, where if/elif/else blocks have to be code; there are roughly 42 million such lookup tables in the code I snagged that from, and having code for each one would work out far less manageable. Normally, you'll want to render inequalities with code as if/elif.
Heh. I've done pretty much exactly the same thing to implement an engine[1] to draw from the random tables on Abulafia[2] which have nearly the same structure. It scales up reasonably well beyond d100s. It's certainly not a technique I would pull out to replace one-off if-elif chains that you literally write, but it works well when you write the generic code once to apply to many tables.
[1] http://rollmeup.mechanicalkern.com/ [2] http://www.random-generator.com/index.php?title=Main_Page -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco -- https://mail.python.org/mailman/listinfo/python-list
