遍历

我们现在有了背包,如果要每行显示一个背包物品,我们可以:

var 背包 = ["水瓶", "钥匙", "金币"]
print("背包中有:")
print(背包[0]) # 显示:水瓶
print(背包[1]) # 显示:钥匙
print(背包[2]) # 显示:金币

很明显这样做只能显示背包的前三个物品,假设背包很大就不能这样写了。

此时结合之前的 while 语句和 len() 获取数组长度,可以改成下面这样:

var 背包 = ["水瓶", "钥匙", "金币"]
print("背包中有:")
var 下标 = 0
while 下标 < len(背包):
    print(背包[下标])
    下标 += 1

我们声明了一个变量下标,并在循环中通过这个下标从背包中取物品,同时给下标加一,这样就可以访问背包中的每个东西,直到 下标 < len(背包)false,也就是下标达到背包大小时停止。

[!tip]

注意不要写成 下标 <= len(背包),这里不能等于,因为背包的长度是 3,而 背包[3] 是在获取第四个值,程序会出错。

for

上面这种把数组中每个元素都访问一次的行为被称为遍历,这种操作非常常见,于是有了一种专门为遍历而生的语法:

for <元素变量名> in <遍历目标>:
    <代码块>

这个东西本质上还是个循环,循环次数就是遍历目标的长度,每一轮循环中,都将从遍历目标里取出一个元素放到元素变量中。

把之前的 while 换成 for,运行结果不变,代码如下:

var 背包 = ["水瓶", "钥匙", "金币"]
print("背包中有:")
for 物品 in 背包:
    print(物品)

for 后面的 物品 变量是自动创建的,不需要我们使用 var 声明。

range

有时候我们想直接指定循环次数,例如显示 50 个 hello,这样直接用一个变量和 while 也可以搞定,但我们可以结合 range 方法和 for 来实现同样的效果:

for 当前次数 in range(50):
    print("Hello")

range 这个方法会根据括号里的数字产生一个数组,里面分别是 0、1、2、3、4...直到括号里的数字,但不包括那个数,也就是最后一个数字是 49。

不过 GDScript 还给咱们提供了一种简写方式,直接把 range(123) 写成 123 即可,例如和上面的 range(50) 效果相同的 for 可以写成 for 当前次数 in 50: