为什么编译器不会在while循环中停止迭代

时间:2019-01-03 18:46:55

标签: python-3.x

我制作了一个程序,以自己的方式使用*打印金字塔,但是每当我在编译器上运行程序时,该程序都会执行,并且在for循环结束其迭代之后不会停止,这是我认为应该停止执行的程序经过10次迭代。

a = "           "
b = ""    
for i in range(10):
    a = a[:-1]
    b = (b * i) + '*'
    print('\n')
    for k in range(i):
        print("{}{}".format(a,b), end="")

我期望这样的输出:

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

2 个答案:

答案 0 :(得分:1)

您的问题可能来自您的b分配。

让我们在第i步中计算b的长度(从0到10)(b(n)= b(n-1)*索引+1)

  

b(0)= 0 * 0 +1 = 1

     

b(1)= 1 * 1 +1 = 2

     

b(2)= 2 * 2 +1 = 5

     

b(3)= 5 * 3 +1 = 16

依此类推,我们可以看到b的长度呈指数增长,例如对于index = 10len(b) = 986410

这个增加的字符串可能会使编译器变慢。

您可能想尝试一下不将字符串保留在内存中的代码。

height = 10
for i in range(height):
    print(' '*(height-i-1)+'*'*(2*i+1))

输出:

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

答案 1 :(得分:0)

请尝试以下改进的代码:

a = "           "       # empty string to be attached at the front and back (length is 11)
for i in range(10):     # height of pyramid
    a = a[:-1]          # make string a bit smaller to compensate for
    b = '*' * (i*2 + 1) # the increasing amount of '*'s
    print("{}{}{}".format(a, b, a)) # prints the pyramid

len(a)应该是金字塔的高度加上最后一行所需的填充量。例如:

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

最下面一行还剩2个空格,金字塔的高度为4。这意味着a的长度应为6。使用a a = ' '*(height + padding)