Explique o código: def loot_prob(mapping, none_value=None, random_fn=None, _full_ret=False): if not random_fn: import random random_fn = random.random pcts = list(mapping.values()) total_pct = sum(pcts) none_pct = 0.0 if total_pct > 1.0: max_pct = sum(pcts) for k, v in mapping.items(): mapping[k] = v/total_pct elif total_pct < 1.0: none_pct = 1.0 - total_pct last_pct = 0.0 drop_line = {} for k, v in sorted(mapping.items(), key = lambda x: x[1]): drop_line[k] = (last_pct, last_pct+v) last_pct = last_pct+v if none_pct: drop_line[none_value] = (last_pct, 1.0) _do_return = lambda *args: args if _full_ret else args[0] rnd = random_fn() for k, (a, b) in drop_line.items(): if a <= rnd < b: return _do_return(k, a, b, rnd) return _do_return(none_value, a, b, rnd)