Python for循环实现阶乘及range反向遍历逻辑问题咨询
阶乘代码第4行反向遍历逻辑解释
首先贴出完整参考代码:
# factorial program n = int(input()) fact = 1 for i in range(n,1,-1): #line4 # this line print the range in reverce fact = fact*i print(fact)
核心运行逻辑
这行for循环能实现从n开始反向取值,完全靠Python内置range()函数的传参规则实现,没有特殊逻辑:
range()的三个参数顺序固定为:range(起始值, 终止边界, 步长),取值始终遵循左闭右开原则——也就是会取到起始值,但永远不会取到终止边界值,碰到边界就直接停止遍历。- 对应这行的三个参数作用分别是:
- 第一个参数传
n:指定遍历的第一个值就是用户输入的n,循环第一轮运行时i的值就等于n - 第二个参数传
1:指定遍历的停止边界,因为左闭右开的规则,取值到2就会停,不会取到1,刚好和阶乘乘到2、初始fact为1(相当于已经乘了1)的计算逻辑匹配 - 第三个参数传
-1:这是实现反向遍历的关键——步长为正数时,每次取值比上一个值大对应步长;步长为负数时,每次取值就比上一个值小对应步长,这里传-1就代表每轮循环取的i比上一轮小1
- 第一个参数传
举个实际例子就能快速理解:如果输入n=5,这行range生成的遍历序列就是5、4、3、2,循环会依次把这些值乘到初始值为1的fact变量上,最终算出1*5*4*3*2=120,也就是5的阶乘结果。
顺带提一句,这行自带的注释有两个小问题:一是这行不会执行打印操作,只是生成遍历序列;二是注释里的"reverce"是拼写错误,正确拼写是reverse。
内容的提问来源于stack exchange,提问作者Abhinav kumar
相关产品推荐
相关产品推荐

