# GESP等级:二级 | GESP Python 二级考点
"""
编程语言三重门演示程序
面向7-10岁少儿编程教学
演示 机器语言 / 汇编语言 / 高级语言 的特点与对比
"""

print("=" * 50)
print("     编程语言三重门")
print("   机器语言 · 汇编语言 · 高级语言")
print("=" * 50)

# ============================================================
# 第一部分:机器语言演示
# ============================================================
print("\n' + '=" * 50)
print("  【一、机器语言 —— 第一代 · 0和1的世界】")
print("=" * 50)

print("'"
什么是机器语言?
 CPU唯一能直接"看懂的"语言
 全部由 0 和 1 组成
 就像用手势比划,不能聊天
""")

print(" 一段机器语言程序(让CPU算 3+5):")
print()

machine_code = [
    ("10110000", "00000011", "把数字3放到寄存器AL中"),
    ("00000100", "00000101", "把AL中的数加上5  AL=8"),
    ("11110100", "--------", "结束程序"),
]

print(f"{'机器码(前8位)':<16}{'机器码(后8位)':<16}{'解释'}")
print("-" * 56)
for line in machine_code:
    print(f"{line[0]:<16}{line[1]:<16}{line[2]}")
print("-" * 56)

print("\n 人看了:这啥呀?完全看不懂!")
print(" 电脑看了:哦!3+5=8,明白了!")

# 机器语言的"难写"模拟
print("\n 现在请你'写'一段机器语言:")
print("   想写 'Hello' 这个词?")
print("   你要写:01001000 01100101 01101100 01101100 01101111")
print("   就5个字母,已经写了40个0和1了!")
print("    累不累?!所以人们发明了汇编语言!")

# ============================================================
# 第二部分:汇编语言演示
# ============================================================
print("\n' + '=" * 50)
print("  【二、汇编语言 —— 第二代 · 用单词说话】")
print("=" * 50)

print("'"
什么是汇编语言?
 用英文单词(助记符)代替0和1
 需要"汇编器"翻译成机器语言
 就像两个人说暗号,比手势高级一点
""")

print(" 同样算 3+5,用汇编语言写:")
print()

asm_code = [
    ("MOV AL, 3", "把数字3送到AL寄存器", "10110000 00000011"),
    ("ADD AL, 5", "把AL加上5  AL=8", "00000100 00000101"),
    ("HLT", "停止程序", "11110100 --------"),
]

print(f"{'汇编指令':<16}{'解释':<28}{'对应的机器码'}")
print("-" * 68)
for line in asm_code:
    print(f"{line[0]:<16}{line[1]:<28}{line[2]}")
print("-" * 68)

print("\n 人看了:MOV是移动,ADD是加,有点明白了!")
print(" 电脑看了:等一下,我先用汇编器翻译一下……")
print("             翻译好了!3+5=8,明白了!")

print("\n 常见汇编指令速查表:")
print(f"{'指令':<8}{'全称':<16}{'含义'}")
print("-" * 40)
print(f"{'MOV':<8}{'Move':<16}{'移动数据'}")
print(f"{'ADD':<8}{'Addition':<16}{'加法'}")
print(f"{'SUB':<8}{'Subtraction':<16}{'减法'}")
print(f"{'MUL':<8}{'Multiply':<16}{'乘法'}")
print(f"{'JMP':<8}{'Jump':<16}{'跳转'}")
print(f"{'CMP':<8}{'Compare':<16}{'比较'}")

# ============================================================
# 第三部分:高级语言演示
# ============================================================
print("\n' + '=" * 50)
print("  【三、高级语言 —— 第三代 · 正常聊天】")
print("=" * 50)

print("'"
什么是高级语言?
 像写英文句子一样写代码
 需要编译器/解释器翻译成机器语言
 就像正常聊天,谁都能学会!
""")

print(" 同样算 3+5,用 Python 写:")
print()

print("  代码:")
print("  ┌─────────────────────────┐")
print("  │  a = 3                   │")
print("  │  b = 5                   │")
print("  │  result = a + b          │")
print("  │  print('3+5=', result)   │")
print("  └─────────────────────────┘")
print()

# 执行Python代码
a = 3
b = 5
result = a + b
print(f"   运行结果:3+5 = {result}")
print()

print(" 人看了:哇!这我看得懂!3+5=8嘛!")
print(" 电脑看了:等一下,我找Python解释器帮我翻译一下……")
print("             翻译执行完毕!3+5=8!")

# ============================================================
# 第四部分:三种语言大对比
# ============================================================
print("\n' + '=" * 50)
print("  【四、三种语言大对比】")
print("=" * 50)

print("\n同样做一件事:计算 3+5,三种语言的写法:")
print()
print(" 机器语言:")
print("   10110000 00000011")
print("   00000100 00000101")
print()
print(" 汇编语言:")
print("   MOV AL, 3")
print("   ADD AL, 5")
print()
print(" 高级语言(Python):")
print("   a = 3")
print("   b = 5")
print("   print(a + b)")
print()

print("对比表格:")
print(f"{'特性':<16}{'机器语言':<14}{'汇编语言':<14}{'高级语言':<14}")
print("-" * 58)
print(f"{'代码样子':<16}{'0和1':<14}{'英文单词':<14}{'像英语句子':<14}")
print(f"{'谁看得懂':<16}{'只有电脑':<14}{'程序员也行':<14}{'谁都能看懂':<14}")
print(f"{'写代码难度':<16}{' 极难':<14}{' 难':<14}{' 简单':<14}")
print(f"{'执行速度':<16}{'⚡最快':<14}{'⚡快':<14}{' 较慢':<14}")
print(f"{'需要翻译':<16}{'不需要':<14}{'要汇编器':<14}{'要编译器/解释器':<14}")
print(f"{'通用性':<16}{'不通用':<14}{'不通用':<14}{'通用':<14}")
print("-" * 58)

# ============================================================
# 第五部分:编译型 vs 解释型
# ============================================================
print("\n' + '=" * 50)
print("  【五、编译型 vs 解释型 —— 两种翻译方式】")
print("=" * 50)

print("'"
 场景:我们有了一本英文小说,想变成中文的
""")

print("=" * 40)
print("  方式一:编译型(翻译整本书)")
print("=" * 40)
print("'"
  找一位翻译官,把整本小说从头到尾翻译一遍
  出一本中文书'哈利·波特'
  以后谁想看,直接拿中文书看,不用找翻译官了!

  优点:看书(运行)的时候特别快!
  缺点:每次修改,都要重新翻译整本书(重新编译)
  代表语言:C、C++、Go、Rust
""")

print("=" * 40)
print("  方式二:解释型(同声传译)")
print("=" * 40)
print("'"
  找一位同声传译,你说一句英文他翻译一句中文
  每次要看书,都得请他过来

  优点:改一句立刻就能看到效果(不用等全部翻译完)
  缺点:每次运行都要翻译,速度慢一点
  代表语言:Python、JavaScript、Ruby
""")

print("\n Python 是解释型语言!")
print("   所以你可以:改一行代码  立刻运行看到效果!")
print("   这也是我们学Python的原因之一——容易调试!")

# ============================================================
# 第六部分:Python代码执行模拟
# ============================================================
print("\n' + '=" * 50)
print("  【六、Python解释器工作模拟】")
print("=" * 50)

print("'"
假设我们有以下Python代码:
  ┌─────────────────────────┐
  │  name = "小明"           │
  │  age = 8                 │
  │  print(name, "今年', age, '岁") │
  └─────────────────────────┘

Python解释器执行过程:
""")

print("第1行:name = '小明'")
print("   Python:好的,我在内存中创建了一个叫 name 的变量")
print("   Python:把 '小明' 这个字符串放进去")
print("  ✅ 第1行执行完毕!")
print()

print("第2行:age = 8")
print("   Python:好的,我再创建变量 age")
print("   Python:把数字 8 放进去")
print("  ✅ 第2行执行完毕!")
print()

print("第3行:print(name, '今年', age, '岁')")
print("   Python:好的,来执行print函数")
print("   Python:找到 name 的值='小明',age 的值=8")
print("   Python:把它们拼接起来……")
print("   Python:输出到屏幕上!")
name = "小明"
age = 8
print(f"  ️ 输出结果:{name} 今年 {age} 岁")
print("  ✅ 第3行执行完毕!")
print()
print(" 看到了吗?Python是逐行解释执行的!")
print("   写完一行就执行一行,这就是解释型语言!")

# ============================================================
# 第七部分:GESP考点小测试
# ============================================================
print("\n' + '=" * 50)
print("  【七、GESP考点小测试】")
print("=" * 50)

print("\n 第一题(判断):机器语言是由0和1组成的。(  )")
print("   答案:√  机器语言就是二进制代码")
print()
print(" 第二题(判断):汇编语言不需要翻译,CPU能直接看懂。(  )")
print("   答案:×  汇编语言需要汇编器翻译成机器语言")
print()
print(" 第三题(选择):Python属于以下哪种语言?")
print("   A. 编译型语言  B. 解释型语言  C. 汇编语言")
print("   答案:B  Python是解释型语言")
print()
print(" 第四题(选择):CPU能直接看懂的是?")
print("   A. 机器语言  B. 汇编语言  C. 高级语言")
print("   答案:A  只有机器语言是CPU的'母语'")
print()
print(" 第五题(排序):按出现时间从早到晚排序")
print("   A. 高级语言  B. 机器语言  C. 汇编语言")
print("   答案:B  C  A")
print("   解释:机器语言(1940s)汇编语言(1950s)高级语言(1960s)")

print("\n' + '=" * 50)
print("   编程语言三重门演示完毕!")
print("   记住动作:01比划 / 短词手势 / 正常说话")
print("=" * 50)
