mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-12-01 00:41:09 +00:00
3b63857b65
* added automated doctest to decimal_to_hexadecimal.py in conversions * improved error handling and added more test cases in decimal_to_hexadecimal.py * implemented 0x notation and simplified AssertionError * fixed negative notation and added comparison test against Python hex function
75 lines
2.0 KiB
Python
75 lines
2.0 KiB
Python
""" Convert Base 10 (Decimal) Values to Hexadecimal Representations """
|
|
|
|
# set decimal value for each hexadecimal digit
|
|
values = {
|
|
0:'0',
|
|
1:'1',
|
|
2:'2',
|
|
3:'3',
|
|
4:'4',
|
|
5:'5',
|
|
6:'6',
|
|
7:'7',
|
|
8:'8',
|
|
9:'9',
|
|
10:'a',
|
|
11:'b',
|
|
12:'c',
|
|
13:'d',
|
|
14:'e',
|
|
15:'f'
|
|
}
|
|
|
|
def decimal_to_hexadecimal(decimal):
|
|
"""
|
|
take integer decimal value, return hexadecimal representation as str beginning with 0x
|
|
>>> decimal_to_hexadecimal(5)
|
|
'0x5'
|
|
>>> decimal_to_hexadecimal(15)
|
|
'0xf'
|
|
>>> decimal_to_hexadecimal(37)
|
|
'0x25'
|
|
>>> decimal_to_hexadecimal(255)
|
|
'0xff'
|
|
>>> decimal_to_hexadecimal(4096)
|
|
'0x1000'
|
|
>>> decimal_to_hexadecimal(999098)
|
|
'0xf3eba'
|
|
>>> # negatives work too
|
|
>>> decimal_to_hexadecimal(-256)
|
|
'-0x100'
|
|
>>> # floats are acceptable if equivalent to an int
|
|
>>> decimal_to_hexadecimal(17.0)
|
|
'0x11'
|
|
>>> # other floats will error
|
|
>>> decimal_to_hexadecimal(16.16) # doctest: +ELLIPSIS
|
|
Traceback (most recent call last):
|
|
...
|
|
AssertionError
|
|
>>> # strings will error as well
|
|
>>> decimal_to_hexadecimal('0xfffff') # doctest: +ELLIPSIS
|
|
Traceback (most recent call last):
|
|
...
|
|
AssertionError
|
|
>>> # results are the same when compared to Python's default hex function
|
|
>>> decimal_to_hexadecimal(-256) == hex(-256)
|
|
True
|
|
"""
|
|
assert type(decimal) in (int, float) and decimal == int(decimal)
|
|
hexadecimal = ''
|
|
negative = False
|
|
if decimal < 0:
|
|
negative = True
|
|
decimal *= -1
|
|
while decimal > 0:
|
|
decimal, remainder = divmod(decimal, 16)
|
|
hexadecimal = values[remainder] + hexadecimal
|
|
hexadecimal = '0x' + hexadecimal
|
|
if negative:
|
|
hexadecimal = '-' + hexadecimal
|
|
return hexadecimal
|
|
|
|
if __name__ == '__main__':
|
|
import doctest
|
|
doctest.testmod()
|