Python Spaced Triangle

时间:2013-05-03 22:33:30

标签: python algorithm

我应该写一个最终的程序,如:

*     *
 *   *
  * *
   *

我有为常规代码编写的代码,但我不确定如何在其中加入空格。

def triangle(i, t = 0):
    if i == 0
        return 0
     else:
        print ' ' * (t + 1) + '*' * (i * 2 - 1)
        return triangle(i - 1, t + 1)

么?

4 个答案:

答案 0 :(得分:2)

让我们在一行中标记一些区域:

startSpaces   *   middleSpaces   *   endSpaces

对于给定的行,您希望startSpaces + 1 + middleSpaces + 1 + endSpaces等于常量。此常量为2*(i+t) + 1

第1行在t=0之前会有*个空格 最后一行在t=i之前会有*个空格(这里我使用原始的i,我知道它会通过递归而改变)

那么你能找到一个startSpacesmiddleSpacesendSpaces的模式来为你提供正确的模式吗?

请注意,else if需要额外的i==1个案,这样您才能处理只有一个*的行


这足以让您更接近解决问题。我假设它是作业,所以我不会为你解决,如果你遇到困难,可以寻找更多的线索。

答案 1 :(得分:2)

尝试:

def triangle(i, t = 0):
    if i == 0:
        print (t+1) *' '+ '*'

    else:
        print ' ' * (t + 1)+ '*' + ' ' * (i * 2 - 1) + '*'
        triangle(i - 1, t + 1)

triangle(5)

此代码打印:

 *         *
  *       *
   *     *
    *   *
     * *
      *

答案 2 :(得分:2)

以@kharazi的答案为基础(因为这让我想起了我早期的GWBasic编程,这让我对孩子编程感到兴奋):

def triangle(i, leftShape='*', rightShape='*', bottomShape='*', spaceShape=' ', t = 0):
    if i <= 0:
        print ((t+1)*spaceShape)+bottomShape+((t+1)*spaceShape)
    else:
        print (spaceShape*(t + 1))+leftShape+(spaceShape*(i*2-1))+rightShape+(spaceShape*(t + 1))
        triangle(i-1, leftShape, rightShape, bottomShape, spaceShape, t+1)

if __name__== '__main__':
    triangle(3)
    triangle(3, '\\', '/')
    triangle(3, '\\', '/', '~')
    triangle(5, '╚╗', '╔╝', '╚╦╝')
    triangle(5, '╚╗', '╔╝', '╚╦╝', '|')
    triangle(-2)

产生以下输出:

triangle(3)
 *     *
  *   *
   * *
    *

triangle(3, '\\', '/')
 \     /
  \   /
   \ /
    *

triangle(3, '\\', '/', '~')
 \     /
  \   /
   \ /
    ~

triangle(5, '╚╗', '╔╝', '╚╦╝')
 ╚╗         ╔╝
  ╚╗       ╔╝
   ╚╗     ╔╝
    ╚╗   ╔╝
     ╚╗ ╔╝
      ╚╦╝

triangle(5, '╚╗', '╔╝', '╚╦╝', '|')
|╚╗|||||||||╔╝|
||╚╗|||||||╔╝||
|||╚╗|||||╔╝|||
||||╚╗|||╔╝||||
|||||╚╗|╔╝|||||
||||||╚╦╝||||||

triangle(-2)
 *

答案 3 :(得分:1)

你应该使用for循环来实现这一点,递归有效,但最好不要一直使用它。这就是我所做的:

def GioTri(i):

foo = i - 1
bar = 0

for i in range(i-1):


    print ' ' * bar + "*" + " " * (foo*2 - 1) + "*" + " " * bar
    foo = foo - 1
    bar = bar + 1


print " " * bar + "*" + " " * bar 

结果如下:

*     *
 *   * 
  * *  
   *