From 4902915e59b5b78592e6b7f325c42f7ce3ec8ed4 Mon Sep 17 00:00:00 2001 From: BJH Date: Sat, 6 Jul 2019 16:49:23 -0400 Subject: [PATCH] Gracefully handle in_min == in_max: if input is lower or higher, return out_min or out_max, if input == in_min == in_max, return 50% of the output range; oh, and don't crash --- simpleio.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/simpleio.py b/simpleio.py index 8b1c3e8..cfa9b9f 100644 --- a/simpleio.py +++ b/simpleio.py @@ -238,7 +238,16 @@ def map_range(x, in_min, in_max, out_min, out_max): :return: Returns value mapped to new range :rtype: float """ - mapped = (x-in_min) * (out_max - out_min) / (in_max-in_min) + out_min + in_range = in_max - in_min + in_delta = x - in_min + if in_range != 0: + mapped = in_delta / in_range + elif in_delta != 0: + mapped = in_delta + else: + mapped = .5 + mapped *= out_max - out_min + mapped += out_min if out_min <= out_max: return max(min(mapped, out_max), out_min) return min(max(mapped, out_max), out_min)