# Calculating the Maximum, Minimum and Average of Three Numbers

The title says it all. As always, I love to answer those homework questions with obfuscated solutions, for that is unsuitable to hand in those solutions.

A simple way to make a solution to entry-level question like this one harder to understand, is leveraging the fact that functions are first-class in python, so basically logic and I/O operations, almost everything we need here can be stuffed inside a single expression, like this:

[f(n) for f, n in zip((max, min, lambda s: float(sum(s))/len(s)), ([list(map(int, map(raw_input, ':::')))]*3))]

This is the Python 2 version, for Python 3, substitute `raw_input`

with `input`

.

It works like so:

>>> [f(n) for f, n in zip((max, min, lambda s: float(sum(s))/len(s)), ([list(map(int, map(raw_input, ':::')))]*3))] :1 :2 :3 [3, 1, 2.0]

For extra fun, I use the number of `:`

(Colon) to control how many
numbers can be accepted, i.e, for six numbers instead of three, change
`':::'`

to `'::::::'`

:

>>> [f(n) for f, n in zip((max, min, lambda s: float(sum(s))/len(s)), ([list(map(int, map(raw_input, '::::::')))]*3))] :12 :34 :56 :78 :90 :42 [90, 12, 52.0]

Because of the incompatible differences between Python 2 and Python 3, it can be a little bit shorter if I am only targeting specific branch of Python.

In Python 2, `map`

returns a `list`

, so explicit `list`

conversion is not needed:

[f(n) for f, n in zip((max, min, lambda s: float(sum(s))/len(s)), ([map(int, map(raw_input, ':::'))]*3))]

On the other hand, division operator returns floating-point numbers by default
in Python 3, `float`

function call is no longer necessary:

[f(n) for f, n in zip((max, min, lambda s: sum(s)/len(s)), ([list(map(int, map(input, ':::')))]*3))]