鱼C论坛

 找回密码
 立即注册
查看: 2518|回复: 9

[已解决]开心,终于写出了自己想要第23课递归,又有一个疑问,请大大帮忙!

[复制链接]
发表于 2018-6-27 16:23:00 | 显示全部楼层 |阅读模式

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

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

x
感谢凌九霄让我明白了递归的逻辑,感觉不牢固,又复习了一下,终于写出了自己想要的二进制转换:

def transec(n):
    if n:
        return transec(n//2)+str(n%2)
    else:
        return ''

x=int(input('请输入一个数:'))
print(transec(x))

然后我就想到10进制转换列表(课后第2题)也可以这么干,可惜不如愿,请大大们帮忙!
先写我最喜欢的转换:) n=345432625454325  x=list(str(n)) print(x),哈哈。大大们不能用这个哈。

我写的一个,出来的结果太奇葩了,我还在想。else的return到底该怎么写。。大大们多多帮忙!
def get_digits(n):
    if n:
        return list(str(get_digits(n//10)))+list(str(n%10))
    else:
        return ''
x=int(input('请输入一个数:'))
print(get_digits(x))
最佳答案
2018-6-27 17:10:39
  1. def get_digits(n):
  2.     lst = []
  3.     if n % 10 == n:
  4.         lst.append(n)

  5.     else:
  6.         lst = get_digits(n // 10)
  7.         lst.append(n % 10)
  8.     return lst
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-27 17:10:39 | 显示全部楼层    本楼为最佳答案   
  1. def get_digits(n):
  2.     lst = []
  3.     if n % 10 == n:
  4.         lst.append(n)

  5.     else:
  6.         lst = get_digits(n // 10)
  7.         lst.append(n % 10)
  8.     return lst
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-27 17:11:14 | 显示全部楼层
这题是不是无解的,大大们都不出手。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-27 17:20:05 | 显示全部楼层
本帖最后由 凌九霄 于 2018-6-27 17:24 编辑
cable 发表于 2018-6-27 17:11
这题是不是无解的,大大们都不出手。。。


你那return我表示没看明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-27 17:44:34 | 显示全部楼层

这个大大实在太好了,赞你,每次你的回复都能让我学会新的东东!

学到这里,要整合着用了,我觉得前面学的不是很扎实,我多问一下哈。。。原谅我厚颜。。。
1、是否我前面写的那串是不是无解的,因为函数是不能return完全空值的,会赋一个NONE出来;
2、我前面类似的也写了你这串,但是一直不成功,参考你这个,我改了一下,竟然成功了
def get_digits(n):
    if n:
        lst=get_digits(n//10)
        lst.append(n%10)
        return lst
    else:
        return []

x=int(input('请输入一个数:'))
print(get_digits(x))

我前面自己写的这串是这样的:
if n:
    return get_digits(n//10).append(n%10)
结果一直告诉我无类对象不能用append,我简直要气炸了!!!然后也一直没改出正确的来,看了你的,我大约有点概念了,可以的话,能再讲的细一点吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-27 17:50:37 | 显示全部楼层
凌九霄 发表于 2018-6-27 17:20
你那return我表示没看明白

我是被逼的狠了,才用的这个笨办法,是想底层反一个空值出来,然后可以转成列表相加实现;

然后,我为什么我会用这个笨办法,就是因为无类对象不能用append把我难住了,我之前写的是这样的:
return get_digits(n//10).append(n%10)

非常感谢你,一些细碎的不扎实的地方,在你的指导下,一点点在弥补。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-27 17:53:41 | 显示全部楼层
cable 发表于 2018-6-27 17:44
这个大大实在太好了,赞你,每次你的回复都能让我学会新的东东!

学到这里,要整合着用了,我觉得前面 ...

有点小问题,你输入0试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-27 18:18:36 | 显示全部楼层
0也不行,我试了下面这个也不行,return 出来的值做str和list会把[],''全部当成字符来处理,所以加出来的东西会很奇葩。但至少我明白一个道理,最后一层取不到,可以取倒数第二层嘛,哈哈!谢谢你的小技巧!
def get_digits(n):
    if n%10==n:
        return list(str(n))
    else:
        return list(str(get_digits(n//10)))+list(str(n%10))


x=int(input('请输入一个数:'))
print(get_digits(x))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-28 15:51:48 | 显示全部楼层
我就是说你写的这个有问题

  1. def get_digits(n):
  2.     if n:
  3.         lst=get_digits(n//10)
  4.         lst.append(n%10)
  5.         return lst
  6.     else:
  7.         return []

  8. x=int(input('请输入一个数:'))
  9. print(get_digits(x))
复制代码


输入0会输出空列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-28 17:07:40 | 显示全部楼层
凌九霄 发表于 2018-6-28 15:51
我就是说你写的这个有问题

感谢大大,我只能改成这个破样子了,还是你的简洁一点:
def get_digits(n):
    if n % 10 != n:
        lst=get_digits(n//10)
        lst.append(n%10)
        return lst
    else:
        lst=[]
        lst.append(n%10)
        return lst

x=int(input('请输入一个数:'))
print(get_digits(x))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 05:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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