修复代码以生成一个三角形。

5

我是一名初学者,正在尝试自学Python。我一直在编写一些基本的形状练习代码,到目前为止,我已经有了以下代码来制作一个对角线。

size = input('Please enter the size: ')
chr  = raw_input('Please enter the drawing character: ')

row = 1
while row <= size:

    col = 1
    while col < row:
        print ' ', 
        col = col + 1
    print chr

    row = row + 1
print ''

我得到了这个输出:
X
 X
  X
   X

我需要一些关于如何将这个变成一个三角形的帮助,类似于这样...

X X X X
  X X X
    X X
      X

如何设置循环,使字符显示成三角形状的输出,希望能提供任何解释。

3个回答

5

您可以做以下事情:

>>> for i in xrange(4):
...     print '  ' * i + 'X ' * (4 - i)
...
X X X X
  X X X
    X X
      X

i 的值从 0 到 3(使用 xrange),它将打印字符串' '(两个空格)i 次,并且总共打印 (4 - i)'X '。这意味着它将按预期打印倒三角形。


Python确实是最好的方式,但我认为OP想学习一些基本算法 :) 无论如何+1 - Maxime Lorant

3
最简单的解决方法是将字符print chr,打印出来,而不是空格print ' ',
要将结果垂直翻转,只需简单修改条件,从while col < row:改为while col < (size - row + 1):即可。最后,要水平翻转,添加一个循环以打印空格即可。
size = input('Please enter the size: ')
chr  = raw_input('Please enter the drawing character: ')

row = 1
while row <= size:

    col = 1
    while col < row:
        print ' ',
        col = col + 1

    col = 1
    while col < (size - row + 1):
        print chr, 
        col = col + 1
    print chr

    row = row + 1
print ''

最后,您可以稍微简化这个过程:
size = input('Please enter the size: ')
chr  = raw_input('Please enter the drawing character: ')

row = 1
while row <= size:

    col = 1
    while col < size:
        if col < row:
            print ' ',
        else:
            print chr,
        col = col + 1
    print chr

    row = row + 1
print ''

结果:

Please enter the size: 4
Please enter the drawing character: x
x x x x
  x x x
    x x
      x

当然,您可以通过查看Simeon Visser的答案来使这个过程变得非常简单。


谢谢!这正是我一直在尝试做的事情! - user2955471

2

我之前写了一些关于形状的代码,它比你需要的要更加详细,但是这里是代码:

>>> def make_triangle(size, siblings=1, step=1, char='*'): 
    return '\n'.join([' '.join(line) for line in [[char * (i-(step*sib)) + ' ' * (((size-(step*sib))-(i-(step*sib)))) for sib in xrange(siblings)] for i in xrange(1, size+1)]])

制作一些三角形:
>>> print make_triangle(4, char='X') # standing
X   
XX  
XXX 
XXXX
>>> print make_triangle(4, char='X')[::-1] # hanging (reversed)
XXXX
 XXX
  XX
   X

一些额外的功能:

>>> print make_triangle(6,3,2)
*                 
**              
***    *       
****   **     
*****  ***  * 
****** **** **

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接