2013-03-22 53 views
2

我必须编写一个递归函数asterisk_triangle,它需要一个整数,然后返回由许多行组成的星号三角形。python中的星号三角形

例如,这是一个4行星号三角形。

* 
** 
*** 
**** 

我想出了这个功能:

def asterisk_triangle(n): 
    """ 
    takes an integer n and then returns an 
    asterisk triangle consisting of (n) many lines 
    """ 
    x = 1 
    while (x <= n): 
     print("*" * x) 
     x = x + 1 
    return 

而且还我不得不通过操纵第一函数创建一个倒三角形的星号。

我想出了这个作用和效果:

def upside_down_asterisk_triangle(n): 
    """ 
    takes an integer n and then returns a backwards 
    asterisk triangle consisting of (n) many lines 
    """ 
    x = 0 
    while (x < n): 
      print("*" * (n-x)) 
    x = x + 1 
    return 


**** 
*** 
** 
* 

现在我必须处理这些函数来创建一个向后星号三角形。

* 
    ** 
*** 
**** 

而且一个倒挂的星号三角形。

**** 
*** 
    ** 
    * 

我应该实现哪些功能?

我已经试过在函数后面使用反向字符串命令[:: - 1],它没有工作。

+0

你不能只是刚刚向后运行同一个循环吗? – erdekhayser 2013-03-22 00:41:13

+0

刚刚拿出来,但这些功能目前不递归。不知道这是否是要求的核心部分,但可能是。 – 2013-03-22 00:42:50

回答

5

我以前已经回答过同样的问题。请记住,您提到的功能都不是recursive函数。你可以阅读更多关于递归here。这是我提到的例子here

的Python 3.X

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

asterix_triangle(5) 

在这里,你有一个倒挂的递归函数的版本。

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

upside_down_asterix_triangle(5) 

Python的2.X

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

asterix_triangle(5) 

在这里,你有一个倒挂的递归函数的版本。

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

upside_down_asterix_triangle(5) 

编辑:截图显示在我的IDE中运行该脚本。

enter image description here

EDIT2:添加的代码,根据Python 3.x都有

EDIT3工作:为Python 3添加了迭代函数。X

def create_pyramid(rows): 
    for i in range(rows): 
     print((' ' * (rows- i - 1) + '*' * (2 * i + 1))) 

print((create_pyramid(5))) 

def create_upside_down_pyramid(rows): 
    for i in reversed(list(range(rows))): 
     print((' ' * (rows- i - 1) + '*' * (2 * i + 1))) 

print((create_upside_down_pyramid(5))) 
+0

随时我键入你给我的代码并运行它,它给出了“打印”后第二个引号的语法错误 – Kuma 2013-03-22 00:55:31

+0

@AkumaUkpo我更新了一个替代非递归函数的帖子以及代码的屏幕截图我的电脑上的布局。 – eandersson 2013-03-22 01:03:40

+0

[链接](http://postimg.org/image/66rd454eh/)[链接](http://postimg.org/image/924gb08eh)我截取了代码和错误消息的屏幕截图。我究竟做错了什么? @富士 – Kuma 2013-03-22 01:21:43