2011-09-05 69 views
5

我想用python制作这张图片!python中的星号艺术

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

我进入这样的:

x=1 
while x<10: 
print '%10s' %'*'*x 
x=x+1 

哪个可悲似乎产生点与上述图象的权数构成的东西,但是每个那些点的星号是由彼此间隔开的分离的而不是作为一个整体的合理权利。

任何人都有一个聪明的想法,我可以如何实现我想要的?

+8

Obelix呢? – Tsar

+3

3编辑和没有更正Asterix-> Asterisk =) – Tsar

回答

13
'%10s' %'*'*x 

被解析为

('%10s' % '*') * x 

因为%*操作符具有相同的优先级和组左到右[docs]。您需要添加括号,就像这样:

x = 1 
while x < 10: 
    print '%10s' % ('*' * x) 
    x = x + 1 

如果你想通过一系列的数字回路,它被认为是更地道使用比一个while循环for循环。就像这样:

for x in range(1, 10): 
    print '%10s' % ('*' * x) 

for x in range(0, 10)等同于Java或C

+0

棒极了!瓦拉!多好的回答!非常感谢你 - 完美的作品! - 这是我看到的第一个答案,所以我要评论感谢你,但当然还有很多人要感谢其他人!当然我最深切的赞赏! – Azz

+0

我认为你的意思是“Voila!”,法语是“There is it!”,“Presto!”或者“Woot,doggie!” – PaulMcG

+0

http://en.wikipedia.org/wiki/Wallah_(Arabic) –

8

字符串对象有rjustljust方法正是这个东西for(int x = 0; x < 10; x++)

>>> n = 10 
>>> for i in xrange(1,n+1): 
... print (i*'*').rjust(n) 
... 
     * 
     ** 
     *** 
     **** 
    ***** 
    ****** 
    ******* 
    ******** 
********* 
********** 

,或者可选地:

>>> for i in reversed(xrange(n)): 
... print (i*' ').ljust(n, '*') 
... 
     * 
     ** 
     *** 
     **** 
    ***** 
    ****** 
    ******* 
    ******** 
********* 
********** 

我的第二个例子使用空格字符作为可打印的字符,和*作为填充字符。

ljustrjust的参数是终端宽度。我经常使用这些功能来分隔带有标题的部分,例如,当您进行健谈调试打印输出时print '--Spam!'.ljust(80, '-')

1
print '\n'.join(' ' * (10 - i) + '*' * i for i in range(10)) 
2

这是因为运算符优先级的,用这一个:

x=1 
while x<10: 
print '%10s' % ('*'*x) 
x=x+1 
1

确切地说,作为您的图片与10个星号结束,你需要的。

for i in range(1, 11): 
    print "%10s"%('*' *i)