Python(表示形式が変えられる九九の表)
九九を○の段で区切って表示するパターンとマス状の表として表示させるモードをクロージャを利用して選ぶことができるshow関数を作成してみました。
またデフォルトで1~9の段を表示させますが、引数を入力することで1~任意の段まで、キーワード引数digitを指定することで揃える桁数、modeの0or1で表示モードの切り替えが可能です。
def err(message=""):
raise ValueError(message)
def generate(x,digit,mode):
"""表示形式を変える処理をする関数オブジェクトを返す高階関数
@param x 表示させたい九九の段数(default=9)
@param digit 表示調整桁数(default=3)
@param mode 表示形式のモード番号
@return proc 九九表示関数オブジェクト"""
def proc():
if mode == 0:
for i in range(1,x+1):
tmp = str(i).center(digit," ")
print(f"\n****{tmp}の段"+"*"*20)
for j in range(1,10):
if j % 3 == 0:
tmp = " ||\n"
else:
tmp = " || "
result = str(i*j).center(digit," ")
print("%03s" % str(i) + " x " + f"{j}" + " = "\
+ f"{result}",end=tmp)
else:
for i in range(1,x+1):
tmp=str(i).rjust(digit," ")
print(f"\n{tmp}: ",end="")
for j in range(1,10):
result = str(i*j).rjust(digit," ")
print(f"{result}",end=" ")
return proc
def show(x=9,*,digit=3,mode=0):
"""九九の表を表示させる関数
@param x 表示させたい九九の段数(default=9)
@param digit 表示調整桁数(default=3)
@param mode 表示形式の変更(default=0)
=0 例:1 x 1 = 1 ||1 x 2 = 2 || ・・・
=1 例:1: 1 2 3 4 ・・・ """
is_int = lambda a:isinstance(a,int)
if not is_int(x) or not is_int(digit) or not is_int(mode)\
or (mode<0 or mode>1):
err()
f=generate(x,digit,mode)
f()
show()
show(mode=1)
show(15)
show(20,digit=4)
show(200,digit=4,mode=1)
九九の計算はforループの二重ループで計算して表示させる典型的な方法を行っていますが、様々な計算方法があるので、次回はモジュールのnumpyを利用した九九計算を紹介します。