使用星星打印箭头

时间:2013-10-28 10:47:52

标签: python python-2.7

我正在尝试使用* s打印出箭头。 到目前为止,我的代码看起来像这样。

def head(n):
    while n > 0:
        print n * "*"
        n = n - 1

print head(input())

并且它有效,但是如果我输入11,它会打印出来:

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

但我希望它像这样打印:

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

箭头较少,但我无法弄清楚如何做到这一点。

5 个答案:

答案 0 :(得分:4)

根据您想要的行数,它使函数更容易思考:

def head(lines):
    for n in range(1,lines*2,2):           # count 1,3,5...
        print(('*'*n).center(lines*2-1))

输出:

>>> head(5)
    *    
   ***   
  *****  
 ******* 
*********

这是另一种使用可变长度格式的方法,这种格式不太明显:

def head(lines):
    for n in range(1,lines*2,2):
        print('{:^{}}'.format('*'*n,lines*2-1))

答案 1 :(得分:2)

使用字符串格式:

def head(size):
    n=1
    while n < size+1:
        stars = n * "*"
        print '{:^30}'.format(stars)
        n += 2

它会将你的星号放在30个字符宽的场地上。

答案 2 :(得分:1)

def printHead(n):
    for l in range(1,n):
        print " "*(n-l)+"*"*(1 if l==1 else 2*l-1)

每行有level-1个空格。然后,如果它是第一级开始,否则它有2*level-1

>>> printHead(6)
     *
    ***
   *****
  *******
 *********

答案 3 :(得分:0)

  1. 一条线上的星数等于2n - 1,其中n是行数。
  2. 我不会在此函数中调用参数“n”,因为我不清楚它是指行还是星星。
  3. 您可以使用center函数根据指定的宽度用空格包围字符串。您希望箭头以最长的线为中心,因此您需要2个变量,一个用于跟踪当前线,另一个用于记住最大线。
  4. 您希望以与您所演示的相反的方向进行迭代,因为您希望箭头指向而不是向下。
  5. 我认为这应该适合你:

    def head(total_lines):
      for current_line in range(1, total_lines + 1):
        print ((2 * current_line - 1) * "*").center(2 * total_lines - 1)
    

答案 4 :(得分:0)

def head(n):
    total = 2 * n - 1
    s = ''
    for i in xrange(1, n + 1):
        k = 2 * i - 1
        s += ' ' * ((total - k) / 2) + '*' * k + '\n'
    return s
相关问题