# GESP等级：一级 | GESP Python 一级考点
# ============================================
# input + float() + 格式化输出 —— 程序三要素
# 核心知识：
#   1. input() 永远返回 str（字符串）
#   2. int() / float() 类型转换
#   3. 输入(input) → 处理(process) → 输出(print)
# GESP #18 input()函数  #19 类型转换  #27 格式化输出
# ============================================
import turtle

t = turtle.Turtle()
t.shape("turtle")
t.speed(6)

# ============================================
# 场景1：input() 永远返回 str —— 亲眼验证
# ============================================
print("========== 场景1：input() 的类型陷阱 ==========")

raw = input("请输入一个数字（如 8）：")
print("input() 返回的内容：", raw)
print("input() 返回的类型：", type(raw))    # <class 'str'> —— 永远是字符串！

# 验证：str 不能直接做数学
print()
print("直接做数学会怎样？")
print("raw + 5 会报错，因为 str 不能和 int 相加！")
# 下面这行如果取消注释就会报错：
# result = raw + 5    # TypeError: can only concatenate str (not "int") to str

print()
print("===== 类型转换（脱衣服）=====")
num = int(raw)               # int() 把 str 变成 int
print("int(raw) 转换后：", num)
print("转换后类型：", type(num))   # <class 'int'>
print("现在可以做数学了：", num, "+ 5 =", num + 5)

# ============================================
# 场景2：int() / float() 转换对比
# ============================================
print()
print("========== 场景2：int() vs float() ==========")

# int() —— 只认纯整数形式的字符串
print("int('6')    =", int("6"), "  类型：", type(int("6")))       # int
# int("3.14") 会报错！ValueError
print("int('6') 能转，int('3.14') 会报错——int()不认小数点！")

# float() —— 认识小数点
print("float('6')   =", float("6"), " 类型：", type(float("6")))   # float
print("float('3.14')=", float("3.14"), "类型：", type(float("3.14")))

print()
print("记忆口诀：int() 脱衣服只认光膀子整数，float() 脱衣服还留小数点")

# ============================================
# 场景3：输入 → 处理 → 输出（程序三要素）
# ============================================
print()
print("========== 场景3：程序三要素 ==========")
print("输入(input) → 处理(process) → 输出(print)")
print()

# 输入
user_name = input("你叫什么名字？")

# 处理
message = "你好，" + user_name + "！今天我们来用 Python 画画！"

# 输出
print(message)

# ============================================
# 场景4：input + int 控制 turtle 画多边形
# ============================================
print()
print("========== 场景4：画多边形 —— input + int ==========")

s = input("边数？(如 3、4、5、6)：")
n = int(s)                     # input → str → int

color_name = input("颜色？(英文 red / blue / green)：")
t.color(color_name)

print("正在画", n, "边形，每次转角 = 360 /", n, "=", 360 / n, "度")

for i in range(n):
    t.forward(60)
    t.right(360 / n)

print("画完了！你输入了", n, "，小乌龟画出了", n, "边形！")

# ============================================
# 场景5：input + float 画圆 + 算周长（格式化输出）
# ============================================
print()
print("========== 场景5：画圆 + 算周长 + 格式化输出 ==========")

t.penup()
t.goto(-120, -100)
t.pendown()

r_str = input("请输入圆的半径（如 50、80）：")
r = float(r_str)               # input → str → float

c = 2 * 3.1416 * r             # 周长 = 2πr

# 格式化输出 —— GESP #27
print("半径 r =", r)
print("周长 C = 2 x 3.1416 x", r, "=", c)
print()

# 用 f-string 格式化 —— 保留 2 位小数
print(f"===== 格式化输出 =====")
print(f"你画的圆：半径 = {r:.2f}")
print(f"圆周长    = {c:.2f}")
print(f"近似公式  = 2 × 3.1416 × {r:.2f}")

t.circle(r)                    # turtle 画圆
print("小乌龟画出了一个半径为", r, "的圆！")

turtle.done()
