web-dev-qa-db-ja.com

適切にフォーマットされた乗算表

きちんとした表にまとめられた九九表はどうやって作るのですか?私の現在のコードは:

n=int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1,n+1):
    for col in range(1,n+1):
        print(row*col)
    print()

これはすべてを正しく乗算しますが、リスト形式で持っています。ネストとスペースを適切に配置する必要があることはわかっていますが、それがどこに行くのかわかりませんか?

7
user3068686

簡単な方法(おそらく水平スペースが多すぎる):

n=int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1,n+1):
    for col in range(1,n+1):
        print(row*col, end="\t")
    print()

もっといい方法:

n=int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1,n+1):
    print(*("{:3}".format(row*col) for col in range(1, n+1)))

そしてf-stringsを使う(Python3.6 +)

for row in range(1, n + 1):
    print(*(f"{row*col:3}" for col in range(1, n + 1)))
9
John La Rooy

ニブラーのアプローチは非常にエレガントです。最初に整数のリストのリストを作成し、range関数を使用して、step引数を利用するアプローチをとりました。

n = 12の場合

import pprint
n = 12
m = list(list(range(1*i,(n+1)*i, i)) for i in range(1,n+1))
pprint.pprint(m)
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
 [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24],
 [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36],
 [4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48],
 [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60],
 [6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72],
 [7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84],
 [8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96],
 [9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108],
 [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120],
 [11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132],
 [12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144]]

これで、希望する形式の整数リストのリストが作成されたので、リストリストの最大整数(最後の整数)よりも1大きい幅で右揃えの文字列に変換する必要があります。 fillcharのデフォルト引数' 'を使用します。

max_width = len(str(m[-1][-1])) + 1
for i in m:
    i = [str(j).rjust(max_width) for j in i]
    print(''.join(i))

   1   2   3   4   5   6   7   8   9  10  11  12
   2   4   6   8  10  12  14  16  18  20  22  24
   3   6   9  12  15  18  21  24  27  30  33  36
   4   8  12  16  20  24  28  32  36  40  44  48
   5  10  15  20  25  30  35  40  45  50  55  60
   6  12  18  24  30  36  42  48  54  60  66  72
   7  14  21  28  35  42  49  56  63  70  77  84
   8  16  24  32  40  48  56  64  72  80  88  96
   9  18  27  36  45  54  63  72  81  90  99 108
  10  20  30  40  50  60  70  80  90 100 110 120
  11  22  33  44  55  66  77  88  99 110 121 132
  12  24  36  48  60  72  84  96 108 120 132 144

そして、異なるサイズで間隔の弾力性を示します。 n = 9

n=9
m = list(list(range(1*i,(n+1)*i, i)) for i in range(1,n+1))
for i in m:
    i = [str(j).rjust(len(str(m[-1][-1]))+1) for j in i]
    print(''.join(i))

  1  2  3  4  5  6  7  8  9
  2  4  6  8 10 12 14 16 18
  3  6  9 12 15 18 21 24 27
  4  8 12 16 20 24 28 32 36
  5 10 15 20 25 30 35 40 45
  6 12 18 24 30 36 42 48 54
  7 14 21 28 35 42 49 56 63
  8 16 24 32 40 48 56 64 72
  9 18 27 36 45 54 63 72 81
4
Aaron Hall

または、これを実行することもできます(他のものほど単純ではありませんが、機能します)。

def main():

    rows = int(input("Enter the number of rows that you would like to create a multiplication table for: "))
    counter = 0
    multiplicationTable(rows,counter)

def multiplicationTable(rows,counter):

    size = rows + 1

    for i in range (1,size):
        for nums in range (1,size):
            value = i*nums
            print(value,sep=' ',end="\t")
            counter += 1
            if counter%rows == 0:
                print()
            else:
                counter
main()
1
Floam

算術表を作成する方がはるかに簡単ですが、表の制限について誰も話していないので、この質問に対する回答が非常に多いにもかかわらず、私は自分の回答を投稿するべきだと思いました。

ユーザーからの入力を整数として取得

num = int(raw_input("Enter your number"))

テーブルの制限を設定します。目的の数のテーブルを計算する範囲

lim = int(raw_input("Enter limit of table"))

インデックス1から始まる反復計算

この例では、フォーマットを使用したスライスを利用して、数値間の空白を調整しています。つまり、2つのスペースを調整するために{:2}です。

for b in range(1, lim+1):
    print'{:2} * {:2} = {:2}'.format(a, b, a*b)

最終コード:

num = int(raw_input("Enter your number"))
lim = int(raw_input("Enter limit of table"))
for b in range(1, lim+1):
    print'{:2} * {:2} = {:2}'.format(a, b, a*b)

出力:

Enter your number 2
Enter limit of table 20
 2 *  1 =  2
 2 *  2 =  4
 2 *  3 =  6
 2 *  4 =  8
 2 *  5 = 10
 2 *  6 = 12
 2 *  7 = 14
 2 *  8 = 16
 2 *  9 = 18
 2 * 10 = 20
 2 * 11 = 22
 2 * 12 = 24
 2 * 13 = 26
 2 * 14 = 28
 2 * 15 = 30
 2 * 16 = 32
 2 * 17 = 34
 2 * 18 = 36
 2 * 19 = 38
 2 * 20 = 40
1
Rahul Kumar

これはかなりきれいに見えます:

   print '\t\t\t======================================='
   print("\t\t\t\tMultiplication Tables")
   print '\t\t\t=======================================\n'
   for i in range(1,11):
       print '\t', i,
   print
   print("___________________________________________________________________________________________________________________")

   for j in range(1,11):
       print("\n")
       print j, '|',
       for k in range(1,11):
           print '\t', j * k,
   print("\n")
1
GNUdelman

出力を整理するための私の見解は次のとおりです。

for row in range(1, 11):
    for col in range(1, 11):
        num = row * col
        if num < 10: blank = '  '       # 2 blanks
        else:
            if num < 100: blank  = ' '  # 1 blank
        print(blank, num, end = '')     # Empty string
    print()                             # Start a new line
1
Yehuda Katz

九九にはたくさんの答えがあります。ここでは、関数を呼び出して実行しました。自由に改善してください。

    num = int(input('Please enter time tables for printing: '))
    upperLimit = int(input('Please enter upper limit: '))

    def printTable(num, upperLimit):   
        for i in range(0, upperLimit+1):
            print(num, 'x', i, '=', num * i)

    def main():
        printTable(num, upperLimit)

    main()    
0
Mjachowdhury

ループの1つをprint呼び出し内に置くことで、探している効果をはるかに簡単に実現できます。

_n = int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1, n+1):
    print('\t'.join(str(row * col) for col in range(1, n+1)))
_

これは、_row*1_、_row*2_、... _row*n_の文字列値を生成するジェネレーターを作成し、それらの各値をタブ文字と結合し、結果の文字列をprint()

0
Fraxtil
for i in range(1, 10) :
    for j in range(1, 10):
        print(repr(i*j).rjust(4),end=" ")
print()
print()

出力:

  1    2    3    4    5    6    7    8    9 

  2    4    6    8   10   12   14   16   18 

  3    6    9   12   15   18   21   24   27    

  4    8   12   16   20   24   28   32   36

  5   10   15   20   25   30   35   40   45 

  6   12   18   24   30   36   42   48   54 

  7   14   21   28   35   42   49   56   63 

  8   16   24   32   40   48   56   64   72 

  9   18   27   36   45   54   63   72   81 
0
farshadb
for x in range(1, 11):
        for y in range(1, 11):
            z = x * y
            print(z, end="\t")
        print() #creates the space after the loop

上記のコードはこの結果を生成します: 

0
lloydyu24

これは私にとってうまくいきます:

num, b, c, count = int(input('Enter a number')), '  ', '   ', 0
for i in range(1, num+1):
    if i > 9:
        b = b + str(i) + '   '
        c = c + str(i) + '|'
    else:
        b = b + str(i) + '    '
        c = c + str(i) + ' |'
    for a in range(1, num+1):
        d = str(a*i)
        for letter in d:
            count += 1
        c = c + str(a*i) + ' '*(5-count)
        count = 0
    c = c + '\n   '
print((' ')*4 + b)
print((' ')*6 + ('-'+ '    ')*num)
print(c)

最大99倍まで機能します。

数値12を入力したときの出力:

      1    2    3    4    5    6    7    8    9    10   11   12   
      -    -    -    -    -    -    -    -    -    -    -    -    
   1 |1    2    3    4    5    6    7    8    9    10   11   12   
   2 |2    4    6    8    10   12   14   16   18   20   22   24   
   3 |3    6    9    12   15   18   21   24   27   30   33   36   
   4 |4    8    12   16   20   24   28   32   36   40   44   48   
   5 |5    10   15   20   25   30   35   40   45   50   55   60   
   6 |6    12   18   24   30   36   42   48   54   60   66   72   
   7 |7    14   21   28   35   42   49   56   63   70   77   84   
   8 |8    16   24   32   40   48   56   64   72   80   88   96   
   9 |9    18   27   36   45   54   63   72   81   90   99   108  
   10|10   20   30   40   50   60   70   80   90   100  110  120  
   11|11   22   33   44   55   66   77   88   99   110  121  132  
   12|12   24   36   48   60   72   84   96   108  120  132  144  
0
Chris Oliver

あなたの問題は、印刷によって改行が追加され、それらすべての改行が不要になることです。

これを行う1つの方法は、各行に文字列を作成し、1つの印刷ステートメントで行全体を印刷することです。

n=int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1,n+1):
    s = ''
    for col in range(1,n+1):
        s += '{:3} '.format(row * col)
    print(s)

魔法は'{:3} '.formatビット。トリッキーなので、ここにチュートリアルがあります: http://ebeab.com/2012/10/10/python-string-format/

実際のコードは次のとおりです。

Please enter a positive integer between 1 and 15: 4
  1   2   3   4 
  2   4   6   8 
  3   6   9  12 
  4   8  12  16 
0
Pitarou
n=int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1,n+1):
    for col in range(1,n+1):
        print(row*col, "\t",end = "")      
    print()

#the "\t" adds a tab each time, and the end = "" prints your string horizontally.
0
Shahab

次のようにこの印刷のため

 print "%d X %d"%(row, col)

2 X 3として印刷されます。

0
doptimusprime

これは、初心者向けのコーディングの観点から簡単に説明できる標準的な乗算表の場合に非常にうまく機能します。

x = 12
y = 12
print ' ',
for fact in range(1, x+1):
    str(fact).rjust(6),
for fact in range(1, y+1):
    print
    print fact,
    for i in range(1,y+1):
        product = i * fact
        print str(product).rjust(5),
    print
0
MJMacarty