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を利用した九九計算を紹介します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください