import math


def format_with_padding(value, length, align='l'):
    """
    前後にスペースを入れた文字列を取得します。

    Args:
        length: スペース追加後の横幅
        align:
            c, center: 中央寄せ
            r, right: 右寄せ
            それ以外: 左寄せ

    Returns:
        スペースを追加した文字列
    """

    if type(value) != str:
        value = str(value)

    # 前後の空白を削除します。
    value = value.strip()

    # 半角文字、全角文字の数を調べます。
    han_count = len([c for c in value if ord(c) >= 0x20 and ord(c) <= 0x7e])
    zen_count = len(value) - han_count

    # 挿入するスペースの数を決定します。
    pad_spaces = length - (han_count + zen_count * 2)

    if pad_spaces <= 0:
        return value

    if align in ('c', 'center'):  # 真ん中寄せの場合
        ps_left = int(math.floor(pad_spaces / 2))
        ps_right = int(math.ceil(pad_spaces / 2))

    elif align in ('r', 'right'):  # 右寄せの場合
        ps_left, ps_right = pad_spaces - 1, 1

    else:  # それ以外は左寄せ
        ps_left, ps_right = 1, pad_spaces - 1

    return ' ' * ps_left + value + ' ' * ps_right