wufan2140 发表于 2020-6-29 11:56:10

6.6.2章 写一个求阶乘的函数 举例疑惑

教材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)

请教老师,这样的两种写法,区别在哪里。第二段代码可以正确计算出数值来。

liuzhengyuan 发表于 2020-6-29 12:00:22

每一次循环 i 会被重新复制为
range 中的数
造成错误

Twilight6 发表于 2020-6-29 13:06:53




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

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

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


第二个就是正确的写法 ~

FC_Huang 发表于 2020-6-29 13:22:15

第一个 return 的是n   输入什么就会返回什么    for循环中的值算了 但是并没有返回

wufan2140 发表于 2020-6-29 14:05:27

liuzhengyuan 发表于 2020-6-29 12:00
每一次循环 i 会被重新复制为
range 中的数
造成错误

谢谢老师

wufan2140 发表于 2020-6-29 14:06:01

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

谢谢老师

Twilight6 发表于 2020-6-29 14:13:38

wufan2140 发表于 2020-6-29 14:06
谢谢老师

{:10_297:}客气了~~
页: [1]
查看完整版本: 6.6.2章 写一个求阶乘的函数 举例疑惑