Skip to content

Commit

Permalink
Hacktoberfest: Added Octal Number to Hexadecimal Number Conversion Al…
Browse files Browse the repository at this point in the history
…gorithm (#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 <[email protected]>

* Update conversions/octal_to_hexadecimal.py

fix: improvement updates to octal to hexadecimal

Co-authored-by: Tianyi Zheng <[email protected]>

* Update conversions/octal_to_hexadecimal.py

fix: Readablility improvements to octal to hexadecimal convertor

Co-authored-by: Tianyi Zheng <[email protected]>

* Update conversions/octal_to_hexadecimal.py

fix: readability improvements in octal_to_hexadecimal.py

Co-authored-by: Tianyi Zheng <[email protected]>

* Update conversions/octal_to_hexadecimal.py

fix: readability improvements in octal_to_hexadecimal.py

Co-authored-by: Tianyi Zheng <[email protected]>

* 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 <[email protected]>
  • Loading branch information
developer-kush and tianyizheng02 authored Oct 17, 2023
1 parent 00165a5 commit c6c3bd3
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions conversions/octal_to_hexadecimal.py
Original file line number Diff line number Diff line change
@@ -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("---")

0 comments on commit c6c3bd3

Please sign in to comment.