cable 发表于 2018-6-27 16:23:00

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

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

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

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

然后我就想到10进制转换列表(课后第2题)也可以这么干,可惜不如愿,请大大们帮忙!
先写我最喜欢的转换:) n=345432625454325x=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

def get_digits(n):
    lst = []
    if n % 10 == n:
      lst.append(n)

    else:
      lst = get_digits(n // 10)
      lst.append(n % 10)
    return lst

cable 发表于 2018-6-27 17:11:14

这题是不是无解的,大大们都不出手。。。

凌九霄 发表于 2018-6-27 17:20:05

本帖最后由 凌九霄 于 2018-6-27 17:24 编辑

cable 发表于 2018-6-27 17:11
这题是不是无解的,大大们都不出手。。。

你那return我表示没看明白

cable 发表于 2018-6-27 17:44:34

凌九霄 发表于 2018-6-27 17:10


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

学到这里,要整合着用了,我觉得前面学的不是很扎实,我多问一下哈。。。原谅我厚颜。。。
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,我简直要气炸了!!!然后也一直没改出正确的来,看了你的,我大约有点概念了,可以的话,能再讲的细一点吗?

cable 发表于 2018-6-27 17:50:37

凌九霄 发表于 2018-6-27 17:20
你那return我表示没看明白

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

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

非常感谢你,一些细碎的不扎实的地方,在你的指导下,一点点在弥补。

凌九霄 发表于 2018-6-27 17:53:41

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

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

有点小问题,你输入0试试

cable 发表于 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))

凌九霄 发表于 2018-6-28 15:51:48

我就是说你写的这个有问题

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))

输入0会输出空列表

cable 发表于 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))
页: [1]
查看完整版本: 开心,终于写出了自己想要第23课递归,又有一个疑问,请大大帮忙!