mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Hacktoberfest: Added Octal Number to Hexadecimal Number Conversion Algorithm (#10533)
* Added Octal to Hexadecimal Conversion program under 'conversions' directory * Update conversions/octal_to_hexadecimal.py fix: minor improvement to directly return hexadecimal value Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com> * Update conversions/octal_to_hexadecimal.py fix: improvement updates to octal to hexadecimal Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com> * Update conversions/octal_to_hexadecimal.py fix: Readablility improvements to octal to hexadecimal convertor Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com> * Update conversions/octal_to_hexadecimal.py fix: readability improvements in octal_to_hexadecimal.py Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com> * Update conversions/octal_to_hexadecimal.py fix: readability improvements in octal_to_hexadecimal.py Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com> * fix: Fixed all the errors in octal_to_hexadecimal.py after commiting suggested changes * fix: modified the prefix of hex numbers to the '0x' standard in octal_to_hexadecimal.py --------- Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com>
This commit is contained in:
parent
00165a5fb2
commit
c6c3bd3399
65
conversions/octal_to_hexadecimal.py
Normal file
65
conversions/octal_to_hexadecimal.py
Normal file
|
@ -0,0 +1,65 @@
|
|||
def octal_to_hex(octal: str) -> str:
|
||||
"""
|
||||
Convert an Octal number to Hexadecimal number.
|
||||
For more information: https://en.wikipedia.org/wiki/Octal
|
||||
|
||||
>>> octal_to_hex("100")
|
||||
'0x40'
|
||||
>>> octal_to_hex("235")
|
||||
'0x9D'
|
||||
>>> octal_to_hex(17)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: Expected a string as input
|
||||
>>> octal_to_hex("Av")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Not a Valid Octal Number
|
||||
>>> octal_to_hex("")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Empty string was passed to the function
|
||||
"""
|
||||
|
||||
if not isinstance(octal, str):
|
||||
raise TypeError("Expected a string as input")
|
||||
if octal.startswith("0o"):
|
||||
octal = octal[2:]
|
||||
if octal == "":
|
||||
raise ValueError("Empty string was passed to the function")
|
||||
if any(char not in "01234567" for char in octal):
|
||||
raise ValueError("Not a Valid Octal Number")
|
||||
|
||||
decimal = 0
|
||||
for char in octal:
|
||||
decimal <<= 3
|
||||
decimal |= int(char)
|
||||
|
||||
hex_char = "0123456789ABCDEF"
|
||||
|
||||
revhex = ""
|
||||
while decimal:
|
||||
revhex += hex_char[decimal & 15]
|
||||
decimal >>= 4
|
||||
|
||||
return "0x" + revhex[::-1]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
||||
|
||||
nums = ["030", "100", "247", "235", "007"]
|
||||
|
||||
## Main Tests
|
||||
|
||||
for num in nums:
|
||||
hexadecimal = octal_to_hex(num)
|
||||
expected = "0x" + hex(int(num, 8))[2:].upper()
|
||||
|
||||
assert hexadecimal == expected
|
||||
|
||||
print(f"Hex of '0o{num}' is: {hexadecimal}")
|
||||
print(f"Expected was: {expected}")
|
||||
print("---")
|
Loading…
Reference in New Issue
Block a user