鱼C论坛

 找回密码
 立即注册
查看: 885|回复: 6

[已解决]6.6.2章 写一个求阶乘的函数 举例疑惑

[复制链接]
发表于 2020-6-29 11:56:10 | 显示全部楼层 |阅读模式

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

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

x
教材6.6.2章 写一个求阶乘的函数 正整数的阶乘函数,假设n=5,那么要求计算出1*2*3*4*5的结果。
我按 课本上的例题,敲了一段代码

def jiecheng(n):
    for i in range(1,n):
        i *= i+1
    return n
n=int (input ('请输入数字:'))
j = jiecheng(n)
print (j)

这段代码计算的数值有误,于是改成

def jiecheng(n):
    for i in range(1,n):
        n *= i
    return n
n=int (input ('请输入数字:'))
j = jiecheng(n)
print (j)

请教老师,这样的两种写法,区别在哪里。第二段代码可以正确计算出数值来。
最佳答案
2020-6-29 13:06:53



第一个代码的错在 认为 for 循环不会把之前的 i 值给覆盖,实际上是会的,因为 range 是个产生一个整数类型的容器

而 for i in range 这样的循环就是把 range 这容器里面的值一个个拿出来,重新赋值给 i ,导致每次赋值都会把之前你 i 得到的值所覆盖了

所以最后返回的是 i 的值为  (n-1)n


第二个就是正确的写法 ~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-29 12:00:22 From FishC Mobile | 显示全部楼层
每一次循环 i 会被重新复制为
range 中的数
造成错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 13:06:53 | 显示全部楼层    本楼为最佳答案   



第一个代码的错在 认为 for 循环不会把之前的 i 值给覆盖,实际上是会的,因为 range 是个产生一个整数类型的容器

而 for i in range 这样的循环就是把 range 这容器里面的值一个个拿出来,重新赋值给 i ,导致每次赋值都会把之前你 i 得到的值所覆盖了

所以最后返回的是 i 的值为  (n-1)n


第二个就是正确的写法 ~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 13:22:15 | 显示全部楼层
第一个 return 的是n   输入什么就会返回什么    for循环中的值算了 但是并没有返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 14:05:27 | 显示全部楼层
liuzhengyuan 发表于 2020-6-29 12:00
每一次循环 i 会被重新复制为
range 中的数
造成错误

谢谢老师
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 14:06:01 | 显示全部楼层
Twilight6 发表于 2020-6-29 13:06
第一个代码的错在 认为 for 循环不会把之前的 i 值给覆盖,实际上是会的,因为 range 是个产生一个整 ...

谢谢老师
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 14:13:38 | 显示全部楼层

  客气了~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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