from datetime import datetime


def 取星座(日期字符串: str) -> str | None:
    """根据日期返回对应的星座。

    功能说明:
        - 这个函数用于把日期转换成常见的十二星座名称。
        - 输入格式是 ``YYYY-MM-DD``。
        - 函数按公历日期区间判断星座。
        - 输入格式不正确时，函数返回 ``None``。

    Args:
        日期字符串: 日期字符串。

    Returns:
        成功时返回星座名称；失败时返回 ``None``。
    """
    try:
        日期对象 = datetime.strptime(日期字符串.strip(), "%Y-%m-%d")
        月 = 日期对象.month
        日 = 日期对象.day

        if (月 == 3 and 日 >= 21) or (月 == 4 and 日 <= 19):
            return "白羊座"
        if (月 == 4 and 日 >= 20) or (月 == 5 and 日 <= 20):
            return "金牛座"
        if (月 == 5 and 日 >= 21) or (月 == 6 and 日 <= 21):
            return "双子座"
        if (月 == 6 and 日 >= 22) or (月 == 7 and 日 <= 22):
            return "巨蟹座"
        if (月 == 7 and 日 >= 23) or (月 == 8 and 日 <= 22):
            return "狮子座"
        if (月 == 8 and 日 >= 23) or (月 == 9 and 日 <= 22):
            return "处女座"
        if (月 == 9 and 日 >= 23) or (月 == 10 and 日 <= 23):
            return "天秤座"
        if (月 == 10 and 日 >= 24) or (月 == 11 and 日 <= 22):
            return "天蝎座"
        if (月 == 11 and 日 >= 23) or (月 == 12 and 日 <= 21):
            return "射手座"
        if (月 == 12 and 日 >= 22) or (月 == 1 and 日 <= 19):
            return "摩羯座"
        if (月 == 1 and 日 >= 20) or (月 == 2 and 日 <= 18):
            return "水瓶座"
        return "双鱼座"
    except Exception:
        return None


if __name__ == "__main__":
    print("===== 示例1：白羊座日期 =====")
    print("结果:", 取星座("2026-03-21"))

    print("\n===== 示例2：摩羯座日期 =====")
    print("结果:", 取星座("2026-01-10"))

    print("\n===== 示例3：双鱼座日期 =====")
    print("结果:", 取星座("2026-02-25"))

    print("\n===== 示例4：输入错误格式 =====")
    print("结果:", 取星座("2026/03/21"))

    print("\n===== 示例5：输入不存在的日期 =====")
    print("结果:", 取星座("2026-02-30"))

    print("\n===== 示例6：应用场景-根据生日展示用户星座 =====")
    print("用户星座:", 取星座("1998-06-18"))
