Asterisk art in python

ぃ、小莉子 提交于 2019-11-28 08:13:01

问题


I would like to produce this picture in python!

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

I entered this:

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

Which sadly seems to produce something composed of the right number of dots as the picture above, but each of those dot asterisks are separated by spaced apart from one another, rather than justified right as a whole.

Anybody have a clever mind on how I might achieve what I want?


回答1:


 '%10s'    %'*'*x

is being parsed as

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

because the % and * operators have the same precedence and group left-to-right[docs]. You need to add parentheses, like this:

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

If you want to loop through a range of numbers, it's considered more idiomatic to use a for loop than a while loop. Like this:

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

for x in range(0, 10) is equivalent to for(int x = 0; x < 10; x++) in Java or C.




回答2:


string object has rjust and ljust methods for precisely this thing.

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

or, alternatively:

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

My second example uses a space character as the printable character, and * as the fill character.

The argument to ljust or rjust is the terminal width. I often use these for separating sections with headings when you have chatty debug printout, e.g. print '--Spam!'.ljust(80, '-').




回答3:


It's because of the operator precedence, use this one:

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



回答4:


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



回答5:


To be exact, as your picture ends with 10 asterisks, you need.

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


来源:https://stackoverflow.com/questions/7308344/asterisk-art-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!