您能帮助简化此代码并提高效率吗?我似乎不是最好的版本;我能改进什么?
1
232
34543
4567654
567898765
678901109876
这是我制作的代码:
c = -1
for y in range(1, 7):
print()
print((6-y) * " ", end="")
c += 1
for x in range(1, y+1):
print(y%10, end="")
y += 1
while y - c > 2:
print(y-2, end="")
y -= 1
答案 0 :(得分:0)
首先,我猜你并不是真的想要打印 y 值10;你真的希望将10的基数减少到0.注意你在金字塔底部有一个额外的字符。
当您在循环内部时,不更改循环参数的值。具体而言,不要在 for y 循环中更改y。
摆脱 c ;你可以从其他值中得出它。
为了灵活性,请将上限设为参数:有两个常量(6和7)取决于一个概念(行限制)。
这是我的版本:
row_limit = 7
for y in range(1, row_limit):
print()
print((row_limit-y-1) * " ", end="")
for x in range(y, 2*y):
print(x%10, end="")
for x in range(2*(y-1), y-1, -1):
print(x%10, end="")
print()
输出:
1
232
34543
4567654
567898765
67890109876
如果你真的想推送东西,你可以用字符串连接和理解来缩短循环,但它可能更难为你阅读。
for y in range(1, row_limit):
print()
print((row_limit-y-1) * " " + ''.join([str(x%10) for x in range(y, 2*y)]) + \
''.join([str(x%10) for x in range(2*(y-1), y-1, -1)]), end="")
print()
每个循环都变成了列表理解,例如:
[str(x%10) for x in range(y, 2*y)]
然后,这个字符列表没有插页符加入;这形成了一半的行。该行的后半部分是另一个循环(倒计时)。在所有这些之前,我连接了适当数量的空格。
坦率地说,我更喜欢我的第一张表格。
答案 1 :(得分:0)
这是我的实施。
Python 2 :
def print_triangle(n):
for row_num in xrange(1, n + 1):
numbers = [str(num % 10) for num in xrange(row_num, 2 * row_num)]
num_string = ''.join(numbers + list(reversed(numbers))[1:])
print '{}{}'.format(' ' * (n - row_num), num_string)
Python 3 :
def print_triangle(n):
for row_num in range(1, n + 1):
numbers = [str(num % 10) for num in range(row_num, 2 * row_num)]
num_string = ''.join(numbers + list(reversed(numbers))[1:])
print('{}{}'.format(' ' * (n - row_num), num_string))
<强>输入强>:
print_triangle(5)
print_triangle(6)
print_triangle(7)
<强>输出强>:
1
232
34543
4567654
567898765
1
232
34543
4567654
567898765
67890109876
1
232
34543
4567654
567898765
67890109876
7890123210987