内容简介
第1章 交互式Shell
1.1一些简单的数学知识
1.1.1整数和浮点数
1.1.2表达式
1.2计算表达式
1.3语法错误
1.4在变量中存储值
1.5小结
第2章 编写程序
2.1字符串值
2.2连接字符串
2.3在IDLE的文件编辑器中编写程序
2.3.1创建Hello World程序
2.3.2保存程序
2.3.3运行程序
2.4 Hello World程序如何工作
2.4.1注释
2.4.2函数:程序中的小程序
2.4.3终止程序
2.5命名变量
2.6小结
第3章“猜数字”游戏
3.1“猜数字”的运行示例
3.2“猜数字”程序的源代码
3.3导入random模块
3.4用random.randint()函数生成随机数
3.5欢迎玩家
3.6流程控制语句
3.6.1使用循环来重复代码
3.6.2组织语句块
3.6.3 for循环语句
3.7玩家的猜测
3.8使用int()函数、float()函数、str()函数和bool()函数来转换值
3.9布尔数据类型
3.9.1比较操作符
3.9.2用条件检查True或False
3.9.3体验布尔值、比较操作符和条件
3.9.4=和==的区别
3.10 if语句
3.11用break语句提早离开循环
3.12判断玩家是否赢了
3.13判断玩家是否输了
3.14小结
第4章 一个讲笑话程序
4.1 Jokes游戏的运行示例
4.2 Jokes游戏的源代码
4.3代码如何工作
4.4转义字符
4.5单引号和双引号
4.6 print()的end关键字形参
4.7小结
第5章Dragon Realm
5.1如何玩Dragon Realm
5.2 Dragon Realm的运行示例
5.3 Dragon Realm的流程图
5.4 Dragon Realm的源代码
5.5导入random和time模块
5.6 Dragon Realm中的函数
5.6.1 def语句
5.6.2调用函数
5.6.3把函数定义放在哪里
5.7多行字符串
5.8 while语句实现循环
5.9布尔操作符
5.9.1 and操作符
5.9.2 or操作符
5.9.3 not操作符
5.9.4布尔操作符的运算
5.10返回值
5.11全局作用域和局部作用域
5.12函数形参
5.13显示游戏结果
5.14决定哪个山洞有友善的龙
5.15 游戏循环
5.15.1在程序中调用函数
5.15.2询问玩家要不要再玩一局
5.16小结
第6章 使用调试器
6.1 Bug的类型
6.2调试器
6.2.1启动调试器
6.2.2用调试器单步执行程序
6.3查找Bug
6.4设置断点
6.5使用断点
6.6小结
第7章 用流程图设计Hangman
7.1如何玩Hangman
7.2 Hangman的运行示例
7.3 ASCII字符图
7.4用流程图来设计一个程序
7.4.1生成流程图
7.4.2流程图的分支
7.4.3结束或者重新开始游戏
7.4.4再猜一次
7.4.5为玩家提供反馈
7.5小结
第8章 编写Hangman的代码
8.1 Hangman的源代码
8.2导入random模块
8.3常量
8.4列表数据类型
8.4.1用索引访问元素
8.4.2列表连接
8.4.3 in操作符
8.5调用方法
8.5.1列表方法reverse()和append()
8.5.2字符串方法split()
8.6从单词列表中获取一个神秘单词
8.7向玩家显示游戏板
8.7.1 list()函数和range()函数
8.7.2列表和字符串分片
8.7.3用空格表示神秘单词
8.8获取玩家的猜测
8.8.1字符串方法lower()和upper()
8.8.2离开while循环
8.9 elif语句
8.10确保玩家输入一个有效的猜测
8.11询问玩家是否想再玩一局
8.12回顾Hangman中的函数
8.13游戏循环
8.13.1调用displayBoard()函数
8.13.2让玩家输入他们的猜测
8.13.3判断字母是否在这个神秘单词中
8.13.4判断玩家是否获胜
8.13.5当玩家猜错时
8.13.6检查玩家是否输了
8.13.7结束并重新设置游戏
8.14小结
第9章 Hangman扩展
9.1添加更多的猜测机会
9.2字典数据类型
9.2.1用len()函数获取字典的大小
9.2.2字典和列表的区别
9.2.3字典方法keys()和values()
9.2.4在Hangman中使用单词的字典
9.3从一个列表中随机选取
9.4从列表中删除项
9.5多变量赋值
9.6向玩家显示单词的分类
9.7小结
第10章Tic Tac Toe
10.1 Tic Tac Toe的运行示例
10.2 Tic Tac Toe的源代码
10.3设计程序
10.3.1用数据表示游戏板
10.3.2游戏AI
10.4导入random模块
10.5在屏幕上打印游戏板
10.6让玩家来选择X或O
10.7决定谁先走
10.8在游戏板上放置一个标记
10.8.1列表引用
10.8.2在makeMove()中使用列表引用
10.9判断玩家是否获胜
10.10复制游戏板的数据
10.11判断游戏板上的格子是否为空
10.12让玩家输入他们的落子
10.13短路求值
10.14从落子列表中选择一个落子
10.15 None值
10.16创建计算机的AI
10.16.1计算机判断自己能否落子即获胜
10.16.2计算机判断玩家是否可以落子即获胜
10.16.3依次判断角、中心和边
10.16.4判断游戏板是否满了
10.17游戏循环
10.17.1决定玩家的符号和谁先走
10.17.2运行玩家的轮次
10.17.3运行计算机的轮次
10.17.4询问玩家是否再玩一次
10.18小结
第11章 推理游戏Bagels
11.1 Bagels的运行示例
11.2 Bagels的源代码
11.3 Bagels的流程图
11.4导入random并定义getSecretNum()
11.5打乱一组唯一数的顺序
11.5.1用random.shuffle()函数改变列表项的顺序
11.5.2从打乱次序的数中获取神秘数字
11.6复合赋值操作符
11.7计算要给出的线索
11.8列表方法sort()
11.9字符串方法join()
11.10检查字符串中是否只包含数字
11.11游戏的开始
11.12字符串插值
11.13游戏循环
11.13.1获取玩家的猜测
11.13.2根据玩家的猜测给出线索
11.13.3判断玩家的输赢
11.13.4询问玩家是否再玩一局
11.14小结
第12章 笛卡尔坐标
12.1网格和笛卡尔坐标
12.2负数
12.3计算机屏幕的坐标系
12.4数学技巧
12.4.1技巧1:减号吃掉它左边的加号
12.4.2技巧2:两个减号合并为一个加号
12.4.3技巧3:加法的可交换性
12.5绝对值和abs()函数
12.6小结
第13章Sonar Treasure Hunt游戏
13.1 Sonar Treasure Hunt的运行示例
13.2 Sonar Treasure Hunt的源代码
13.3设计程序
13.4导入random、 sys和math模块
13.5创建一个新的游戏板
13.6绘制游戏板
13.6.1在顶部绘制X轴
13.6.2绘制海洋
13.6.3打印出海洋中的行
13.6.4在游戏板底部绘制X轴坐标
13.7创建随机的藏宝箱
13.8判断一次移动是否有效
13.9在游戏板上进行一次移动
13.9.1找到最近的藏宝箱的算法
13.9.2使用列表方法remove()删除值
13.9.3获取玩家的移动
13.10为玩家打印出游戏说明
13.11游戏循环
13.11.1为玩家显示游戏的状态
13.11.2处理玩家的移动
13.11.3找到一个沉没的藏宝箱
13.11.4判断玩家是否赢了
13.11.5判断玩家是否输了
13.11.6用sys.exit()函数终止程序
13.12小结
第14章 凯撒密码
14.1密码学和加密
14.2凯撒密码简介
14.3凯撒密码的运行示例
14.4凯撒密码程序的源代码
14.5设置最大键长度
14.6决定加密还是解密
14.7从玩家处得到消息
14.8从玩家处得到密钥
14.9加密或解密消息
14.9.1使用字符串方法find()找到所传递的字符串
14.9.2加密或解密每个字母
14.10程序开始
14.11暴力破解
14.12添加暴力破解模式
14.13小结
第15章Reversegam游戏
15.1如何玩Reversegam
15.2 Reversegam的运行示例
15.3 Reversegam的源代码
15.4导入模块和设置常量
15.5游戏板数据结构
15.5.1在屏幕上绘制游戏板数据结构
15.5.2创建一个新的游戏板数据结构
15.6判断一次落子是否有效
15.6.1查看8个方向中的每一个方向
15.6.2发现是否有可以反转的棋子
15.7判断有效的坐标
15.7.1得到所有有效移动的一个列表
15.7.2调用bool()函数
15.8计算游戏板的得分
15.9获取玩家的棋子选择
15.10决定谁先走
15.11在游戏板上落下一个棋子
15.12复制游戏板数据结构
15.13判断一个格子是否在角落上
15.14获取玩家的移动
15.15获取计算机的移动
15.15.1角落移动策略
15.15.2获取最高得分的移动的列表
15.16在屏幕上打印分数
15.17游戏开始
15.17.1检查僵局
15.17.2运行玩家的轮次
15.17.3运行计算机的轮次
15.18游戏循环
15.19询问玩家是否再玩一局
15.20小结
第16章Reversegam Al模拟
16.1让计算机和自己下棋
16.1.1模拟程序1的运行示例
16.1.2模拟程序1的源代码
16.1.3删除玩家提示并添加一个计算机玩家
16.2让计算机自己多玩几次
16.2.1模拟程序2的运行示例
16.2.2模拟程序2的源代码
16.2.3记录多次游戏
16.2.4注释掉print()函数调用
16.2.5使用百分数评级AI
16.3比较不同的AI算法
16.3.1模拟程序3的源代码
16.3.2模拟程序3的AI是如何工作的
16.3.3比较AI
16.4小结
第17章 创建图形
17.1安装pygame
17.2 pygame中的Hello World
17.3运行pygame Hello World程序的示例
17.4 pygame Hello World的源代码
17.5导入pygame模块
17.6初始化pygame
17.7设置pygame窗口
17.7.1元组
17.7.2 Surface对象
17.8设置颜色变量
17.9将文本写到pygame窗口上
17.9.1使用字体来样式化文本
17.9.2渲染一个Font对象
17.9.3使用Rect属性设置文本位置
17.10用一种颜色填充一个Surface对象
17.11 pygame的绘制函数
17.11.1绘制一个多边形
17.11.2绘制直线
17.11.3绘制圆形
17.11.4绘制椭圆形
17.11.5绘制矩形
17.11.6给像素着色
17.12 Surface对象的blit()方法
17.13将Surface对象绘制到屏幕上
17.14事件和游戏循环
17.14.1获取事件对象
17.14.2退出程序
17.15 小结
第18章 动画图形
18.1 Animation程序的运行示例
18.2 Animation程序的源代码
18.3让积木移动和弹回
18.4设置常量变量
18.4.1用于方向的常量变量
18.4.2用于颜色的常量变量
18.5设置积木数据结构
18.6游戏循环
18.6.1处理玩家退出的情况
18.6.2移动每一个积木
18.6.3弹跳一个积木
18.6.4将积木绘制到窗口中新的位置
18.6.5在屏幕上绘制窗口
18.7小结
第19章 碰撞检测
19.1碰撞检测程序的运行示例
19.2 Collision Detection程序的源代码
19.3导入模块
19.4使用一个时钟来同步程序
19.5创建窗口和数据结构
19.6设置变量以记录移动
19.7处理事件
19.7.1处理KEYDOWN事件
19.7.2处理KEYUP事件
19.8转移玩家
19.9添加新的食物方块
19.10在屏幕上移动玩家
19.10.1将玩家绘制到屏幕上
19.10.2检查碰撞
19.11在窗口上绘制食物方块
19.12小结
第20章 声音和图像
20.1使用精灵添加图像
20.2声音文件和图像文件
20.3 Sprites and Sounds程序的运行示例
20.4 Sprites and Sounds程序的源代码
20.5创建窗口和数据结构
20.5.1添加一个精灵
20.5.2改变一个精灵的大小
20.6创建音乐和声音
20.6.1添加声音文件
20.6.2切换和关闭声音
20.7把玩家绘制到窗口上
20.8检查碰撞
20.9在窗口中绘制樱桃
20.10小结
第21章 带有声音和图像的Dodger
21.1回顾pygame的基本数据类型
21.2 Dodger的运行示例
21.3 Dodger的源代码
21.4导入模块
21.5创建常量
21.6定义函数
21.6.1终止和暂停游戏
21.6.2记录和敌人的碰撞
21.6.3将文本绘制到窗口
21.7初始化pygame并设置窗口
21.8设置Font、 Sound和Image对象
21.9显示开始界面
21.10开始游戏
21.11游戏循环
21.11.1处理键盘事件
21.11.2处理鼠标移动
21.12增加新的敌人
21.13移动玩家角色和敌人
21.14实现作弊模式
21.15 删除敌人
21.16绘制窗口
21.16.1绘制玩家的得分
21.16.2绘制玩家角色和敌人
21.17碰撞检测
21.18游戏结束屏幕
21.19修改Dodger游戏
21.20小结