きちんとした表にまとめられた九九表はどうやって作るのですか?私の現在のコードは:
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()
これはすべてを正しく乗算しますが、リスト形式で持っています。ネストとスペースを適切に配置する必要があることはわかっていますが、それがどこに行くのかわかりませんか?
簡単な方法(おそらく水平スペースが多すぎる):
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)))
ニブラーのアプローチは非常にエレガントです。最初に整数のリストのリストを作成し、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
または、これを実行することもできます(他のものほど単純ではありませんが、機能します)。
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()
算術表を作成する方がはるかに簡単ですが、表の制限について誰も話していないので、この質問に対する回答が非常に多いにもかかわらず、私は自分の回答を投稿するべきだと思いました。
ユーザーからの入力を整数として取得
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
これはかなりきれいに見えます:
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")
出力を整理するための私の見解は次のとおりです。
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
九九にはたくさんの答えがあります。ここでは、関数を呼び出して実行しました。自由に改善してください。
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()
ループの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()
。
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
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
上記のコードはこの結果を生成します:
これは私にとってうまくいきます:
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
あなたの問題は、印刷によって改行が追加され、それらすべての改行が不要になることです。
これを行う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
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.
次のようにこの印刷のため
print "%d X %d"%(row, col)
2 X 3として印刷されます。
これは、初心者向けのコーディングの観点から簡単に説明できる標準的な乗算表の場合に非常にうまく機能します。
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