From 1b3fec3f1f483f09e277a105e0708a41c56e5006 Mon Sep 17 00:00:00 2001 From: mohammadreza490 <47437328+mohammadreza490@users.noreply.github.com> Date: Fri, 11 Sep 2020 05:16:43 +0100 Subject: [PATCH] binary_to_decimal converter (#2400) * Create binary_to_decimal binary to decimal converter * Update conversions/binary_to_decimal Co-authored-by: Christian Clauss * Update binary_to_decimal * Update conversions/binary_to_decimal Co-authored-by: Christian Clauss * Update binary_to_decimal Co-authored-by: Christian Clauss --- conversions/binary_to_decimal | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 conversions/binary_to_decimal diff --git a/conversions/binary_to_decimal b/conversions/binary_to_decimal new file mode 100644 index 000000000..1f223daf8 --- /dev/null +++ b/conversions/binary_to_decimal @@ -0,0 +1,39 @@ +def bin_to_decimal(bin_string: str) -> int: + """ + Convert a binary value to its decimal equivalent + + >>> bin_to_decimal("101") + 5 + >>> bin_to_decimal(" 1010 ") + 10 + >>> bin_to_decimal("-11101") + -29 + >>> bin_to_decimal("0") + 0 + >>> bin_to_decimal("a") + ValueError: Non-binary value was passed to the function + >>> bin_to_decimal("") + ValueError: Empty string value was passed to the function + >>> bin_to_decimal("39") + ValueError: Non-binary value was passed to the function + """ + bin_string = str(bin_string).strip() + if not bin_string: + raise ValueError("Empty string was passed to the function") + is_negative = bin_string[0] == "-" + if is_negative: + bin_string = bin_string[1:] + if not all(char in "01" for char in bin_string): + raise ValueError("Non-binary value was passed to the function") + decimal_number = 0 + for char in bin_string: + decimal_number = 2 * decimal_number + int(char) + if is_negative: + decimal_number = -decimal_number + return decimal_number + + +if __name__ == "__main__": + from doctest import testmod + + testmod()