bin(num). convert ZERO and negative decimal numbers to binary. (#1093)

* bin(num) can convert ZERO and negative decimal numbers to binary. Consistent with built-in python bin(x) function.

* bin(num) can convert ZERO and negative decimal numbers to binary. Consistent with built-in python bin(x) function.

* Added doctests. bin(num) can convert ZERO and negative decimal numbers to binary. Consistent with built-in python bin(x) function.

* Added doctests. bin(num) can convert ZERO and negative decimal numbers to binary. Consistent with built-in python bin(x) function.

* Added doctests. bin(num) can convert ZERO and negative decimal numbers to binary. Consistent with built-in python bin(x) function.

* doctests still failing.

* Doctests added.
This commit is contained in:
Syed Waleed Hyder 2019-08-03 20:00:10 +02:00 committed by Christian Clauss
parent 9c0cbe3307
commit e313141904

View File

@ -2,24 +2,57 @@
def decimal_to_binary(num):
"""Convert a Decimal Number to a Binary Number."""
"""
Convert a Integer Decimal Number to a Binary Number as str.
>>> decimal_to_binary(0)
'0b0'
>>> decimal_to_binary(2)
'0b10'
>>> decimal_to_binary(7)
'0b111'
>>> decimal_to_binary(35)
'0b100011'
>>> # negatives work too
>>> decimal_to_binary(-2)
'-0b10'
>>> # other floats will error
>>> decimal_to_binary(16.16) # doctest: +ELLIPSIS
Traceback (most recent call last):
...
TypeError: 'float' object cannot be interpreted as an integer
>>> # strings will error as well
>>> decimal_to_binary('0xfffff') # doctest: +ELLIPSIS
Traceback (most recent call last):
...
TypeError: 'str' object cannot be interpreted as an integer
"""
if type(num) == float:
raise TypeError("'float' object cannot be interpreted as an integer")
if type(num) == str:
raise TypeError("'str' object cannot be interpreted as an integer")
if num == 0:
return "0b0"
negative = False
if num < 0:
negative = True
num = -num
binary = []
while num > 0:
binary.insert(0, num % 2)
num >>= 1
return "".join(str(e) for e in binary)
if negative:
return "-0b" + "".join(str(e) for e in binary)
return "0b" + "".join(str(e) for e in binary)
def main():
"""Print binary equivelents of decimal numbers."""
print("\n2 in binary is:")
print(decimal_to_binary(2)) # = 10
print("\n7 in binary is:")
print(decimal_to_binary(7)) # = 111
print("\n35 in binary is:")
print(decimal_to_binary(35)) # = 100011
print("\n")
if __name__ == '__main__':
main()
if __name__ == "__main__":
import doctest
doctest.testmod()