向后循环,创建菱形图案

Backwards looping, creating a diamond pattern

我制作了一个程序,允许用户输入钻石的高度,它会使用循环打印星号。我的代码现在看起来像这样:

diamond = int(input("Height": )

for i in range(diamond-1):
    print((diamond-i) * " " + (2*i+1) * "*")
for i in range(diamond-1, -1, -1):
    print((diamond - i) * " " + (2 * i + 1) * "*")

钻石会像这样看起来很完美(钻石 == 6):

      *
     ***
    *****
   *******
  *********
 ***********
  *********
   *******
    *****
     ***
      *

现在,如果我进行一些更改,而不是像这样编写向后循环:

for i in reversed(range(diamond-1)):
    print((diamond - i) * " " + (2 * i + 1) * "*")

它将像这样打印出钻石:

      *
     ***
    *****
   *******
  *********
  *********
   *******
    *****
     ***
      *

所以我的问题是:第一个向后循环和我写的第二个有什么区别?为什么他们结果如此不同?

因为它们的范围不同:

>>> diamond = 6
>>> range(diamond-1, -1, -1)
[5, 4, 3, 2, 1, 0]
>>> list(reversed(range(diamond-1)))
[4, 3, 2, 1, 0]

range包括起点,不包括终点。