鱼C论坛

 找回密码
 立即注册
查看: 3253|回复: 41

[技术交流] Python:每日一题 183

[复制链接]
发表于 2018-7-6 08:51:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-7-7 20:28 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
周末了,来个简单的题目。编写一个函数,参数是正负整数或0,返回是几位数。例如:
  1. >>> length(1234567890)
  2. 10
  3. >>> length(-99231234567890)
  4. 14
  5. >>> length(0)
  6. 1
  7. >>> length(8)
  8. 1
复制代码

要求:
用递归编写,很多初学者对递归掌握不好,这回用个简单的题目再练习一下递归。
不能用变成字符串再求长度或用log计算等方法。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-6 09:57:00 | 显示全部楼层
本帖最后由 凌九霄 于 2018-7-6 11:30 编辑
  1. i = 1


  2. def length(num):
  3.     global i
  4.     if num // 10 == 0:
  5.         print(i)
  6.     else:
  7.         i += 1
  8.         length(abs(num) // 10)
复制代码

点评

使用全局变量,多次调用函数结果会出错。  发表于 2018-7-7 20:31

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 10:07:14 | 显示全部楼层
本帖最后由 JessiFly 于 2018-7-6 10:09 编辑
  1. def length(n):
  2.     if n < 0:
  3.         return length(-n)
  4.     else:
  5.         if n//10 == 0:
  6.             return 1
  7.         else:
  8.             return 1 + length(n//10)
复制代码

  1. >>> length(0)
  2. 1
  3. >>> length(7)
  4. 1
  5. >>> length(-7)
  6. 1
  7. >>> length(142857)
  8. 6
  9. >>> length(-1234567890999)
  10. 13
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 11:15:21 From FishC Mobile | 显示全部楼层
def cal(n):
    if abs(int(n/10)<1:
        return 1
    else:
        return cal(int(n/10))+1

点评

2行少一个右括号  发表于 2018-7-7 20:36

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 13:38:28 | 显示全部楼层
  1. def length(x):       
  2.         return 1 if abs(x)<10 else 1+length(abs(x)//10)

  3. print(length(-99231234567890))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 15:26:23 | 显示全部楼层
本帖最后由 duliping 于 2018-7-9 09:20 编辑

尽然没看清楚要求,写了下面的代码:
  1. def mylength(num):
  2.     if num < 0:
  3.         num *= -1
  4.     return len(str(num))

  5. num = int(input('请输入一个正负整数或0:'))
  6. print(mylength(num))
复制代码

点评

要求用递归的  发表于 2018-7-7 20:45

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 15:47:20 | 显示全部楼层
本帖最后由 chongchuigu 于 2018-7-6 15:48 编辑
  1. def length(n):
  2.         if n//10==0 or n//10==-1:
  3.                 return 1
  4.         else:                               
  5.                 return 1+length(n//10)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 16:56:58 | 显示全部楼层
占位,没看清要求,代码等会上传
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 17:39:34 | 显示全部楼层
  1. def length(n, bit=0):
  2.         bit += 1
  3.         if n < 0:
  4.                 n = abs(n)
  5.         n = n // 10
  6.         if n == 0:
  7.                 return bit
  8.         else:
  9.                 return length(n, bit)


  10. print(length(1234567890))
  11. print(length(-99231234567890))
  12. print(length(0))
  13. print(length(8))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 20:24:13 | 显示全部楼层
def length(num):
        if num<0:
                num=-num
        num=num//10
        if num==0:
                return 1
        if num>0:
                return 1+length(num)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 20:27:02 | 显示全部楼层
本帖最后由 久疤K 于 2018-7-6 20:29 编辑
  1. >>> def length( n ):
  2.         if -10 < n < 10:
  3.                 return 1
  4.         return 1 + fun(n/10)

  5. >>> length(-99231234567890)
  6. 14
  7. >>> length(1234567890)
  8. 10
  9. >>> # 发现一个问题
  10. >>> # 基础还是不牢靠,,,搜了搜网上的答案,又豁然开朗
  11. >>> -99//10
  12. -10
  13. >>>
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 20:29:40 | 显示全部楼层
def length(x, digit):
    if x < 0:
        x = abs(x)
    a = x / 10
    if a < 1:
        digit += 1
        return digit
    else:
        return length(a, digit+1)

点评

你的程序还需要用户输入digit  发表于 2018-7-7 20:56

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-6 23:53:55 | 显示全部楼层
  1. def length(x):
  2.     if abs(x)<10:
  3.         return 1
  4.     else:
  5.         return length(abs(x//10))+1
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-7 00:24:05 | 显示全部楼层
def length(num):
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-7 00:24:41 | 显示全部楼层
def length(num):
    if num//10 == 0 or num//10 == -1:
        return 1
    else:
        return length(num//10) + 1

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-7 00:26:13 | 显示全部楼层
def length(num):
    if num//10 == 0 or num//10 == -1:
        return 1
    else:
        return length(num//10) + 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-7 00:31:16 | 显示全部楼层
啊啊啊昨天下午论坛崩了好难受,现在才发的了,,
  1. def lenght (num):
  2.         num = abs(num)
  3.         if num < 10:
  4.                 return 1
  5.         else:
  6.                 return 1 + lenght (num/10)
  7. while 1:
  8.         lenght (int(input('请输入一个数:')))
复制代码

点评

最后一行没有print  发表于 2018-7-7 21:01

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-7 00:33:11 | 显示全部楼层
昨天下午崩了好难受,
  1. def lenght (num):
  2.         num = abs(num)
  3.         if num < 10:
  4.                 return 1
  5.         else:
  6.                 return 1 + lenght (num/10)
  7. while 1:
  8.         lenght (int(input('请输入一个数:')))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-7 00:52:02 From FishC Mobile | 显示全部楼层
def main(mn,mm):
    if mn!=0:
        mm=main(mn//10,mm+1)
    return mm
        
n=1253698
print(main(n,0))

点评

负值时出错  发表于 2018-7-7 21:03

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-7 01:09:08 | 显示全部楼层
作为新手,以后会常来这个主题,请多关照

  1. def length(numb=0):
  2.    
  3.     #先判断输入是否合法
  4.     if type(numb) != type(1):
  5.         print('参数必须为整数!')

  6.     else:

  7.         #若为负数则把负数转换为正数后再计算
  8.         if numb < 0:
  9.             numb = numb*-1

  10.         
  11.         #设置迭代出口
  12.         if 0 <= numb < 10 :
  13.             return 1
  14.         
  15.         #用地板除方法逐级迭代减少数字的位数,每减少一位计数一次
  16.         else:
  17.             numb = numb // 10
  18.             x = length(numb) + 1
  19.         return x
复制代码

点评

题目会照顾到不同水平的鱼油,鼓励大家积极参与  发表于 2018-7-7 21:05

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 19:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表