1

私は Google の App Inventor のバックグラウンドを持っています。オンラインクラスを受講しています。

タスク: ネストされた while ループでアスタリスクから三角形を作成します。三角形の底辺は 19 個のアスタリスク、高さは 10 個のアスタリスクです。

ここにいます。

Num = 1

while Num <= 19:

        print '*'
        Num = Num * '*' + 2
print Num
4

6 に答える 6

1

Num = Num * '*' + 2 で行っていることは次のとおりです。

  • 文字列を作成します (Num-times '*') これはあなたが望むものです
  • 次に2つ追加しようとすると、文字列intに追加する方法がないため(少なくともPythonでは) 、おそらくcannot concatenate 'str' and 'int' objects のようなエラーが表示されます。代わりに、おそらくNumだけに 2 つ追加する必要があります。
于 2013-05-13T06:44:51.227 に答える
1
n = 0
w = 19
h = 10
rows = []
while n < h:
    rows.append(' '*n+'*'*(w-2*n)+' '*n)
    n += 1
print('\n'.join(reversed(rows)))

プロデュース

         *         
        ***        
       *****       
      *******      
     *********     
    ***********    
   *************    #etc...
  ***************   #2 space on both sides withd-4 *
 *****************  #1 space on both sides, width-2 *
******************* #0 spaces
>>> len(rows[-1])
19
>>> len(rows)
10
于 2013-05-13T07:03:15.553 に答える
1

ここにクールなトリックがあります。Python では、文字列に を使用して数値を掛けることができます*。これは、連結された文字列の多くのコピーになります。

>>> "X "*10
'X X X X X X X X X X '

また、次のように 2 つの文字列を連結できます+

>>> " "*3 + "X "*10
'   X X X X X X X X X X '

したがって、Python コードは単純な for ループにすることができます。

for i in range(10):
    s = ""
    # concatenate to s how many spaces to align the left side of the pyramid?
    # concatenate to s how many asterisks separated by spaces?
    print s
于 2013-05-13T06:49:51.650 に答える
0

string-objects から「center」メソッドを使用できます。

width = 19

for num in range(1, width + 1, 2):
     print(('*' * num).center(width))

         *         
        ***        
       *****       
      *******      
     *********     
    ***********    
   *************   
  ***************  
 ***************** 
*******************
于 2013-05-16T16:04:15.513 に答える
0

通常、ネストされた while ループをこの問題に使用することはありませんが、1 つの方法を次に示します。

rows = 10
while rows:
    rows -=1
    cols = 20
    line = ""
    while cols:
        cols -=1
        if rows < cols < 20-rows:
            line += '*'
        else:
            line += ' '
    print line
于 2013-05-13T07:00:21.950 に答える
0

(count - 1) * 2 + 1各行のアスタリスクの数を計算します。

count = 1
while count <= 10:
    print('*' * ((count - 1) * 2 + 1))
    count += 1

もちろん、簡単な方法で行くことができます。

count = 1
while count <= 20:
    print('*' * count)
    count += 2
于 2013-05-13T07:20:44.037 に答える