Python 3.x 为什么编译器不';循环时不要停止迭代
我用我自己的方式用*制作了一个程序来打印金字塔,但是每当我在编译器上运行我的程序时,程序就会被执行,并且不会在for循环结束迭代后停止,下面是我的程序,我认为它应该在10次迭代后停止执行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
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