6

我想用python制作这张图片!

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

我输入了这个:

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

可悲的是,这似乎产生了由正确数量的点组成的东西,如上图所示,但这些点星号中的每一个都被彼此隔开,而不是作为一个整体正确。

有人对我如何实现我想要的有一个聪明的想法吗?

4

5 回答 5

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

被解析为

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

因为%and*运算符具有相同的优先级并且从左到右[ docs ]分组。您需要添加括号,如下所示:

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)相当于for(int x = 0; x < 10; x++)在 Java 或 C 中。

于 2011-09-05T12:53:37.670 回答
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, '*')
... 
         *
        **
       ***
      ****
     *****
    ******
   *******
  ********
 *********
**********

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

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

于 2011-09-05T12:53:41.893 回答
2

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

x=1
while x<10:
 print '%10s' % ('*'*x)
 x=x+1
于 2011-09-05T12:55:04.777 回答
1
print '\n'.join(' ' * (10 - i) + '*' * i for i in range(10))
于 2011-09-05T12:54:08.737 回答
1

确切地说,由于您的图片以 10 个星号结尾,因此您需要。

for i in range(1, 11):
    print "%10s"%('*' *i)
于 2011-09-05T13:09:44.187 回答