用Python打印金字塔图案

时间:2013-11-18 21:57:55

标签: python

我正在尝试使用递归函数在Python中打印倒置的金字塔,同时还使用缩进。到目前为止我所拥有的是:

def printStars(n, indent):
  if n == 0:
      return
  elif n == 1:
      print(indent * ' ' * '*')
  else:
      print(n * '*' + indent * ' ')
      printStars(n-2,indent)

printStars(10,2)打印:

**********
*******
******
****
**

但我想要打印:

  **********
   ********
    ******
     ****
      **

任何帮助将不胜感激

编辑: 我现在有:

def printStars(n, indent):
  if n == 0:
      return
  elif n == 1:
      print(n)
  else:
      print(indent * ' ' + n * '*')
      printStars(n-2,indent)

它提供金字塔但不是正确的方式。

3 个答案:

答案 0 :(得分:0)

让我们假设您的输入是基本大小,在这种情况下,我们首先需要解决偶数或奇数问题。

def pyramid(size):
  if (size%2 == 0): #even
    print '*' * size
    i = 1
    while i < size/2:
      str1 = (' ' * i)
      str2 = ( '*' * (size - 2*i))
      print str1 + str2 + str1
      i+=1
  else:
    print '*' * size
    i = 1
    while i < size/2:
      str1 = (' ' * i)
      str2 = ( '*' * (size - 2*i))
      print str1 + str2 + str1
      i+=1
    str1 = (' ' * i)
    print str1+'*'+str1

我没有看到输入需要缩进,但这可以很容易地考虑到这段代码。认为这是一个很好的练习,可以理解试图将我的例子用作指南的问题。

答案 1 :(得分:0)

def printStars(n, indent):
  if n == 0:
      return
  elif n == 1:
      print(indent * ' ' + '*')
  else:
      print(indent * ' ' + n * '*')
      printStars(n - 2, indent + 1)

您的代码的主要区别是什么?函数调用的参数,以及n == 1时应该发生的事情。

答案 2 :(得分:0)

似乎有效的解决方案之一是:

def stars_pyramid(n, indent):

    if n <= 0:
        return
    s = '*' * n
    i = indent * ' '
    print i + s

    stars_pyramid(n-2, indent+1)



n = 10
indent = 0

stars_pyramid(n, indent) outputs:

**********
 ********
  ******
   ****
    **