mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-27 15:01:08 +00:00
Added decimal_to_binary_recursion.py (#3266)
* Added decimal_to_binary_recursion.py * Added decimal_to_binary_recursion.py * Made changes to docstring * Use divmod() * binary_recursive(div) + str(mod) * Be kind with user input if possible * Update decimal_to_binary_recursion.py * ValueError: invalid literal for int() with base 10: 'number' Co-authored-by: Christian Clauss <cclauss@me.com>
This commit is contained in:
parent
75a9b460ad
commit
5fcd250c99
53
conversions/decimal_to_binary_recursion.py
Normal file
53
conversions/decimal_to_binary_recursion.py
Normal file
|
@ -0,0 +1,53 @@
|
|||
def binary_recursive(decimal: int) -> str:
|
||||
"""
|
||||
Take a positive integer value and return its binary equivalent.
|
||||
>>> binary_recursive(1000)
|
||||
'1111101000'
|
||||
>>> binary_recursive("72")
|
||||
'1001000'
|
||||
>>> binary_recursive("number")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: invalid literal for int() with base 10: 'number'
|
||||
"""
|
||||
decimal = int(decimal)
|
||||
if decimal in (0, 1): # Exit cases for the recursion
|
||||
return str(decimal)
|
||||
div, mod = divmod(decimal, 2)
|
||||
return binary_recursive(div) + str(mod)
|
||||
|
||||
|
||||
def main(number: str) -> str:
|
||||
"""
|
||||
Take an integer value and raise ValueError for wrong inputs,
|
||||
call the function above and return the output with prefix "0b" & "-0b"
|
||||
for positive and negative integers respectively.
|
||||
>>> main(0)
|
||||
'0b0'
|
||||
>>> main(40)
|
||||
'0b101000'
|
||||
>>> main(-40)
|
||||
'-0b101000'
|
||||
>>> main(40.8)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Input value is not an integer
|
||||
>>> main("forty")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Input value is not an integer
|
||||
"""
|
||||
number = str(number).strip()
|
||||
if not number:
|
||||
raise ValueError("No input value was provided")
|
||||
negative = "-" if number.startswith("-") else ""
|
||||
number = number.lstrip("-")
|
||||
if not number.isnumeric():
|
||||
raise ValueError("Input value is not an integer")
|
||||
return f"{negative}0b{binary_recursive(int(number))}"
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from doctest import testmod
|
||||
|
||||
testmod()
|
Loading…
Reference in New Issue
Block a user