WHCSRL 技术网

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

起初我的想法是,在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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python技能树基础语法循环29423 人正在系统学习中
推荐阅读