Source code for kyu_7.significant_figures.number_of_sigfigs
"""
Solution for -> Significant Figures.
Created by Egor Kostan.
GitHub: https://github.com/ikostan
"""
[docs]
def number_of_sigfigs(number: str) -> int:
"""
Return the number of significant figures in the given number.
:param number:
:return:
"""
number = normalize_string(number)
if number == '0':
return 0
if number == '0.0':
return 1
result: int = 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 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 = str(float(number))
after_dot: int = len(number[number.index('.'):])
new_after_dot: int = len(new_number[new_number.index('.'):])
if after_dot == new_after_dot:
return new_number
return new_number + ('0' * (after_dot - new_after_dot))