Python 3.x 我需要编写一个程序来打印以下图案:
我需要制作以下图案:Python 3.x 我需要编写一个程序来打印以下图案:,python-3.x,Python 3.x,我需要制作以下图案: 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1 我已经写了一个代码,它产生相同的结果,但是是右边向上的形式。我不明白怎么把它翻过来 for i in range(1, 6 + 1): for j in range(1, rows + 1): if(j < i): print(' ', end = ' ')
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
我已经写了一个代码,它产生相同的结果,但是是右边向上的形式。我不明白怎么把它翻过来
for i in range(1, 6 + 1):
for j in range(1, rows + 1):
if(j < i):
print(' ', end = ' ')
else:
print(i, end = ' ')
print()
(1,6+1)范围内的i的:
对于范围(1,行+1)内的j:
如果(j
您可以使用range()倒计时。
:
编辑:这在行>=12时有点失败,值得一提的是,在这个实现中找到了bug,并提供了另一个干净的解决方案。但是,我们可以通过使用制表符(\t
)而不是空格来模拟制表(见底部)
为什么不简单一点呢
rows = 6
l = list(range(rows))
for i in range(rows):
print(" " * 2*i + " ".join(str(x) for x in l[:rows-i]))
编辑:如果需要排列,请尝试以下操作:
>>> for i in range(rows):
... x = " " * 2*i + " ".join(str(x) for x in l[:rows-i])
... print(x[::-1])
6 5 4 3 2 1
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1
较大行数的错误:
>>> rows = 14
>>> l = list(range(rows))
>>> for i in range(rows):
... print(" " * 2*i + " ".join(str(x) for x in l[:rows-i]))
...
0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 1 2 3 4 5 6 7 8 9 10 11 12
0 1 2 3 4 5 6 7 8 9 10 11
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6
0 1 2 3 4 5
0 1 2 3 4
0 1 2 3
0 1 2
0 1
0
修补程序1:使用标签。如果您的制表符长度与我相同,并且您使用的话,这可以正常工作。因此,从我所看到的情况来看,您正在尝试制作表单:
1
21
321
4321
54321
654321
因此,循环需要反转,并且需要添加一个空格填充部分
rows = 6
for i in range(1, rows+1):
out = ''
for j in range(1, rows):
out += ' '
for j in range(i, 0, -1):
out += str(j)
print(out)
rows -=1
使用列表理解的一行语句是
pattern = '\n'.join((' ' * 2 * i) + ' '.join(str(n) for n in range(1, num + 1)) for i, num in enumerate(range(6, -1, -1)))
为了澄清,您可以看看在Python交互终端上执行的以下命令
>>> pattern = '\n'.join((' ' * 2 * i) + ' '.join(str(n) for n in range(1, num + 1)) for i, num in enumerate(range(6, -1, -1)))
>>>
>>> print(pattern)
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
>>>
建议对此类重复性工作使用函数方法(如果您想尝试使用多个示例)
此解决方案与您的解决方案相似,只是做了一些更改
它首先打印出三角形形状所需的空间数
然后它计数到
count
然后它移动到下一行
num = 6
for i in range(num,0,-1):
print(' '*(num - i), end='')
for j in range(i):
print(j + 1, end=' ')
print()
如果使用的值大于10,则会产生奇怪的效果
1234567891011241516
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14
1 2 3 4 5 6 7 8 9 10 11 12 13
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1.
您可以使用tablate将所有内容保留在其列中。在这里,我还使用了列表理解来减少代码大小。代码: 输出:
----------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14
1 2 3 4 5 6 7 8 9 10 11 12 13
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1.
- - - - - - - - - -- -- -- -- -- -- --
这里的行是什么?
与原始问题相同(即,未指定)。行的值是什么??就超出终端大小而言,几乎没有什么是好的。在单元格中的字符数超过制表符长度之前,制表符将正常工作。对您来说,这可能是3,但如果终端宽度为157列,则在任何输入计数超过42的终端中,我的输出都无法读取。即使使用制表法,也会使每一列的宽度等于要在其中打印的最长单个元素。有了tablate,这些信息在文本文件中的可读性可以保持更长时间,但我想我们都同意,这可能是毫无用处的。
1
21
321
4321
54321
654321
rows = 6
for i in range(1, rows+1):
out = ''
for j in range(1, rows):
out += ' '
for j in range(i, 0, -1):
out += str(j)
print(out)
rows -=1
pattern = '\n'.join((' ' * 2 * i) + ' '.join(str(n) for n in range(1, num + 1)) for i, num in enumerate(range(6, -1, -1)))
>>> pattern = '\n'.join((' ' * 2 * i) + ' '.join(str(n) for n in range(1, num + 1)) for i, num in enumerate(range(6, -1, -1)))
>>>
>>> print(pattern)
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
>>>
def print_num_triangle(n=6):
"""
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
"""
pattern = '\n'.join((' ' * 2 * i) + ' '.join(str(n) for n in range(1, num + 1)) for i, num in enumerate(range(n, -1, -1)))
print(pattern)
if __name__ == "__main__":
print_num_triangle(10)
# 1 2 3 4 5 6 7 8 9 10
# 1 2 3 4 5 6 7 8 9
# 1 2 3 4 5 6 7 8
# 1 2 3 4 5 6 7
# 1 2 3 4 5 6
# 1 2 3 4 5
# 1 2 3 4
# 1 2 3
# 1 2
# 1
#
print_num_triangle(7)
# 1 2 3 4 5 6 7
# 1 2 3 4 5 6
# 1 2 3 4 5
# 1 2 3 4
# 1 2 3
# 1 2
# 1
print_num_triangle() # default -> 6
# 1 2 3 4 5 6
# 1 2 3 4 5
# 1 2 3 4
# 1 2 3
# 1 2
# 1
num = 6
for i in range(num,0,-1):
print(' '*(num - i), end='')
for j in range(i):
print(j + 1, end=' ')
print()
from tabulate import tabulate
count = 16
numbers = [[''] * (count - i) + [j+1 for j in range(i)] for i in range(count, 0, -1)]
print(tabulate(numbers))