Python — Nested Ifs

NESTED IFs: A question was asked recently on Stack Overflow

The solution shown below is readable, scalable, easily edited — and contains no IF statements.

This is similar to the method proposed by Anitoliy R except I use a single string and the split function to simplify editing and scaling.

To illustrate scalability, I add 3 new data types ‘J’, ‘K’, and ‘M’ with added random return values.


PYTHON CODE

numeric_types='Hexadecimal Decimal Binary J K M'.split()

#                       H   D   B   J   K   M
conversion_list_2D = [[ 0,  1,  2, 11, 20, 19], 
                      [ 4,  0,  6, 28, 10, 30], 
                      [ 5,  3,  0, 15, 29, 14], 
                      [ 8, 16, 17,  0, 27, 26], 
                      [18,  9, 24, 22,  0, 25], 
                      [12, 21, 13, 23,  7,  0]]

def convert_what(numeral_sys_1, numeral_sys_2):
    try:
        q1 = numeric_types.index(numeral_sys_1)    
        q2 = numeric_types.index(numeral_sys_2)
        return conversion_list_2D[q1][q2]
    except ValueError:
        return False

# let's try a few tests
print(convert_what('Hexadecimal', 'Decimal'))
print(convert_what('Hexadecimal', 'Binary'))
print(convert_what('Decimal', 'Hexadecimal'))
print(convert_what('Decimal', 'Binary'))
print(convert_what('Binary', 'Hexadecimal'))
print(convert_what('Binary', 'Decimal'))
print(convert_what('Binary', 'Q'))
print(convert_what('Binary', 'K'))

PYTHON OUTPUT

1
2
4
6
5
3
False
29

Leave a Reply

Your email address will not be published. Required fields are marked *