说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)编写一个 Python 函数,传入一个整数,判断这个数字是几位数,不能将数字转为字符串等序列,不能使用内置库和三方库。
比如:
len_digits(132148)
# 6
len_digits(618)
# 3
len_digits(9)
# 1
len_digits(10)
# 2
len_digits(0)
# 1
代码如下:
def len_digits(x):
x = abs(x)
if x < 10:
return 1
return 1 + len_digits(x/10)
# 方法 2
def len_digits(x):
if (x//10 == 0):
return 1
else:
return 1 + len_digits(x // 10)
# 方法 3
def len_digits(x):
if x == 0:
return 0
return len_digits(x // 10) + 1
len_digits(132148)
# 6
len_digits(618)
# 3
len_digits(9)
# 1
len_digits(10)
# 2
len_digits(0)
# 1
注:以上方法如果位数超大,会报递归错误:比较中超过了最大递归深度:
RecursionError: maximum recursion depth exceeded in comparison
代码如下:
# 方法 1
def len_digits(x):
count = 0
while(x > 0):
count += 1
x = x //10
return count
# 方法 2
def len_digits(x):
result = 1
divider = 10
while x % divider != x:
divider *= 10
result += 1
return result
len_digits(132148)
# 6
len_digits(618)
# 3
len_digits(9)
# 1
len_digits(10)
# 2
len_digits(1)
# 1
len_digits(2e100)
# 101
注:不支持无穷大数
理解递归算法。
(完)
更新时间:2024-08-16 22:34:23 标签:python 习题 数字