# GESP等级：一级 | GESP Python 一级考点
"""
第1节：for循环动机 —— 翻卡片游戏

【使用方法】
1. 打开 IDLE → File → New File
2. 把这个文件完整复制进去（或直接打开本文件）
3. 按 F5 运行（或 Run → Run Module）
4. 先运行 画正方形（3行顶8行！），再体验其他图形

【GESP考点】
#7 for循环基础

【学习目标】
- 理解 for 循环的语法：for i in [列表]:
- 理解缩进标记循环体
- 用 for 循环画正方形、三角形、六边形
"""

import turtle

# ============================================
# 第1步：初始化小乌龟
# ============================================
t = turtle.Turtle()
t.shape("turtle")
t.speed(5)              # 速度调到中等，方便观察

# ============================================
# 第2步：用for循环画正方形（3行代替8行！）
# ============================================
# 记忆钩子：for = 让电脑重复做，你只要写一次
# 身体锚点：翻卡片 = for一次翻一张
# [1, 2, 3, 4] = 卡片盒里有4张卡，循环4次
# 缩进 = 蹲下（在循环里面）
# ============================================

t.pencolor("blue")       # 用蓝色画正方形
t.pensize(3)             # 笔加粗，看得更清楚

for i in [1, 2, 3, 4]:  # 翻开第1张卡→第2张→第3张→第4张
    t.forward(150)       # 往前走150步（缩进了→每次循环都做）
    t.right(90)          # 右转90度（缩进了→每次循环都做）

# 没缩进 → 在循环外面，只做一次
t.penup()
t.forward(250)           # 移动到画下一个图形的位置
t.pendown()


# ============================================
# 第3步：改成三角形（只要改两个数字！）
# [1, 2, 3] = 3张卡片 = 循环3次
# 120度 × 3条边 = 360度
# ============================================

t.pencolor("red")        # 用红色画三角形

for i in [1, 2, 3]:     # 循环3次
    t.forward(150)       # 往前走150步
    t.right(120)         # 右转120度

t.penup()
t.forward(200)
t.pendown()


# ============================================
# 第4步：改成六边形（还是两个数字！）
# [1, 2, 3, 4, 5, 6] = 6张卡片 = 循环6次
# 60度 × 6条边 = 360度
# ============================================

t.pencolor("green")      # 用绿色画六边形

for i in [1, 2, 3, 4, 5, 6]:  # 循环6次
    t.forward(100)       # 六边形边长比正方形短一点
    t.right(60)          # 右转60度

t.penup()
t.forward(250)
t.pendown()


# ============================================
# 第5步：挑战！你能画出八边形吗？
# 提示：8条边，每次转 360÷8 = 45 度
# 去掉下面的注释符号（#）试试看！
# ============================================

# t.pencolor("purple")
# for i in [1, 2, 3, 4, 5, 6, 7, 8]:  # 循环8次
#     t.forward(80)
#     t.right(45)


# ============================================
# 隐藏乌龟，展示完整图案
# ============================================
t.hideturtle()

# ============================================
# 保持窗口打开
# ============================================
turtle.done()


# ============================================
# 【扩展思考】
# 1. 如果改成 for i in [1, 2]: 会画出什么？
#    → 画不出封闭图形，只是一条折线
#
# 2. 如果去掉 t.right(90) 的缩进，会画出什么？
#    → 往前走4次（一条直线），最后转一次90度
#
# 3. 规律总结：
#    边数 = 列表里数字的个数 = 循环次数
#    角度 = 360 ÷ 边数
# ============================================
