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

数値の範囲をループしたい場合は、forwhile ループよりもループを使用する方が慣用的であると考えられています。このような:

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

文字列オブジェクトには、まさにこのことのためのメソッド がrjustあります。ljust

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

または、代わりに:

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

2 番目の例では、印刷可能な文字としてスペース文字を使用し、塗りつぶし文字として * を使用しています。

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

正確には、写真が 10 個のアスタリスクで終わるので、必要です。

for i in range(1, 11):
    print "%10s"%('*' *i)
于 2011-09-05T13:09:44.187 に答える
1
print '\n'.join(' ' * (10 - i) + '*' * i for i in range(10))
于 2011-09-05T12:54:08.737 に答える