# GESP等级：一级 | GESP Python 一级考点
# ============================================
# 第4节：自增 (+=) / 自减 (-=)
#
# GESP #17 变量自更新
# 核心口诀：
#   size += 3  = 从盒子里拿出来 +3 再放回去
#   自增越来越大，自减越来越小
# ============================================
import turtle

t = turtle.Turtle()
t.shape("turtle")
t.speed(8)

# ============================================
# 模式1：自增 — size = size + 3 简写 size += 3
# ============================================
print("===== 模式1：自增 size += 3（越来越大）=====")
t.penup()
t.goto(-300, 200)
t.pendown()
t.color("blue")

size = 5                     # 初始边长（很小，从中心开始长）
for i in range(40):
    t.forward(size)
    t.right(61)              # 61° 产生螺旋效果
    size += 3                # ★ 自增简写！等价于 size = size + 3

t.penup()
t.goto(-300, 160)
t.pendown()
t.color("darkblue")
t.write("自增螺旋: size += 3  →  5→8→11→14→...", font=("Arial", 10, "normal"))

# ============================================
# 模式2：自减 — size = size - 2 简写 size -= 2
# ============================================
print("===== 模式2：自减 size -= 2（越来越小）=====")
t.penup()
t.goto(120, 200)
t.pendown()
t.color("red")

size = 120                   # 从大开始
while size > 6:              # 边长大于 6 就继续
    t.forward(size)
    t.right(45)
    size -= 2                # ★ 自减简写！等价于 size = size - 2

t.penup()
t.goto(120, 160)
t.pendown()
t.color("darkred")
t.write("自减收敛: size -= 2  →  120→118→116→...", font=("Arial", 10, "normal"))

# ============================================
# 模式3：演示 — step=10, for 30次, step+=3 → 螺旋
# ============================================
print("===== 模式3：step=10 → step+=3 螺旋 =====")
t.penup()
t.goto(-300, -20)
t.pendown()
t.color("green")

step = 10                    # 初始步长
for i in range(30):
    t.forward(step)
    t.right(30)
    step += 3                # 每次 +3

t.penup()
t.goto(-300, -50)
t.pendown()
t.color("darkgreen")
t.write("step=10 → step+=3 → 30次螺旋", font=("Arial", 10, "normal"))

# ============================================
# 模式4：自减收敛螺旋（实操②）
# ============================================
print("===== 模式4：自减收敛螺旋 =====")
t.penup()
t.goto(120, -20)
t.pendown()
t.color("purple")

step = 100                   # 从大步长开始
for i in range(35):
    t.forward(step)
    t.right(91)              # 91° 产生收敛螺旋效果
    step -= 3                # 每次 -3，越来越小

t.penup()
t.goto(120, -50)
t.pendown()
t.color("darkviolet")
t.write("收敛螺旋: step -= 3  →  100→97→94→...", font=("Arial", 10, "normal"))

# ============================================
# 模式5：用 += 画变大正方形（实操③）
# ============================================
print("===== 模式5：用 += 画变大正方形 =====")
t.penup()
t.goto(-300, -180)
t.pendown()
t.speed(6)

size = 20                    # 起始边长
t.color("orange")
for i in range(6):           # 画 6 个越来越大的正方形
    # 画一个正方形
    for j in range(4):
        t.forward(size)
        t.right(90)
    # 准备画下一个
    t.penup()
    t.forward(size + 10)     # 留出间距
    t.pendown()
    size += 20               # 每次 +20

t.penup()
t.goto(-300, -210)
t.pendown()
t.color("darkorange")
t.write("变大正方形: size += 20  →  20→40→60→80→...", font=("Arial", 10, "normal"))

# ============================================
# 模式6：对比演示 — size+=3 和 size=size+3 一样吗？
# ============================================
print()
print("===== 小测：size += 3 和 size = size + 3 一样吗？=====")
a = 10
b = 10
a = a + 3
b += 3
print("a = a + 3  → a =", a)
print("b += 3     → b =", b)
print("结果一样！  ✅  += 是 = + 的简写形式")
print("记忆口诀：size += 3 = 从盒子里拿出来 +3 再放回去")

t.penup()
t.goto(-300, -280)
t.pendown()
t.color("black")
t.write("size += 3 = 从盒子里拿出来 +3 再放回去", font=("Arial", 12, "bold"))

turtle.done()
