Bounding User Input in Python

Text on screen
Bounding in one line.

Imagine you take on user input like so:

"""Bounding input."""

n = input("Please enter some number: ")

m = int(n)

print("Here is the output:", m)

Here we have to cast n into an integer because it’s considered a string when using input.

Problem

Let’s say you have this hypothetical problem where you need to bound the user input of a number between two values, say 10 and 0.

You could use branches of if and else statements, but I want to introduce how you can do it in one line.

Solution

Here we can use the builtin max() and min() functions to enforce the value between two bound.

"""Bounding input."""

n = input("Please enter some number: ")

UPPER = 10
LOWER = 0

m = max(min(int(n), UPPER), LOWER)

print("Here is the output:", m)

Here, if the user enters a value above the highest bound, then the min() function will enforce the value provided by UPPER (e.g. 11 will be ignored for 10, which is what UPPER is assigned too)

If the user enters a value below the lowest bound, then the max() function will enforce the value provided by LOWER.

A Practical Application

Javascript/Typescript has an analogous syntax to this and I’ve used this a few times with user input. One example is a select box with numbers as inputs. A bad actor can always alter the values and send numbers above or below the bounds of what you code wants.

<label>
  Is it better with 1, 2 or 3:
  <select name="num">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
  </select>
</label>
let num = parseInt("4"); // Bad actor!
const UPPER = 3;
const LOWER = 1;
num = Math.max(Math.min(num, UPPER), LOWER);

Conclusion

A simple one-liner can be used in Python and Javascript/Typescript to bound user input for numerical values.