Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 为什么编译器不';循环时不要停止迭代_Python 3.x - Fatal编程技术网

Python 3.x 为什么编译器不';循环时不要停止迭代

Python 3.x 为什么编译器不';循环时不要停止迭代,python-3.x,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

我用我自己的方式用*制作了一个程序来打印金字塔,但是每当我在编译器上运行我的程序时,程序就会被执行,并且不会在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="")
我希望输出如下:

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

请尝试以下改进的代码:

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
设为
你的问题可能来自你的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=10
len(b)=986410

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

您可能希望尝试此代码,它不会将字符串保留在内存中

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

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

你怎么知道程序没有停止?你看到了什么?它一直运行,直到我的编译器变慢,我不得不用control+c@usr25644301停止它。我想你得到了一些超出你预期的东西–我打印出了
a
b
的长度,并且
a
的数字很低,但是
b
增加到986410个字符。而且字符串会被反复打印;在最后一行上多达九次。但b=”“的长度甚至不大于1,这怎么可能@usr2564301