# GESP等级：二级 | GESP Python 二级考点
"""
09_字符串 / 第1节_字符串索引切片
演示代码 —— 字符串索引、切片、拼接、重复、不可变
教师课堂演示用，逐行运行并讲解
"""

# ==========================================
# 演示1：字符串索引
# ==========================================
print("=" * 40)
print("【演示1】字符串索引")
print("=" * 40)

name = "Python"
print("name =", name)
print("name[0]  →", name[0])     # 第一个字符
print("name[1]  →", name[1])     # 第二个字符
print("name[-1] →", name[-1])    # 最后一个字符
print("name[-2] →", name[-2])    # 倒数第二个字符

# 思考：name[6] 会怎样？
# print(name[6])  # IndexError: string index out of range

print()  # 空行分隔

# ==========================================
# 演示2：字符串切片
# ==========================================
print("=" * 40)
print("【演示2】字符串切片  s[start:end:step]")
print("=" * 40)

name = "Python"
print("name =", name)
print("name[0:3]    →", name[0:3])      # 索引 0,1,2 → 'Pyt'
print("name[1:4]    →", name[1:4])      # 索引 1,2,3 → 'yth'
print("name[:3]     →", name[:3])       # 省略 start，从开头取到索引 2
print("name[3:]     →", name[3:])       # 省略 end，从索引 3 取到末尾
print("name[:]      →", name[:])        # 复制整个字符串
print("name[::2]    →", name[::2])      # 步长为2 → 'Pto'
print("name[::-1]   →", name[::-1])     # 反转 → 'nohtyP'

print()

# ==========================================
# 演示3：字符串拼接
# ==========================================
print("=" * 40)
print("【演示3】字符串拼接  s1 + s2")
print("=" * 40)

s1 = "Hello"
s2 = "World"
result = s1 + " " + s2
print(f"'{s1}' + ' ' + '{s2}' → '{result}'")

greeting = "你好" + "，" + "Python"
print("中文拼接 →", greeting)

# 可以连续拼接
print("连续拼接 →", "A" + "B" + "C" + "D")

print()

# ==========================================
# 演示4：字符串重复
# ==========================================
print("=" * 40)
print("【演示4】字符串重复  s * n")
print("=" * 40)

print("'*' * 10    →", "*" * 10)
print("'Ha' * 3    →", "Ha" * 3)
print("'Go! ' * 5  →", "Go! " * 5)

# 利用重复画分隔线
print()
print("用重复画分隔线：")
print("-" * 30)
print("=" * 30)
print("~" * 30)

print()

# ==========================================
# 演示5：字符串不可变
# ==========================================
print("=" * 40)
print("【演示5】字符串不可变")
print("=" * 40)

s = "Python"
print("s =", s)
print("尝试修改 s[0] = 'J' ...")

try:
    s[0] = "J"  # 这行会报错
except TypeError as e:
    print("报错！字符串不可修改：", e)

print()
print("正确做法：创建新字符串")
s_new = "J" + s[1:]  # 'J' + 'ython'
print(f"'J' + s[1:] → {s_new}")
print(f"原字符串不变：{s}")

print()
print("=" * 40)
print("演示结束！记忆钩子：")
print("字符串跟列表一样能索引切片拼接重复但不可变")
print("=" * 40)
