范围内的单人纸牌负数有什么作用?
What a solitaire negative number on range does?
我正在做 John Zelle 关于 Python 的书中的练习,他要求使用循环函数来做斐波那契数列。
没搞定后,我看了看他的决议,是这样的:
n = int(input("Enter the value of n: "))
curr, prev = 1, 1
for i in range(n-2):
curr, prev = curr+prev, curr
print("The nth Fibonacci number is", curr)
虽然我确实理解了他所做的一部分,但我错过的部分是 (n-2)
范围。
我在 Whosebug 上查看了一下,人们说范围内的负数可以追溯到列表的末尾。但在这种情况下,如果用户提示1,结果将是range(-1)
.
我的猜测是作者这样做是为了让 for 循环不对斐波那契数列的前两个值求和,因为它们都是 1,并且只有在用户提示 2 来回之后,循环才真正开始加起来。我猜对了吗?
>>> range(-1)
range(0, -1)
因此如果n为1或2且curr(设置为1)为结果,则不会进入for循环。
如果为此输入0或1,代码不进入循环,结果为curr的初始值,即1 。对于任何更高的值,循环将迭代计算正确的值。
您对负值的记忆有点偏差:负索引将从 iterable(例如列表、元组、字符串)的另一端开始工作。一个 range 不完全是 class;本例中的结果是一个空范围。
澄清 OP 评论后
我看到了你的困惑。 range returns 给定值的可迭代。但是,您似乎将限制与索引混淆了。让我们使用一般形式:
r = range(left, right, step)
r[pos]
左*默认为0; **step 默认为 1
这里有一些例子:
>>> r = range(0, 20, 2)
>>> r[-1]
18
>>> r = range(0, -1)
>>> r
[]
>>> r = range(0, -10, -2)
>>> r
[0, -2, -4, -6, -8]
>>> r[-2]
-6
请注意第二个和第三个示例,其中我们对端点使用负值。负 endpoint 和负 index 之间存在区别。端点用于构建列表;如果端点不按步骤隐含的顺序排列,则结果范围为空列表。 range(0, -1)就是这样一个例子。
一旦构建了列表,例如使用 range(0, 20, 2),然后 使用负数 index[= 对该列表的引用45=] 将从列表的右端开始计数。请注意第三个示例,创建一个从 "backward"、0 到 -8 的列表。在这种情况下,负索引也适用于右侧。负右端值、负步长和负索引是三种不同的用法。
这能解决问题吗?
我正在做 John Zelle 关于 Python 的书中的练习,他要求使用循环函数来做斐波那契数列。
没搞定后,我看了看他的决议,是这样的:
n = int(input("Enter the value of n: "))
curr, prev = 1, 1
for i in range(n-2):
curr, prev = curr+prev, curr
print("The nth Fibonacci number is", curr)
虽然我确实理解了他所做的一部分,但我错过的部分是 (n-2)
范围。
我在 Whosebug 上查看了一下,人们说范围内的负数可以追溯到列表的末尾。但在这种情况下,如果用户提示1,结果将是range(-1)
.
我的猜测是作者这样做是为了让 for 循环不对斐波那契数列的前两个值求和,因为它们都是 1,并且只有在用户提示 2 来回之后,循环才真正开始加起来。我猜对了吗?
>>> range(-1)
range(0, -1)
因此如果n为1或2且curr(设置为1)为结果,则不会进入for循环。
如果为此输入0或1,代码不进入循环,结果为curr的初始值,即1 。对于任何更高的值,循环将迭代计算正确的值。
您对负值的记忆有点偏差:负索引将从 iterable(例如列表、元组、字符串)的另一端开始工作。一个 range 不完全是 class;本例中的结果是一个空范围。
澄清 OP 评论后
我看到了你的困惑。 range returns 给定值的可迭代。但是,您似乎将限制与索引混淆了。让我们使用一般形式:
r = range(left, right, step)
r[pos]
左*默认为0; **step 默认为 1
这里有一些例子:
>>> r = range(0, 20, 2)
>>> r[-1]
18
>>> r = range(0, -1)
>>> r
[]
>>> r = range(0, -10, -2)
>>> r
[0, -2, -4, -6, -8]
>>> r[-2]
-6
请注意第二个和第三个示例,其中我们对端点使用负值。负 endpoint 和负 index 之间存在区别。端点用于构建列表;如果端点不按步骤隐含的顺序排列,则结果范围为空列表。 range(0, -1)就是这样一个例子。
一旦构建了列表,例如使用 range(0, 20, 2),然后 使用负数 index[= 对该列表的引用45=] 将从列表的右端开始计数。请注意第三个示例,创建一个从 "backward"、0 到 -8 的列表。在这种情况下,负索引也适用于右侧。负右端值、负步长和负索引是三种不同的用法。
这能解决问题吗?