Skip to content

Added a hex-bin.py file in conversion.py #4433

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 28 commits into from
May 20, 2021
Merged
Changes from 10 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
1f6f4c6
Added a file that converts hexa to binary
ktsrivastava29 May 17, 2021
9149d37
Added file to convert hexadecimal to binary
ktsrivastava29 May 17, 2021
71cbcbc
Update hex-bin.py
ktsrivastava29 May 17, 2021
9d4e6cb
added type hint in the code
ktsrivastava29 May 17, 2021
e82db59
Added doctest
ktsrivastava29 May 17, 2021
6549855
Added code to handle exception
ktsrivastava29 May 17, 2021
65d275b
Resolved doctest issue
ktsrivastava29 May 17, 2021
fc99340
Update hex-bin.py
ktsrivastava29 May 17, 2021
cbce9e1
Modified convert function
ktsrivastava29 May 18, 2021
e794056
Added WhiteSpace around operators.
ktsrivastava29 May 18, 2021
4a36cad
Made more pythonic
ktsrivastava29 May 18, 2021
9e212c6
removed whitespace
ktsrivastava29 May 18, 2021
63c2096
Updated doctest command
ktsrivastava29 May 18, 2021
8d5c32a
Removed whitespace
ktsrivastava29 May 19, 2021
6ba22e3
imported union
ktsrivastava29 May 19, 2021
180f602
Replaced flag with is_negative
ktsrivastava29 May 19, 2021
a5c49a1
updated return type
ktsrivastava29 May 19, 2021
95e9da1
removed pip command
ktsrivastava29 May 19, 2021
77aec40
Resolved doctest issue
ktsrivastava29 May 19, 2021
14a2d8b
Resolved doctest error
ktsrivastava29 May 19, 2021
350817e
Reformated the code
ktsrivastava29 May 19, 2021
e6abb38
Changes function name
ktsrivastava29 May 20, 2021
62a52e2
Changed exception handling statements
ktsrivastava29 May 20, 2021
c02fa6a
Update and rename hex-bin.py to hex_to_bin.py
cclauss May 20, 2021
213e22a
Update newton_method.py
cclauss May 20, 2021
e24b8a3
Update matrix_operation.py
cclauss May 20, 2021
2d9cf63
Update can_string_be_rearranged_as_palindrome.py
cclauss May 20, 2021
a80cadd
Update hex_to_bin.py
cclauss May 20, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions conversions/hex-bin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# CONVERT HEXADECIMAL TO BINARY
from doctest import testmod
import math

def convert(num: str) -> str:

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also remove this whitespace

"""
Convert a hexadecimal value to its decimal equivalent
#https://stackoverflow.com/questions/1425493/convert-hex-to-binary
Here, we have used " >> " bitwise operator
Bitwise right shift:
Shifts the bits of the number to the right and fills 0 on voids left as a result.
Similar effect as of dividing the number with some power of two.
Example:
a = 10
a >> 1 = 5

>>> convert("AC")
10101100
>>> convert("9A4")
100110100100
>>> convert(" 12f ")
100101111
>>> convert("FfFf")
1111111111111111
>>> convert("F-f")
Traceback (most recent call last):
...
ValueError: invalid literal for int() with base 16:
>>> convert()
Traceback (most recent call last):
...
ValueError: Empty string was passed to the function:

"""

bin_str :str=""
flag :bool = 0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
flag :bool = 0

Let's just use is_negative instead of creating a new flag variable. The name flag is weak compared to is_negative because the former does not tell the reader what we are flagging where is_negative is self-documenting. bool in Python should contain one of two values: True or False so assigning 0 will probably be rejected by mypy and will also confuse the reader. Let's just drop flag and use is_negative instead.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is sick!!!

hex_str :str = num.strip()

if not hex_str:
return False
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as below. Simply raise a ValueError instead of returning a boolean

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The function returns an int or it raises an Exception.


is_negative : bool= hex_str[0] == "-"

if is_negative:
flag = 1
hex_string = hex_str[1:]

try:
num2 :int = int(hex_str, 16)
except ValueError:
return False

while num2 > 0:
num3 :str = str(num2 % 2)
bin_str = num3 + bin_str
num2 = num2 >> 1

if flag:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One last change, maybe we can make this if, else clause more pythonic.
Something like

return x if condition else y

return "-" + bin_str
else:
return bin_str


if __name__ == "__main__":
testmod(name = 'convert', verbose = True)