"""任务 3 · 读进来的都是字符串（参考解）

token 表里全是字符串，这件事会变成一个安静的坑：两个字符串比较**不报类型错误**，
规则换成了按字符逐个比编码。于是

    '10' < '9'          是 True      （'1' 的编码 49 小于 '9' 的编码 57）
    sorted 那几个字符串  ['10', '100', '2', '9']  （'100' 排在 '2' 前面）
    max(['10', '9'])    得 '9'，不是 '10'

一个字符串与一个整数混着比会当场报错（TypeError），那反而是好事。

修法落在转换的时机上：**在解析层一次转完，算法层看不到数字字符串。**
"""

import sys


# ── TODO 1 · 不转 int，直接就比 ──────────────────────────────────────────
lt = '10' < '9'
print('01 字符串 10 < 9', lt)              # True

lt2 = '2' < '10'
print('02 字符串 2 < 10', lt2)             # False


# ── TODO 2 · 同一批字符串排两次 ──────────────────────────────────────────
raw = ['10', '9', '100', '2']

by_str = sorted(raw)
print('03 直接排序', by_str)               # ['10', '100', '2', '9']

by_int = sorted(raw, key=int)
print('04 按整数排序', by_int)             # ['2', '9', '10', '100']


# ── TODO 3 · 求最大、最小 ────────────────────────────────────────────────
mx = max(raw)
print('05 字符串最大值', mx)               # 9（'9' 在字符串序里最大）

mx_int = max(int(x) for x in raw)
print('06 转整数后最大值', mx_int)         # 100


# ── TODO 4 · 混着比会报类型错误 ──────────────────────────────────────────
try:
    '10' < 5
except TypeError as exc:
    kind = type(exc).__name__
else:
    kind = '没有报错'
print('07 混着比的报错类型', kind)         # TypeError


# ── TODO 5 · 修法：在解析层一次转完 ──────────────────────────────────────
def to_ints(tokens):
    """token 表进来，整数列表出去。"""
    return [int(x) for x in tokens]


print('08 解析层转完', to_ints(['31', '9', '100']))   # [31, 9, 100]
