# GESP等级：一级 | GESP Python 一级考点
"""
07 第3节4 · if/elif/else 多分支 · 四色区域演示
=================================================
本文件用于课堂演示和实操练习，包含：
  1. 正确顺序的四色区域判断
  2. 错误顺序的演示（条件顺序陷阱）
  3. 对比输出函数
  4. 半成品练习代码
=================================================
"""

# ============================================================
# 演示 1：正确顺序 —— 窄条件在前，宽条件在后
# ============================================================
def correct_order(x):
    """正确顺序的四色区域判断"""
    if x <= 100:
        color = "极西"
    elif x <= 200:
        color = "西区"
    elif x <= 300:
        color = "东区"
    else:
        color = "极东"
    return color


# ============================================================
# 演示 2：错误顺序 —— 宽条件在前，窄条件在后（陷阱！）
# ============================================================
def wrong_order(x):
    """错误顺序的四色区域判断——大范围条件吞掉了小范围"""
    if x > 100:          # 宽条件：所有大于100的数都先进来
        color = "西区"
    elif x > 200:        # 永远不会执行！x>200 的数已经 x>100
        color = "东区"
    elif x > 300:        # 也永远不会执行
        color = "极东"
    else:
        color = "极西"
    return color


# ============================================================
# 演示 3：另一种错误顺序——随意打乱
# ============================================================
def messy_order(x):
    """打乱顺序——让学员观察错误逻辑"""
    if x > 200:
        color = "东区"
    elif x <= 100:
        color = "极西"
    elif x > 100:
        color = "西区"
    else:
        color = "极东"
    return color


# ============================================================
# 对比输出函数
# ============================================================
def compare(test_values):
    """打印正确顺序与错误顺序的对比结果"""
    print("=" * 55)
    print(f"{'x值':<8}{'正确顺序':<12}{'错误顺序':<12}{'打乱顺序':<12}")
    print("=" * 55)
    for x in test_values:
        c1 = correct_order(x)
        c2 = wrong_order(x)
        c3 = messy_order(x)
        flag = " ❌" if c1 != c2 else ""
        print(f"{x:<8}{c1:<12}{c2:<12}{c3:<12}")
    print("=" * 55)
    print()


# ============================================================
# 交互式演示
# ============================================================
def interactive_demo():
    """让学员输入 x 值，实时查看两种顺序的结果"""
    print("\n=== 交互式四色区域判断 ===")
    try:
        x = int(input("请输入坐标 x（整数值）："))
        print(f"\n正确顺序 → {correct_order(x)}")
        print(f"错误顺序 → {wrong_order(x)}")
        print(f"打乱顺序 → {messy_order(x)}")
        print()
        if correct_order(x) != wrong_order(x):
            print("⚠️  注意！条件顺序不同导致结果不同！")
    except ValueError:
        print("请输入整数！")


# ============================================================
# 半成品练习代码（供学员补全）
# ============================================================
def practice_template():
    """练习：补全 elif 条件（学员填空）"""
    x = int(input("请输入坐标 x："))
    # ──── 学员补全代码 ────
    # if x <= 100:
    #     color = "极西"
    # _____ x <= 200:      # ① 这里填什么？
    #     color = "西区"
    # _____ x <= 300:      # ② 这里填什么？
    #     color = "东区"
    # _____:                # ③ 这里填什么？
    #     color = "极东"
    # ─────────────────────
    # print("区域：", color)
    print("（请取消注释上方代码并补全）")


# ============================================================
# 预测练习
# ============================================================
def predict_quiz():
    """预测输出练习"""
    questions = [
        ("x=50，正确顺序", 50, "correct"),
        ("x=150，正确顺序", 150, "correct"),
        ("x=300，正确顺序", 300, "correct"),
        ("x=500，正确顺序", 500, "correct"),
        ("x=300，错误顺序", 300, "wrong"),
        ("x=50，错误顺序", 50, "wrong"),
    ]
    print("\n=== 预测输出练习 ===")
    for desc, x, mode in questions:
        if mode == "correct":
            result = correct_order(x)
        else:
            result = wrong_order(x)
        print(f"{desc} → color = \"{result}\"")
    print()


# ============================================================
# 主程序入口
# ============================================================
if __name__ == "__main__":
    print(">>  四色区域判断演示")
    print("  范围：极西(x≤100) | 西区(100<x≤200) | 东区(200<x≤300) | 极东(x>300)")
    print()

    # 演示对比
    compare([50, 100, 150, 200, 250, 300, 350, 500])

    # 预测练习
    predict_quiz()

    # 交互式
    interactive_demo()
