2013-10-28 40 views
2

我想用* s打印箭头。 到目前为止,我的代码看起来像这样。使用星号打印箭头

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

print head(input()) 

和它的作品,但举例来说,如果我输入11,它打印此:

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

但我想它来打印这样的:

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

具有较少箭,但我无法弄清楚如何去做。

+0

使用串的中心()方法。 –

回答

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) 
    * 
    *** 
    ***** 
    ******* 
********* 
2

使用字符串格式化:

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

将集中在该领域宽30个字符的星号。

+2

您应该使用奇数宽度 – Joe

+0

['ast'](http://docs.python.org/2/library/ast.html)是内置的,请考虑更改名称。 –

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

我认为这应该为你工作:

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

无效的Python。在范围(1,n + 1,2)'中使用'n。 –

+0

@MarkTolonen谢谢我爆发了Python并且正确地回答了它! –

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 
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)) 
+0

对于字符串格式的+1,打败了我的连接方法! – HennyH