如何解决为什么这个while循环与for循环在python中查找数字的阶乘没有相同的用法?
我是编程和此代码的新手:
def factorial(n):
number = 1
result = 1
for x in range(n):
result *= number
number += 1
return result
可以很好地找到数字 n 的阶乘。
但是,一旦我将代码更改为:
def factorial(n):
number = 1
result = 1
while number < n:
result *= number
number += 1
return result
当它看起来是同一段代码时(至少对我而言),它无法按预期工作。
谁能解释为什么这个“while”循环与“for”循环的工作方式不同?谢谢。
解决方法
for x in range(n)
从 0
迭代到 n - 1
。
while number < n
从 1
迭代到 n - 1
,少一次迭代。
如果将 while
更改为 while number - 1 < n
,两个循环将相等。
Consider following examples
n = 5
number = 1
for x in range(n):
print("foo")
number += 1
输出 foo
5 次,同时
n = 5
number = 1
while number < n:
print("foo")
number += 1
输出 foo
4 次。如果您想了解更多信息,请搜索一对一错误。这就是为什么建议在您事先知道运行次数的情况下使用 for
的原因。
让我们看看发生的事情的不同:
In [6]: def factorial(n):
...: number = 1
...: result = 1
...: for x in range(n):
...: print(f"multiplying {result} by {number}")
...: result *= number
...: number += 1
...: return result
...:
In [7]: factorial(5)
multiplying 1 by 1
multiplying 1 by 2
multiplying 2 by 3
multiplying 6 by 4
multiplying 24 by 5
Out[7]: 120
In [9]: def factorial(n):
...: number = 1
...: result = 1
...: while number < n:
...: print(f"multiplying {result} by {number}")
...: result *= number
...: number += 1
...: return result
...:
In [10]: factorial(5)
multiplying 1 by 1
multiplying 1 by 2
multiplying 2 by 3
multiplying 6 by 4
Out[10]: 24
我们可以看到第二个循环运行的时间少了 1,这是因为 range(n) 从 0 开始,而不是从 1 开始,所以你的循环又运行了一次
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。