-1

while ループを使用して、Python で乗算表を作成しています。数字が並んでいるので、出力は奇妙です。テーブルは完成度はいいのですが、見栄えが悪いです。最後の 3 つの列をまっすぐにするにはどうすればよいですか? 出力の写真を投稿しますが、私は新しいユーザーであり、許可されません。

width = int(input("Please enter the width of the table:"))
def print_times_table(width):

    row = 0
    col = 0
    width += 1
    spaces = '  '

    while row < width:
        col = 0
        while col < width:

            print(row*col, spaces, end="")
            col += 1
        print("\n", end='')
        row +=1

print_times_table(width)

出力: http://i.stack.imgur.com/C9AzE.jpg

4

3 に答える 3

1

まず、写真は必要ありません。4 つのスペースをインデントするだけで (または {} アイコンを使用して)、出力をテキストとして表示できるはずです。

Please enter the width of the table:4
0   0   0   0   0   
0   1   2   3   4   
0   2   4   6   8   
0   3   6   9   12   
0   4   8   12   16   

問題は、各数値が同じ幅になると想定していることです。これは 3x3 まで機能します。これは、すべてが 1 文字幅であるためですが、5x5 の場合、1 文字の数字もあれば 2 文字の数字もあります (もちろん、10x10 ではさらに悪化します)。

これを修正する簡単な方法は、各セルを強制的に同じ幅にすることです。

まず、必要な最大サイズを計算する必要があります。しかし、それは簡単です: のサイズですwidth*width

次に、その数の文字を強制的に使用する方法を知る必要があります。Python にはこれを行う方法がいくつかあります。昔ながらのフィールド指定子を使用してそれを行う方法を示しますが、これを新しいスタイルのフォーマット文字列に変換する方法を検討する必要があります。(これが宿題である場合、Python 3 を教えている人はおそらく古いスタイルのフィールド仕様を使用することであなたを格下げするでしょう。それがあなた自身の独学のためだけである場合は、両方の方法でそれを行う方法を考え出す価値があります。)'%*d'静的仕様を構築する代わりに、可変幅フォーマット仕様 ( ) を使用するように変換する方法を検討する必要があります'%4d'。(nneonneoの答えはその手がかりを与えるはずです。)

width = int(input("Please enter the width of the table:"))
def print_times_table(width):

    row = 0
    col = 0    
    fieldspec = '%' + str(len(str(width * width))) + 'd'
    width += 1

    while row < width:
        col = 0
        while col < width:

            print(fieldspec % (row*col,), ' ', end="")
            col += 1
        print("\n", end='')
        row +=1

print_times_table(width)

これで次のようになります。

Please enter the width of the table:4
 0   0   0   0   0  
 0   1   2   3   4  
 0   2   4   6   8  
 0   3   6   9  12  
 0   4   8  12  16  
于 2012-09-26T23:58:23.323 に答える
0

変数を.ljustと組み合わせて使用​​しないのはなぜですか? そのようです:

width = int(13)
def table(width):

row = 1
col = 1
width += 1
spaces = '  '

while row < width:
    col = 1
    while col < width:
        print(str(row*col).rjust(5, ' '), end="")
        col += 1
    print("\n", end='')
    row +=1

table(width)

それはまったく同じように機能し(任意の数値を使用できますが、問題はありません)、数値がどれだけ大きくなるかに応じて調整するだけです...

于 2013-03-03T17:48:05.687 に答える
0

可変幅フィールド指定子を使用します。

print('%*d' % (8, row*col), end='')

これにより、(ここでは) 8 つのスペースに数字を埋めるのに十分なパディングが自動的に追加されます。そのスペーシング パラメータを引数として渡すこともできます。

新しいスタイルの書式設定構文を使用して可変幅を使用するには:

print('{:{width}}'.format(row*col, width=8), end='')
于 2012-09-27T00:00:58.623 に答える