嵌套Python循环 - 如何创建反转三角形

时间:2018-04-29 16:13:29

标签: python

size = 3
for line in range (1, size +1):
    for asterisk in range(1, line +1):
        print ('*', end = '')
    print()

此代码生成

*
**
***

我被要求更改代码,以便它反转星号'三角形'像这样:

  *
 **
***

我无法弄清楚如何做到这一点,我真的很难理解循环正在做什么以及如何改变代码以生成正确的三角形。

我提供了一些提示:"可以使用print(' ', end = '')生成空格 还有:"请注意,我们希望第一行以两个空格开始,第二行有空格,最后一行没有空格。我们可以通过从三角形的大小中减去线的数量(3)并添加1&#34来获得此值;

据我所知第二点,它应该是 size - line + 1 ,对吧?我不明白的是如何将其构建到循环中。据我所知,我需要改变第二个嵌套循环,但是,我不能在我的生活中弄清楚我是如何做出这样的结果:

   *
  * *
 * * *

1 个答案:

答案 0 :(得分:0)

当你写“我不明白是如何将它构建到循环中”时,因为打印空格不应该在你的最里面的循环中。您希望在每行上打印空格但不在星号中打印空格,因此您希望空格循环位于整个循环内,但之前是星号循环(而不是在其中)。这是让它发挥作用的一种方法。

size = 3
for line in range (1, size +1):
    for space in range(1, size - line + 1):
        print(' ', end='')
    for asterisk in range(1, line +1):
        print ('*', end = '')
    print()

另一个不太重要的注意事项是,你的范围中有很多“+1”,因为你从1开始范围。从零开始是更加pythonic,这也将简化你的代码,尽管那些“ + 1并不会全部消失,我们添加一个“-1”。所以你可以这样做:

size = 3
for line in range(size):
    for space in range(size - line - 1):
        print(' ', end='')
    for asterisk in range(line + 1):
        print ('*', end = '')
    print()

另请注意,您实际上并不需要所有这些循环 - Python还有其他方法可以实现这些目标。首先,您可以将字符串乘以常量以获得字符串的重复。换句话说,'*' * 5会产生'*****'。这给你:

size = 3
for line in range(size):
    print(' ' * (size - line - 1), end='')
    print('*' * (line + 1))

或者甚至更好,

size = 3
for line in range (1, size + 1):
    print(' ' * (size - line) + '*' * (line))

(我在那里移动了“+1”以更清楚。)你也可以使用join()方法删除那个外环,但我会在这里停止。