恐龙蛋仔 🦖 恐龙蛋仔
海盗蛋仔 🏴‍☠️ 海盗蛋仔
蛋小黄 👑 蛋小黄
草莓蛋仔 🍓 草莓蛋仔
宇航员蛋仔 🚀 宇航员蛋仔
基于《父与子的编程之旅》第二版 · 27章精编

Python 蛋仔派对

闯关地图 · 16关大冒险
和蛋仔一起从零开始学Python,每行代码都是一场好玩的派对!

💻 开始编程闯关 🎬 观看教学视频
27
原书章节
16
派对关卡
458
页知识
乐趣

派对闯关地图

第 1 关

蛋仔初见面啦~

对应章节:第1章 出发吧 · 第2章 记住内存和变量

欢迎来到蛋仔派对!先安装Python,学会用 print() 让蛋仔说话,再用变量给蛋仔做一张属性卡。这是所有冒险的起点!

print()变量赋值字符串数字IDLE
# 让蛋仔说话 + 做属性卡
print("蛋仔说:你好呀!派对开始啦!")

egg_name = "小黄蛋"      # 蛋仔名字
level = 15                # 等级
print(egg_name, "是", level, "级蛋仔!")
第 2 关

蛋仔数金币叮~

对应章节:第3章 基本数学运算 · 第4章 数据的类型

蛋仔要数金币啦!学会加减乘除和取余,还要知道文字和数字的区别——用 int()float()str() 变来变去!

+ - * /% //运算顺序int()float()str()type()
# 蛋仔数金币
coins = 50 + 30        # 赢了80金币
spent = 150
left = coins - spent
print("还剩", left, "金币")

price = int("888")     # 文字"888"变数字888
print(type(price))       # <type 'int'>
第 3 关

蛋仔悄悄话呐~

对应章节:第5章 输入 · 第6章 GUI—图形用户界面

让蛋仔听你说话!用 input() 和蛋仔聊天,再用 EasyGui 做一个带按钮和输入框的图形界面,选择你喜欢的派对口味!

input()int(input())EasyGui按钮输入框选择框
# 蛋仔聊天机器人
name = input("你叫什么名字? ")
print("你好,", name, "!欢迎来到蛋仔派对!")

age = int(input("你几岁了? "))
print("明年你就", age + 1, "岁了!")
第 4 关

蛋仔选哪边嘞~

对应章节:第7章 判断再判断

蛋仔要学会判断了!用 if/elif/else 让蛋仔根据不同情况做不同的事。还有 andornot 组合条件,聪明蛋仔上线!

ifelifelse比较运算符and / or / not缩进
# 蛋仔成绩判断器
score = int(input("派对这局得多少分? "))

if score >= 90:
    print("太棒了!蛋仔之王!")
elif score >= 60:
    print("不错不错,蛋仔及格了!")
else:
    print("没关系,蛋仔下次加油!")
第 5 关

蛋仔转圈圈噜~

对应章节:第8章 转圈圈 · 第9章 全都为了你—注释

让蛋仔重复做事不用写100遍!学会 forwhile 循环,还有 range()breakcontinue。顺便学会写注释,给代码加备注。

forwhilerange()breakcontinue# 注释多行注释
# 蛋仔派对倒计时
for i in range(5, 0, -1):  # 从5倒数到1
    print(i, "...")
print("派对开始!!!")

# while循环:蛋仔蹦蹦跳
count = 0
while count < 3:
    print("蛋仔蹦!")
    count = count + 1
第 6 关

蛋仔叠高高哒~

对应章节:第10章 游戏时间到了 · 第11章 嵌套与可变循环

第一个游戏项目来了!用学过的知识做一个真正的小游戏。再学嵌套循环(循环套循环)和可变循环,画出更酷的图案。

游戏开发嵌套循环可变循环循环套循环字符串乘法
# 嵌套循环:画蛋仔金字塔
for i in range(1, 6):
    for j in range(i):
        print("蛋", end="")
    print()  # 换行
# 蛋 / 蛋蛋 / 蛋蛋蛋 / 蛋蛋蛋蛋 / 蛋蛋蛋蛋蛋
第 7 关

蛋仔藏宝柜呦~

对应章节:第12章 收集起来—列表与字典

蛋仔的皮肤太多了,需要收纳!学会用列表存一排东西,用字典存属性对。增删改查、排序、分片,管理蛋仔的收藏柜!

列表[]append()remove()分片sort()字典{}键值对
# 蛋仔皮肤收藏柜
skins = ["海盗帽", "恐龙装", "草莓斗篷"]
skins.append("骑士甲")          # 添加新皮肤
print("你有", len(skins), "个皮肤")
print("第一个是", skins[0])

# 字典:蛋仔属性卡
egg = {"名字": "小黄蛋", "等级": 15, "金币": 888}
print(egg["名字"], "有", egg["金币"], "金币")
第 8 关

蛋仔放绝招啦~

对应章节:第13章 函数

学会定义函数,就像蛋仔发明绝招——写一次,以后随时用!带参数、有返回值,还能搞清楚变量的作用域(哪些变量在哪里能用)。

def参数return局部变量全局变量global
# 蛋仔的绝招
def egg_skill(name, power):
    print(name, "释放了绝招!")
    print("威力", power, "点!")
    return power

damage = egg_skill("小黄蛋", 999)
print("造成", damage, "点伤害!")
第 9 关

蛋仔大家族哟~

对应章节:第14章 对象 · 第15章 模块

蛋仔本身就是一个"对象"——有属性(名字、颜色)和方法(说话、跳跃)。学会创建类,再用 import 导入模块,像搭积木一样拼出大程序!

class对象属性方法__init__import模块命名空间
# 蛋仔是一个对象!
class Egg:
    def __init__(self, name, color):
        self.name = name
        self.color = color

    def say_hi(self):
        print(self.name, "说:你好呀!")

my_egg = Egg("小黄蛋", "黄色")
my_egg.say_hi()

import random
print("随机皮肤:", random.choice(["海盗帽", "恐龙装"]))
第 10 关

蛋仔小画师呀~

对应章节:第16章 图形 · 第17章 动画精灵和碰撞检测

用 Pygame 在屏幕上画画!画圆、画线、放图片,再让蛋仔动起来——学习动画精灵和碰撞检测,做出真正能玩的图形游戏!

Pygame画图像素动画Sprite精灵碰撞检测反弹
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
screen.fill((135, 206, 235))  # 天空蓝

# 画一个蛋仔(黄色圆)
pygame.draw.circle(screen, (255, 217, 61), (200, 150), 50)
pygame.display.flip()
第 11 关

蛋仔蹦蹦跳哇~

对应章节:第18章 一种新的输入—事件 · 第19章 声音

让蛋仔响应你的键盘和鼠标!学习事件驱动编程,再给游戏加上声音和背景音乐,做出有声有色的 PyPong 弹球游戏!

键盘事件鼠标事件定时器mixer播放音效背景音乐PyPong
import pygame
for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_SPACE:
            print("蛋仔跳跃!")
    elif event.type == pygame.MOUSEBUTTONDOWN:
        print("点击位置:", event.pos)

# 播放音效
sound = pygame.mixer.Sound("bounce.wav")
sound.play()
第 12 关

蛋仔美美哒呐~

对应章节:第20章 更多GUI · 第21章 打印格式化与字符串

用 PyQt 做更专业的界面,学会菜单、按钮、滑块。再用字符串格式化让输出整整齐齐——制表符、对齐、数字格式,蛋仔美工师上线!

PyQt菜单按钮滑块\t制表符format()f-string
# 字符串格式化
egg_name = "小黄蛋"
coins = 888
print(f"{egg_name}有{coins}金币")
print("{:>6}的等级是{:<3}级".format("小黄蛋", 15))
# 右对齐6格  左对齐3格
print("金币:{:.2f}".format(888.5))  # 888.50
第 13 关

蛋仔开盲盒嘻~

对应章节:第22章 文件输入与输出 · 第23章 碰运气—随机性

学会读写文件,把蛋仔的游戏进度保存下来!用 pickle 存复杂数据。再用 random 模块掷骰子、抽扑克牌,做蛋仔抽奖机!

open()read()write()picklerandomrandint()choice()扑克牌
import random, pickle

# 蛋仔抽奖机
prizes = ["海盗帽", "100金币", "草莓斗篷"]
print("蛋仔抽奖:", random.choice(prizes))
print("掷骰子:", random.randint(1, 6))

# 保存游戏进度
save = {"level": 15, "coins": 888}
with open("egg_save.pkl", "wb") as f:
    pickle.dump(save, f)
print("游戏进度已保存!")
第 14 关

蛋仔小宇宙嗷~

对应章节:第24章 计算机仿真

用代码模拟真实世界!做一个月球着陆器游戏,学习跟踪时间、保存时间数据。最后做出属于你自己的电子宠物——蛋仔模拟器!

仿真建模Lunar Lander时间跟踪time模块datetime电子宠物
import time

# 蛋仔电子宠物
hunger = 0
while hunger < 10:
    print(f"蛋仔饥饿值:{hunger}")
    if hunger >= 7:
        print("蛋仔饿了,请喂食!")
    time.sleep(1)
    hunger += 1
print("蛋仔饿坏了!快喂食!")
第 15 关

蛋仔打大王咯~

对应章节:第25章 Skier游戏的说明 · 第26章 Python Battle

两个终极项目来了!先深入理解 Skier 滑雪游戏的每个细节,再编写 Python Battle 对战机器人——用 AI 控制蛋仔和其他机器人对战!

Skier游戏障碍物AI机器人对战逻辑坐标系统策略
# 蛋仔AI对战机器人
def egg_robot(score, opponent_score):
    if score < 30:
        return "防守"      # 分低就防守
    elif score >= 70:
        return "全力进攻"  # 分高就猛攻
    else:
        return "平衡策略"

print(egg_robot(25, 50))   # 防守
print(egg_robot(85, 50))   # 全力进攻
第 16 关 · 最终关

蛋仔毕业咯耶~

对应章节:第27章 接下来呢

恭喜通关!你已经从零基础学会了Python编程的核心知识。接下来往哪走?游戏编程、Web开发、AI人工智能……蛋仔的世界无限大,继续探索吧!

后续方向Pygame进阶Web开发其他语言移动应用BASIC传承
# 蛋仔毕业证书
print("""
╔══════════════════════════════╗
║    蛋仔派对 · 毕业证书       ║
║                              ║
║  恭喜你完成了16关挑战!      ║
║  你已经掌握了Python编程      ║
║  的核心技能。                ║
║                              ║
║  接下来的路,由你自己创造!   ║
╚══════════════════════════════╝
""")
🎉

蛋仔派对 · 通关证书

恭喜你完成了全部16关挑战!

从第一行 print() 到 AI 对战机器人,

你已经掌握了 Python 编程的核心技能。

接下来的派对,由你来创造!