Joe Barry
Joe Barry

Reputation: 37

Hexadecimal to Binary program - Python

I am doing an exam paper for revision. It's not a particular question I want help with, but I am unsure to why the program is outputting incorrectly when certain data is entered.

def Binary(Hex):
    Result = ''
    ErrorFound = False
    BinaryEquivalent = ''
    EmptyInput=""
    for ThisHexDigit in Hex:
        if ThisHexDigit in ['1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F']:
            if ThisHexDigit == '0': BinaryEquivalent = '0'
            elif ThisHexDigit == '1': BinaryEquivalent = '1'
            elif ThisHexDigit == '2': BinaryEquivalent = '2'
            elif ThisHexDigit == '3': BinaryEquivalent = '3'
            elif ThisHexDigit == '4': BinaryEquivalent = '4'
            elif ThisHexDigit == '5': BinaryEquivalent = '5'
            elif ThisHexDigit == '6': BinaryEquivalent = '6'
            elif ThisHexDigit == '7': BinaryEquivalent = '7'
            elif ThisHexDigit == '8': BinaryEquivalent = '8'
            elif ThisHexDigit == '9': BinaryEquivalent = '9'
            elif ThisHexDigit == 'A': BinaryEquivalent = '10'
            elif ThisHexDigit == 'B': BinaryEquivalent = '11'
            elif ThisHexDigit == 'C': BinaryEquivalent = '12'
            elif ThisHexDigit == 'D': BinaryEquivalent = '13'
            elif ThisHexDigit == 'E': BinaryEquivalent = '14'
            elif ThisHexDigit == 'F': BinaryEquivalent = '15'
            Result = Result + BinaryEquivalent
        elif ErrorFound == True:
            print('You have made a mistake')
        elif Hex==EmptyInput:
            print('Empty input, try again.')

    return Result

Yes, I know this is an over-complicated piece of code but it is in the exam paper so I have to use it. It came like that, except that all the BinaryEquivalent strings were BinaryEquivalent = '' instead of having numbers inside.

The problem is when I enter two characters when the program is displaying. For example, entering "BBB" will output 11, as will 'BBBBBB'.

Upvotes: 0

Views: 158

Answers (3)

Michał Niklas
Michał Niklas

Reputation: 54332

Your solution is good only if your hex number is single hex digit. If you want to convert longer numbers you will have to do some corrections.

  1. Result can be simple int, start it with 0
  2. all BinaryEquivalent should be ints so use BinaryEquivalent = 0
  3. in for loop you must increase your result, use: Result = 16 * Result + BinaryEquivalent

Upvotes: 0

vikki
vikki

Reputation: 2814

The return statement is inside the for loop and therefore only one iteration is done, it should be:

for ThisHexDigit in Hex:
    #code

return result

and not:

for ThisHexDigit in Hex:
    #code
    return result

Upvotes: 0

DrTyrsa
DrTyrsa

Reputation: 31991

You should put return statement out of the for cycle.

Upvotes: 2

Related Questions