Skip to content

Instantly share code, notes, and snippets.

@abunsen
Forked from igorgue/get_aprox.py
Created June 6, 2012 23:02
Show Gist options
  • Save abunsen/2885368 to your computer and use it in GitHub Desktop.
Save abunsen/2885368 to your computer and use it in GitHub Desktop.
Get aprox number in a list
#!/usr/bin/env python
"""
Create a program that given a requested number gives you
the nearest number in a list.
Considerations:
- The list needs to only contain integers
This example is useful when you have only a certain number of
images sizes available and you have to pick one for your station
collage.
e.g.:
>>> requested_size = 21
>>> sizes = (1, 2, 3, 19, 29, 10, 22, 3)
>>> main(requested_size, sizes)
22
"""
def minus_one(requested_size, sizes):
if requested_size in sizes:
return requested_size
else:
requested_size -= 1
return minus_one(requested_size, sizes)
def plus_one(requested_size, sizes):
if requested_size in sizes:
return requested_size
else:
requested_size += 1
return plus_one(requested_size, sizes)
def main(requested_size, sizes):
"""
>>> requested_size = 120
>>> sizes = (33, 50, 52, 75, 100, 175, 180, 182, 200, 350)
>>> main(requested_size, sizes)
100
"""
if requested_size in sizes:
return requested_size
else:
closest_behind = minus_one(requested_size, sizes)
closest_ahead = plus_one(requested_size, sizes)
return closest_ahead if (closest_ahead - requested_size) <= (requested_size - closest_behind) else closest_behind
if __name__ == '__main__':
import doctest
doctest.testmod()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment