python踩雷(二):递归时遇到TypeError: unsupported operand type(s) for *: ‘int‘ and ‘NoneType‘ 解决

先来看一段递归时的代码:

# 递归版阶乘

temp = int(input('输入一个正整数: '))

def factorial(n):
    if n == 1:
        print(1)
    else:
        print( n * factorial(n-1))

factorial(temp)

起初我的想法是,在factorial()函数里,直接用print打印,在后续直接调用函数就可以得到结果了。
但是,在实际调用时报错如下: TypeError: unsupported operand type(s) for *: 'int' and 'NoneType' 意思是,不支持int类型和非类型数据的运算。
这句话本身是可以理解的,但是究竟错在哪里呢?
于是我又按照正常的格式写了一次代码:

# 递归版阶乘

temp = int(input('输入一个正整数: '))
def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

print(factorial(temp))

这次重新运行,就没有报错了。
这说明,是函数里的print出了问题。 于是,我仔细查了print函数的用法。print函数可以输出 各种单个数据类型,但是没有打印组合数据类型的用法。所以,函数里还是老老实实的用return,然后在调用的时候 加上print打印出结果,避免踩雷。
不知道有没有小伙伴和我遇到同样情况的,我的解释仅供参考,毕竟我也是python的初学者,理解还不够深刻。谢谢~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值