Source code for kyu_7.significant_figures.number_of_sigfigs

#  Created by Egor Kostan.
#  GitHub: https://github.com/ikostan
#  LinkedIn: https://www.linkedin.com/in/egor-kostan/


[docs]def number_of_sigfigs(number: str) -> int: """ return the number of sigfigs in the passed in string "number" :param number: :return: """ number = normalize_string(number) if number == '0': return 0 if number == '0.0': return 1 result = 0 for i, char in enumerate(number): if char.isdigit() and not (i == 0 and char == '0'): result += 1 return result
[docs]def normalize_string(number: str) -> str: """ Normalize string by converting it into a number and back to string once again :param number: :return: """ if '.' not in number: number = str(int(number)) number = remove_extra_zeroes(number) else: number = remove_extra_leading_zeroes(number) return number
[docs]def remove_extra_zeroes(number: str) -> str: """ Remove all zeroes from the end of the string :param number: :return: """ index = None for i in range(-1, len(number) * -1, -1): if number[i] == '0': index = i else: break if index is not None: return number[0:index] return number
[docs]def remove_extra_leading_zeroes(number: str) -> str: """ Remove all extra leading zeroes from the head of the string :param number: :return: """ new_number = str(float(number)) after_dot = len(number[number.index('.'):]) new_after_dot = len(new_number[new_number.index('.'):]) if after_dot == new_after_dot: return new_number else: return new_number + ('0' * (after_dot - new_after_dot))