Python中的星号艺术

6
我希望用Python生成这张图片!
         *
        **
       ***
      ****
     *****
    ******
   *******
  ********
 *********
**********

我输入了以下内容:

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

很不幸,这个方式似乎会产生与上面图片中相同数量的点所组成的内容,但是每个星号之间都有留白,而不是完整地对齐在右侧。

有没有聪明的人能告诉我怎样实现我的需求呢?


8
奥比利克斯怎么样? - Ruslan
3
3次编辑都没有更正Asterix-> Asterisk =) - Ruslan
5个回答

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

被解析为

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

因为%*运算符具有相同的优先级并且从左到右进行分组[文档]。您需要添加括号,像这样:

x = 1
while x < 10:
    print '%10s' % ('*' * x)
    x = x + 1
如果您想循环一系列数字,使用 for 循环比使用 while 循环更符合习惯。就像这样:
for x in range(1, 10):
    print '%10s' % ('*' * x)

for x in range(0, 10) 相当于 Java 或 C 中的 for(int x = 0; x < 10; x++)


太棒了!哇啦!多好的答案啊!非常感谢 - 完美地解决了问题!这是我看到的第一个答案,所以我在评论中感谢你,当然也要感谢其他所有人!我深深地感激! - Azz
我认为你的意思是“Voila! ”,法语意为“就是这样!”,“Presto! ”或“Woot, doggie!” - PaulMcG

8

对于这种情况,字符串对象具有 rjustljust 方法。这些方法可用于格式化文本。

>>> 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, '-')


2

这是由于运算符优先级的原因,使用这个:

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

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

1
准确地说,由于您的图片以10个星号结束,您需要。
for i in range(1, 11):
    print "%10s"%('*' *i)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接