鱼C论坛

 找回密码
 立即注册
查看: 1489|回复: 7

[已解决]0基础入门python_第23、24讲第1题

[复制链接]
发表于 2020-2-1 17:41:40 | 显示全部楼层 |阅读模式

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

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

x
1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]

def fun1(a):
    result = []
    if a:
        result = fun1(a // 10)
        return result.append(a%10)
    else:
        return []

a = int(input("输入:"))
fun1(a)        

这是我写的,有两个问题
1、为什么报错为

Traceback (most recent call last):
  File "C:\Users\asus\Desktop\guishi.py", line 10, in <module>
    fenfen(a)
  File "C:\Users\asus\Desktop\guishi.py", line 4, in fenfen
    result = fenfen(a // 10)
  File "C:\Users\asus\Desktop\guishi.py", line 4, in fenfen
    result = fenfen(a // 10)
  File "C:\Users\asus\Desktop\guishi.py", line 5, in fenfen
    return result.append("a%10")
AttributeError: 'NoneType' object has no attribute 'append'

2、这个代码思路行的通吗,如果不行,怎么修改

最佳答案
2020-2-1 17:44:22
行不通,因为 result.append() 方法没有返回值,而且 result 不能放在函数体内。

帮你修改了:
result = []


def fun1(a):
    if a:
        # 将 a % 10 添加到列表的头部
        result.insert(0, a % 10)
        fun1(a // 10)
    else:
        return


a = int(input("输入:"))
fun1(a)
print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-1 17:44:22 | 显示全部楼层    本楼为最佳答案   
行不通,因为 result.append() 方法没有返回值,而且 result 不能放在函数体内。

帮你修改了:
result = []


def fun1(a):
    if a:
        # 将 a % 10 添加到列表的头部
        result.insert(0, a % 10)
        fun1(a // 10)
    else:
        return


a = int(input("输入:"))
fun1(a)
print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-1 18:06:00 | 显示全部楼层
如果不用全局变量,可以这样写。
def fun1(a):

    if a:
        
        return [*fun1(a // 10), a % 10]
    else:
        return []
有一个问题就是当a为0时,应该返回[0],但现在返回的是[]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 19:03:39 | 显示全部楼层
zltzlt 发表于 2020-2-1 17:44
行不通,因为 result.append() 方法没有返回值,而且 result 不能放在函数体内。

帮你修改了:

为什么result不能放在函数体内呢
第0题的答案result就在函数体内

"""十进制转二进制"""
def Dec2Bin(dec):
    result = ''
   
    if dec:
        result = Dec2Bin(dec//2)
        return result + str(dec%2)
    else:
        return result

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

使用道具 举报

发表于 2020-4-11 01:12:48 | 显示全部楼层
我就是猛辣 发表于 2020-2-1 19:03
为什么result不能放在函数体内呢
第0题的答案result就在函数体内

我也想不明白为什么result不能放在函数体内啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-11 01:29:03 | 显示全部楼层
我就是猛辣 发表于 2020-2-1 19:03
为什么result不能放在函数体内呢
第0题的答案result就在函数体内


我明白了。result=[]可以在里面的,但是不能用return result + str(dec%2)。result + str(dec%2)这个代码的意思是用append对result做修改,要单独写,然后再return result,这就行了。关于代码内result是否会每次清空的问题,其实不影响,因为我的理解,这个递归到最后一次是你的a等于0了,进入了else这边得到了一个函数值为空列别,然后递归往前推一次的时候,进入if条件,最后一次得到的空列表往后append一个数字。

def formlist(x):
    result = []
    if x>0:
        result = formlist(x // 10)
        result.append(x % 10)
        return result
    else:
        return result

temp = int(input('Enter a number: '))
print(formlist(temp))


这样就是OK的,问题就是输入0的时候得到空列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-28 19:53:14 | 显示全部楼层
冬雪雪冬 发表于 2020-2-1 18:06
如果不用全局变量,可以这样写。

有一个问题就是当a为0时,应该返回[0],但现在返回的是[]

这个*号是什么意思呀?
这个函数要在互动窗口调用才行,在里面print(fun1(12345))会返回None,为啥会这样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 20:23:21 | 显示全部楼层
这个*号是什么意思呀?   ----*是解包,把一个列表变成多个参数,你可以对比一下不加*的效果
这个函数要在互动窗口调用才行,在里面print(fun1(12345))会返回None,为啥会这样?  -----不会呀,我又运行了。
>>> print(fun1(12345))
[1, 2, 3, 4, 5]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 07:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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