倒序循环,创建钻石图案

4
我写了一个程序,允许用户输入菱形的高度,并使用循环以星号打印出来。我的代码现在看起来像这样:

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) * "*")

它将会输出以下这种菱形形状:
      *
     ***
    *****
   *******
  *********
  *********
   *******
    *****
     ***
      *

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


diamond5时,list(reversed(range(diamond-1)))[3, 2, 1, 0],而list(range(diamond-1, -1, -1))[4, 3, 2, 1, 0]。这是因为范围range(5)是从零到四的数字,不包括五。 - Patrick Haugh
1
range(diamond-1, -1, -1) 包括 diamond-1,而 range(diamond-1) 则不包括。 - DYZ
1个回答

3

因为它们属于不同的范围:

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

range 包括起始点,但不包括结束点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接