def type_input(convert_type=str, message='', prompt='>', allow_empty=False):
    """指定した型に変換可能な文字列を受け取ります。
    Args:
        convert_type ([str or int or float or bool], optional): 型。指定しなければ文字列型。
        message (str, optional): 入力を受け取るときに表示する文字列。 指定しなければ空文字列になります。
        prompt (str, optional): 入力を受け取るときに表示するプロンプト文字列。 指定しなければ"> "です。
        allow_empty (bool, optional): 空文字列を受け取った場合、Noneを返します。 指定しなければFalseです。

    Returns:
        pass_type or None: 指定した型、または、None。
    """
    type_str = str(convert_type).split("'")[1]
    text = f'{message} ({type_str}){prompt}'.strip()
    while True:
        receive = input(text).strip()
        if receive == '':
            if allow_empty:
                return None
            else:
                continue
        try:
            if convert_type is bool:
                converted = receive.lower()
                if converted in ('true', 'false'):
                    return converted == 'true'
            else:
                converted = convert_type(receive)
                return converted
        except Exception:
            continue
