我制作了一个程序,以自己的方式使用*打印金字塔,但是每当我在编译器上运行程序时,该程序都会执行,并且在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="")
我期望这样的输出:
*
***
*****
*******
*********
***********
*************
***************
答案 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 = 10
,len(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