MINERVA 发表于 2020-3-23 21:16:12

PYTHON 的一点问题~

1.def factorial(n):
        result = n
        for i in range(1,n):
                result *=i
        return result

>>> factorial(5)
120
>>> factorial(10)
3628800


上面代码是讲递归时,让我们先用自己的方法做出来的——阶乘
我看给的示例比我复杂许多,想问问这个可不可以用
示例答案中,为什么要写%d的阶乘是%d的、,这是什么意思?————指%d,一定要用%d嘛,感觉这个可有可无

2.在讲lambda时,有道题的答案有些迷惑,就是就在【1,10)中将偶数剔除掉,这个步骤——return x%2 不太明白,这个步骤不是说将x除以2所得到的余数嘛,为什么就可以将奇偶分开
谢谢解答~

qiuyouzhi 发表于 2020-3-23 21:20:06

1,%d是格式化操作符,学到这个地步应该懂,不然建议回炉重造
2,因为x % 2==0,而0是False,所以为False的都被剔除掉,只剩下不为False(奇数)

sunrise085 发表于 2020-3-23 21:25:47

你理解的很对,用递归做阶乘就是比较复杂,消耗会很大。不用递归,用循环做阶乘会很简单。
之所以用递归做阶乘,仅仅是因为这个案例来解释递归很容易让人理解,汉诺塔递归,有的人就理解不了。

%d的问题,那是print输出的一种格式化字符。你可以看看这个帖子,应该就明白了。
第二个问题,没程序我没太明白你说的是什么。需要结合程序上下文才能知道为什么是return x%2

bigbird0419 发表于 2020-3-24 03:09:48

感谢楼上sunrise085提供的print输出的帖子,收藏

zltzlt 发表于 2020-3-24 13:14:31

1. %d 是格式化整数,当然也可以不用,直接打印结果即可。

2. filter() 函数过滤值是看真假,所以 return x%2 可以写成 return bool(x%2)。当 x 为奇数时,x % 2 为 1,bool(1) 为 True;反过来,当 x 为偶数时,x % 2 为 0,bool(0) 为 False。filter() 会把所有值为假的元素过滤掉,所以就过滤掉了偶数

永恒的蓝色梦想 发表于 2020-3-24 13:55:08

不想用%d可以用str.format和f-string

tommyyu 发表于 2020-3-28 17:53:09

由于C语言的影响,所以会打%d{:10_256:}
页: [1]
查看完整版本: PYTHON 的一点问题~