Fix reverse_bits.py: correct 32-bit reversal and improve docstrings (#12924)
* Fix reverse_bits.py (#12868) * Update reverse_bits.py * Update reverse_bits.py * Update reverse_bits.py * Update reverse_bits.py * Update reverse_bits.py --------- Co-authored-by: Maxim Smolskiy <mithridatus@mail.ru>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
def get_reverse_bit_string(number: int) -> str:
|
def get_reverse_bit_string(number: int) -> str:
|
||||||
"""
|
"""
|
||||||
return the bit string of an integer
|
Return the reverse bit string of a 32 bit integer
|
||||||
|
|
||||||
>>> get_reverse_bit_string(9)
|
>>> get_reverse_bit_string(9)
|
||||||
'10010000000000000000000000000000'
|
'10010000000000000000000000000000'
|
||||||
@@ -8,76 +8,76 @@ def get_reverse_bit_string(number: int) -> str:
|
|||||||
'11010100000000000000000000000000'
|
'11010100000000000000000000000000'
|
||||||
>>> get_reverse_bit_string(2873)
|
>>> get_reverse_bit_string(2873)
|
||||||
'10011100110100000000000000000000'
|
'10011100110100000000000000000000'
|
||||||
|
>>> get_reverse_bit_string(2550136832)
|
||||||
|
'00000000000000000000000000011001'
|
||||||
>>> get_reverse_bit_string("this is not a number")
|
>>> get_reverse_bit_string("this is not a number")
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
TypeError: operation can not be conducted on a object of type str
|
TypeError: operation can not be conducted on an object of type str
|
||||||
"""
|
"""
|
||||||
if not isinstance(number, int):
|
if not isinstance(number, int):
|
||||||
msg = (
|
msg = (
|
||||||
"operation can not be conducted on a object of type "
|
"operation can not be conducted on an object of type "
|
||||||
f"{type(number).__name__}"
|
f"{type(number).__name__}"
|
||||||
)
|
)
|
||||||
raise TypeError(msg)
|
raise TypeError(msg)
|
||||||
bit_string = ""
|
bit_string = ""
|
||||||
for _ in range(32):
|
for _ in range(32):
|
||||||
bit_string += str(number % 2)
|
bit_string += str(number % 2)
|
||||||
number = number >> 1
|
number >>= 1
|
||||||
return bit_string
|
return bit_string
|
||||||
|
|
||||||
|
|
||||||
def reverse_bit(number: int) -> str:
|
def reverse_bit(number: int) -> int:
|
||||||
"""
|
"""
|
||||||
Take in an 32 bit integer, reverse its bits,
|
Take in a 32 bit integer, reverse its bits, return a 32 bit integer result
|
||||||
return a string of reverse bits
|
|
||||||
|
|
||||||
result of a reverse_bit and operation on the integer provided.
|
|
||||||
|
|
||||||
>>> reverse_bit(25)
|
>>> reverse_bit(25)
|
||||||
'00000000000000000000000000011001'
|
2550136832
|
||||||
>>> reverse_bit(37)
|
>>> reverse_bit(37)
|
||||||
'00000000000000000000000000100101'
|
2751463424
|
||||||
>>> reverse_bit(21)
|
>>> reverse_bit(21)
|
||||||
'00000000000000000000000000010101'
|
2818572288
|
||||||
>>> reverse_bit(58)
|
>>> reverse_bit(58)
|
||||||
'00000000000000000000000000111010'
|
1543503872
|
||||||
>>> reverse_bit(0)
|
>>> reverse_bit(0)
|
||||||
'00000000000000000000000000000000'
|
0
|
||||||
>>> reverse_bit(256)
|
>>> reverse_bit(256)
|
||||||
'00000000000000000000000100000000'
|
8388608
|
||||||
|
>>> reverse_bit(2550136832)
|
||||||
|
25
|
||||||
>>> reverse_bit(-1)
|
>>> reverse_bit(-1)
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValueError: the value of input must be positive
|
ValueError: The value of input must be non-negative
|
||||||
|
|
||||||
>>> reverse_bit(1.1)
|
>>> reverse_bit(1.1)
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
TypeError: Input value must be a 'int' type
|
TypeError: Input value must be an 'int' type
|
||||||
|
|
||||||
>>> reverse_bit("0")
|
>>> reverse_bit("0")
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
TypeError: '<' not supported between instances of 'str' and 'int'
|
TypeError: Input value must be an 'int' type
|
||||||
"""
|
"""
|
||||||
|
if not isinstance(number, int):
|
||||||
|
raise TypeError("Input value must be an 'int' type")
|
||||||
if number < 0:
|
if number < 0:
|
||||||
raise ValueError("the value of input must be positive")
|
raise ValueError("The value of input must be non-negative")
|
||||||
elif isinstance(number, float):
|
|
||||||
raise TypeError("Input value must be a 'int' type")
|
|
||||||
elif isinstance(number, str):
|
|
||||||
raise TypeError("'<' not supported between instances of 'str' and 'int'")
|
|
||||||
result = 0
|
result = 0
|
||||||
# iterator over [1 to 32],since we are dealing with 32 bit integer
|
# iterator over [0 to 31], since we are dealing with a 32 bit integer
|
||||||
for _ in range(1, 33):
|
for _ in range(32):
|
||||||
# left shift the bits by unity
|
# left shift the bits by unity
|
||||||
result = result << 1
|
result <<= 1
|
||||||
# get the end bit
|
# get the end bit
|
||||||
end_bit = number % 2
|
end_bit = number & 1
|
||||||
# right shift the bits by unity
|
# right shift the bits by unity
|
||||||
number = number >> 1
|
number >>= 1
|
||||||
# add that bit to our ans
|
# add that bit to our answer
|
||||||
result = result | end_bit
|
result |= end_bit
|
||||||
return get_reverse_bit_string(result)
|
return result
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user