> **GESP等级：二级 | 考级考点：GESP Python 二级**

# type()侦探 + 强制类型转换

## 🔍 GESP #29 #19

---

## 📸 导入：type() = 问电脑"你是什么类型？"

> 路边看到不认识的虫子 → 找昆虫学家鉴定
> 看到不认识的数据 → 找 `type()` 鉴定

| 生活类比 | 对应 Python |
|-----------|-------------|
| 照妖镜 | `type()` 照出数据原形 |
| 侦探放大镜 | `type()` 查看数据身份 |

```python
name = "小明"
age = 10
print(type(name))   # <class 'str'>
print(type(age))    # <class 'int'>
```

---

## 🔬 知识点①：type(变量) 查看类型

```python
a = 100          →  <class 'int'>
b = 3.14         →  <class 'float'>
c = "Hello"      →  <class 'str'>
d = True         →  <class 'bool'>
e = [1, 2, 3]    →  <class 'list'>
```

> 💡 **记忆钩子：** type = 照妖镜，照出类型

---

## 🔢 知识点②：int() 把文字变数字

| 代码 | 结果 | 说明 |
|------|:----:|:----:|
| `int("6")` | `6` | ✅ 纯数字字符串 |
| `int(3.9)` | `3` | ⚠️ **截断**不是四舍五入！ |
| `int(True)` | `1` | ✅ True→1 |
| `int(False)` | `0` | ✅ False→0 |
| `int("6.5")` | ❌ 报错 | 含小数点的字符串不行 |
| `int("abc")` | ❌ 报错 | 非数字字符不行 |

---

## 🎈 知识点③：float() 文字变小数字

| 代码 | 结果 | 说明 |
|------|:----:|:----:|
| `float("2.5")` | `2.5` | ✅ 字符串→浮点数 |
| `float("3")` | `3.0` | ✅ 整数字符串→浮点数 |
| `float(5)` | `5.0` | ✅ 整数→浮点数 |
| `float("abc")` | ❌ 报错 | 非数字字符不行 |

---

## 📝 知识点④：str() 数字变文字

| 代码 | 结果 | 说明 |
|------|:----:|:----:|
| `str(123)` | `"123"` | ✅ 整数→字符串 |
| `str(3.14)` | `"3.14"` | ✅ 浮点数→字符串 |
| `str(True)` | `"True"` | ✅ 布尔值→字符串 |

> 💡 **记忆钩子：** `int()` 脱衣服（去掉引号变数字），`str()` 穿衣服（加上引号变文字）

---

## ✅❌ 知识点⑤：bool() 真假判断

```python
bool(1)         →  True    bool(0)         →  False
bool("abc")     →  True    bool("")        →  False
bool([1, 2, 3]) →  True    bool([])        →  False
bool(100)       →  True    bool(None)      →  False
```

> 📢 **口诀：** "空的就是 False，有东西就是 True"

---

## ⚡ 演示：除法永远出 float！

```python
type(360 / 6)   →  <class 'float'>   ← 60.0！
type(10 / 2)    →  <class 'float'>   ← 5.0！
type(7 / 2)     →  <class 'float'>   ← 3.5
type(9 / 3)     →  <class 'float'>   ← 3.0！
```

**为什么？** Python 中 `/` 永远返回浮点数，即使能整除。

**三种除法对比：**
```
10 / 3   → 3.333...  (float，普通除法)
10 // 3  → 3         (int，整除)
10 % 3   → 1         (int，取余)
```

---

## 🎯 实操①：type侦探填空

```python
x = 3.14        →  type(x) = ？
y = "3.14"      →  type(y) = ？
z = 3.14 > 3    →  type(z) = ？
w = "3" + "14"  →  type(w) = ？
v = 10 / 2      →  type(v) = ？
```

**答案：** float, str, bool, str, float

---

## 🎯 实操②：强制转换计算

```python
int("6") + 2          =  8
# 先 int("6") → 6，再 6+2 → 8

int(3.9)              =  3  ← 截断！

float("2.5") + 1      =  3.5

bool(1) + bool(1)     =  2  ← 因为 True=1
```

---

## 🎯 实操③：字符串拼接与转换

```python
str(123) + "4"             =  "1234"
str(50) + str(50)          =  "5050"
int("50") + int("50")      =  100
str(1 + 2) + "3"           =  "33"
# 注意运算顺序：先算 1+2=3，再 str(3)="3"，再 "3"+"3"
```

---

## 📝 小测

```
1. int(3.9) = ？
   A. 3    B. 4    C. 3.9    D. 报错

2. type(360 / 6) 的结果是？
   A. int    B. float    C. str    D. bool

3. int("6") + int("7") = ？
   A. "67"    B. 13    C. "13"    D. 报错

4. 下面哪个会报错？
   A. int("5")    B. float("3")    C. int("5.5")    D. str(100)

5. bool("") 的结果是？
   A. True    B. False
```

---

## 📖 课堂总结

```
type 是照妖镜，照出类型现原形
int() 脱衣服，去掉引号变数字
str() 穿衣服，加上引号变文字
float() 戴帽子，整数变成小数字
bool() 判真假，空的假来有的真
除法永远出 float，千万要牢记心中
```
