Problem: let the user specify certain parameters for a screen display (width, height, diagonal, pixel density, pixels across, pixels down, optimum viewing distance) and from the ones specified, work out the parameters which were not specified.
Solution: set up a table of rules <https://github.com/ldo/screencalc> listing all the ways in which parameters can be computed from other parameters. (The table is called “paramdefs”.) This one table saves so much code. It is used to drive the command-line parsing: opts, args = getopt.getopt \ ( sys.argv[1:], "", list(k + "=" for k in paramdefs) ) and again: params = dict((k, None) for k in paramdefs) # None indicates unspecified parameter value for keyword, value in opts : if keyword.startswith("--") : param = keyword[2:] params[param] = paramdefs[param]["parse"](value) #end if #end for and of course the actual parameter dependency determinations and value calculations: while True : # try to calculate all remaining unspecified parameter values did_one = False undone = set() for param in params : if params[param] == None : calculate = paramdefs[param]["calculate"] trycalc = iter(calculate.keys()) while True : # try next way to calculate parameter value trythis = next(trycalc, None) if trythis == None : # run out of ways undone.add(param) break #end if if all(params[k] != None for k in trythis) : # have all values needed to use this calculation params[param] = calculate[trythis](*tuple(params[k] for k in trythis)) did_one = True break #end if #end while #end if #end for if len(undone) == 0 or not did_one : break # all done, or can't make further progress #end while I also did the same sort of thing in Java for Android <https://github.com/ldo/screencalc_android>. Guess which version is more concise... -- https://mail.python.org/mailman/listinfo/python-list