问题描述:
Try to find out how many zeros a given number has at the end.
Input: A positive Int
Output: An Int.
def end_zeros(num: int) -> int:
# your code here
return None
if __name__ == '__main__':
print("Example:")
print(end_zeros(0))
# These "asserts" are used for self-checking and not for an auto-testing
assert end_zeros(0) == 1
assert end_zeros(1) == 0
assert end_zeros(10) == 1
assert end_zeros(101) == 0
assert end_zeros(245) == 0
assert end_zeros(100100) == 2
print("Coding complete? Click 'Check' to earn cool rewards!")
题目很简单,统计在数字末尾有多少个零。
末尾有零,说明能被10整除。于是可以用for循环加判断,
def end_zeros(num: int) -> int:
# your code here
n=0
for i in range(len(str(num))):
if num%10 ==0:
n=n+1
num=num/10
else:
break
return n
其他用户的解决方案一:
def end_zeros(num: int) -> int:
return len(s := str(num)) - len(s.rstrip('0'))
看一下str.rstrip的用法:
str.
rstrip
([chars])
返回原字符串的副本,移除其中的末尾字符。 chars 参数为指定要移除字符的字符串。 如果省略或为 None
,则 chars 参数默认移除空白符。 实际上 chars 参数并非指定单个后缀;而是会移除参数值的所有组合。
就是移除字符串末尾的字符,无论有多少。
上面的解释就是,用没有去掉零的数字字符串长度减去去掉零的数字字符串长度,得到的当然只有零的个数,非常巧妙,而且简洁。
解决方案二:利用正则表达式
import re
def end_zeros(num: int) -> int:
return len(re.findall('0*$', str(num))[0])
re.
findall
(pattern, string, flags=0)
对 string 返回一个不重复的 pattern 的匹配列表, string 从左到右进行扫描,匹配按找到的顺序返回。如果样式里存在一到多个组,就返回一个组合列表;就是一个元组的列表(如果样式里有超过一个组合的话)。空匹配也会包含在结果里。