来源 | 异步
当你看到这个题目,或许会想,这不是搞笑吗?众所周知,高等数学是编程的基础和前提,而说起程序编写员,在普通人眼里就是数学学霸的代名词,人们往往会把它和那些数学天才的名字联系在一起,比如阿兰·图灵、冯诺依曼。
只会中学数学知识,连高数门槛都达不到,何谈学习编程呢?
那么事实果真这么残酷吗?我们先来看一道简单的题目:
列出一个十位数比个位数小1的两位数。
用常规方法来写答案非常简单,如何用python把它表达出来呢,代码如下:
For tensplacein range(1,10):tensplace=onesplace-1 ifonesplace<10: tensdigit=tensplace*10+onesplaceprint(tensdigit)else:break
在Python语言中,读写规范和英语语法十分接近,所以我们可以很显然地知道:
range表示范围,
十位数的数字只能取1-10以下的数字,
两位数的数值=十位数数字*10+个位数数字
输出结果:12、23、34、45……
是不是觉得Python入门其实并没有想象中那么困难呢?你或许听大多数人讲过数学不好不要学习Python,但事实上如果你不是进行算法类的编程,先从应用类编程开始,有初高中的数学知识就足够了。
我们必须承认高等数学是编程的基础,那些数学随手就能考满分的大神,确实有更大概率成为优秀程序员。
但由于Python简单明确的设计特点,即使你只有高中数学知识,也能通过一步步的学习体会到Python编程的乐趣,甚至利用Python解决数学问题,提高数学水平。
同时,数学和编程都十分需要逻辑能力和抽象思维,以数学作为衔接,可以引导青少年逐渐接触并学习Python等计算机语言,通过学习编程,也可以锻炼青少年的数学能力。所以我们常常会见到会编程的孩子,数学往往也很厉害。
目前很多学校都已经在践行这样的想法,美国大学最近几年出版的数学教材,都会有结合数学软件(MATLAB等CAS)来学习的指导说明,也就是说CAS以及编程已经是大学数学学习的一部分了。
而部分高中也开始把编程与方程,几何和概率统计等数学知识相结合。
下面我们就来一起看一道经典案例:
我们初中时代都做过的思考题,鸡兔同笼问题:
一笼鸡和兔子,我们数了一下,鸡和兔子的头一共有35个,但是鸡和兔子的脚一共有94只。请问鸡和兔的数量分别是多少。
如何用python来解决呢?
根据题意,头的总数为35,我们用变量head来记录头的总数;
腿的总数为94,我们用变量foot来记录腿的总数;
我们用变量x记录鸡的数量。因为头的总数为35,说明鸡和兔共有35只,所以鸡的数量是0-35之间的某一个数,这里我们用for循环来指挥计算机,自动罗列所有可能出现的情况;
然后,我们用变量y记录兔子的数量。因为鸡和兔的总数等于头的数量,所以兔的数量rabbit等于头的总数head减去鸡的数量;
鸡有两条腿,兔子有四条腿,所以腿的总数为2x+4y。
由于鸡兔总数是确定的,脚的总数也已知,那么方程的代码表示如下:
head=35foot=94for x in range (0,hend+1) y=head-x if x*2+y*4=foot print(‘鸡’x,‘兔’y)
把我们已知数输入,输出结果为鸡23,兔12。
是不是和自己列草稿算的一模一样呢?
所以,懂得编程的学生都会自然地使用编程来学习数学,不仅能锻炼能力,也在不知不觉中提升了逻辑和抽象思维,这恰恰也是《Python数学编程》这本书的编写初衷。
Python与数学结合的艺术:《Python数学编程》
「链接」
这是一本有趣有趣、生动、实用,高中生也能看得懂的Python编程书,也是美国亚马逊青少年学计算机编程畅销书!通过编程来探究代数、统计、几何、概率、微积分等数学主题。
将程序设计和数学巧妙地结合起来,从简单的项目开始,应用Python解决高中和大学低年级的数学问题,比如几何、概率、统计以及微积分等,为进一步学习更复杂的数学内容以及Python编程语言打下坚实的基础。
本书也可作为Python初学者的入门读物,通过学习书中的示例程序和完成那些编程挑战,读者可以提高自己的编程能力和技巧。
内容详实,易学易用
1.用统计方法描述数据,用线图、条形图和散点图可视化数据
2.用程序探究掷硬币、掷骰子和其他概率游戏中的集合理论和概率问题
3·用Python的符号数学功能解决代数问题
4·绘制几何图形,探索分形,如Barnsley蕨类植物、Sierpiński三角以及Mandelbrot集
5·写程序求解导数与积分
应用Python探究高中和大学低年级的数学主题:
比如代数、统计、几何、概率以及微积分。你会从简单的项目学起,比如因式分解、二次方程求解,当你掌握了这些基础的知识后,就可以处理更复杂的项目了。
有创意的编程挑战以及应用实例:
可以帮助你把新学到的数学和编程技巧用于实践。你可以尝试解决各种有趣的问题,比如不等式求解、洗牌、画出子弹飞行过程中重力的影响、探究斐波那契数列与黄金分割之间的联系、利用向板子上投掷100000次“飞镖”来估计圆的面积等。
专业点评,权威推荐
“这是一本很棒的书,真希望早先我自己在学习的时候就能遇到这本书,它可以更好地巩固我所学的数学知识。我正在努力地将这本书的各个方面融入我的课堂中,因为我和我的学生们都非常喜欢这本书。如果你还在犹豫是否应该买这本书,强烈建议你购买。”
—— 高中教师Neal Whitlock
“作者非常出色地将Python与高年级的数学概念清晰地联系了起来,并演示了如何将数学问题的求解转化为Python程序。这本书应该在每个几何老师的书架上占有一席之地。”
—— 校园图书馆期刊(School LibraryJournal)
“这是一本很棒的书,真希望早先我自己在学习的时候就能遇到这本书,它可以更好地巩固我所学的数学知识。我正在努力地将这本书的各个方面融入我的课堂中,因为我和我的学生们都非常喜欢这本书。如果你还在犹豫是否应该买这本书,强烈建议你购买。”
—— 高中教师Neal Whitlock
适用人群
本书适合广大的青少年、年轻人学习编程和利用编程学数学。
无论你是对数学还是对编程感兴趣,本书都会带给你不一样的体验。如果你是一位老师,希望教学生编程,你会发现Python让编程变得更容易。如果你是一位学生,当你致力于解决数学问题时,让Python来帮助你处理那些烦琐的计算工作吧!
目录一览,尽在掌握
第1章 处理数字 1
1.1 基本数学运算 1
1.2 标签:给数字命名 3
1.3 不同类型的数字 4
1.3.1 分数的操作 4
1.3.2 复数 5
1.4 获取用户输入 6
1.4.1 处理异常和无效输入 8
1.4.2 将分数和复数作为输入 9
1.5 编写一个数学计算程序 10
1.5.1 计算整数因子 10
1.5.2 生成乘法表 12
1.5.3 转换测量单位 14
1.5.4 求二次方程的根 16
1.6 本章内容小结 18
1.7 编程挑战 19
#1:偶数奇数自动售货机 19
#2:增强型乘法表生成器 19
#3:增强型单位转换器 19
#4:分数计算器 19
#5:为用户设置退出选项 20
第2章 数据可视化 23
2.1 了解笛卡儿坐标平面 23
2.2 使用列表和元组 24
2.3 用matplotlib绘图 26
2.3.1 图上的标记 28
2.3.2 绘制纽约市的年平均气温 29
2.3.3 比较纽约市的月平均气温 31
2.3.4 自定义图形 34
2.3.5 保存图形 37
2.4 用公式绘图 37
2.4.1 牛顿万有引力定律 38
2.4.2 抛物运动 39
2.5 本章内容小结 44
2.6 编程挑战 44
#1:温度如何变化 45
#2:探索二次函数的可视化 45
#3:增强型抛物轨迹比较程序 46
#4:可视化你的支出 46
#5:探索斐波那契序列与黄金比例 48
第3章 数据的统计学特征 50
3.1 计算均值 50
3.2 计算中位数 52
3.3 计算众数并创建频数表 54
3.3.1 寻找最常见的元素 54
3.3.2 计算众数 55
3.3.3 创建频数表 57
3.4 测量离散度 59
3.4.1 计算一组数字的极差 59
3.4.2 计算方差和标准差 60
3.5 计算两个数据集之间的相关性 62
3.5.1 计算相关系数 63
3.5.2 高中成绩和大学入学考试成绩 64
3.6 散点图 67
3.7 从文件中读取数据 68
3.7.1 从文本文件中读取数据 69
3.7.2 从CSV文件中读取数据 70
3.8 本章内容小结 73
3.9 编程挑战 73
#1:更好的相关系数计算程序 73
#2:统计计算器 73
#3:用其他CSV数据做实验 73
#4:计算百分位数 74
#5:创建分组频数表 74
第4章 用SymPy包解代数和符号数学问题 76
4.1 定义符号和符号运算 76
4.2 使用表达式 78
4.2.1 分解和展开表达式 78
4.2.2 使表达式整齐输出 79
4.2.3 输出级数 80
4.2.4 用值替代符号 81
4.2.5 将字符串转换为数学表达式 84
4.2.6 表达式乘法 85
4.3 解方程 86
4.3.1 解二次方程 86
4.3.2 用其他变量求解一个变量 87
4.3.3 解线性方程组 88
4.4 用SymPy包绘图 88
4.4.1 绘制用户输入的表达式 91
4.4.2 多函数图形绘制 92
4.5 本章内容小结 94
4.6 编程挑战 94
#1:寻找因子 94
#2:图形方程求解器 94
#3:级数求和 94
#4:解单变量不等式 95
第5章 集合与概率 98
5.1 什么是集合?98
5.1.1 构建集合 99
5.1.2 子集、超集与幂集 100
5.1.3 集合运算 102
5.2 概率 106
5.2.1 事件A或事件B发生的概率 108
5.2.2 事件A与事件B同时发生的概率 109
5.2.3 生成随机数 109
5.2.4 非均匀随机数 112
5.3 本章内容小结 114
5.4 编程挑战 114
#1:使用文氏图来可视化集合之间的关系 114
#2:大数定律 117
#3:掷多少次硬币会输光你的钱?117
#4:洗牌 118
#5:估计一个圆的面积 118
第6章 绘制几何图形和分形 120
6.1 使用matplotlib的patches绘制几何图形 120
6.1.1 绘制一个圆 122
6.1.2 创建动画图形 123
6.1.3 抛物轨迹动画演示 125
6.2 绘制分形 127
6.2.1 平面上点的变换 127
6.2.2 绘制Barnsley蕨类植物 131
6.3 本章内容小结 134
6.4 编程挑战 134
#1:在正方形中填充圆形 134
#2:绘制Sierpiński三角 136
#3:探索Hénon函数 137
#4:绘制Mandelbrot集 138
第7章 解微积分问题 142
7.1 什么是函数?142
7.1.1 函数的定义域和值域 143
7.1.2 常用数学函数概述 143
7.2 SymPy中的假设 144
7.3 计算函数极限 145
7.3.1 连续复利 147
7.3.2 瞬时变化率 147
7.4 函数求导 148
7.4.1 求导计算器 149
7.4.2 求偏导数 150
7.5 高阶导数和最大最小值点 150
7.6 用梯度上升法求全局最大值 153
7.6.1 梯度上升法的通用程序 156
7.6.2 关于初始值的附加说明 157
7.6.3 步长和epsilon的角色 158
7.7 求函数积分 160
7.8 概率密度函数 162
7.9 本章内容小结 164
7.10 编程挑战 164
#1:证明函数在一点处的连续性 165
#2:梯度下降法的实现 165
#3:两条曲线围成的面积 165
#4:计算曲线的长度 166
后 记 168
下一步可以探索的事情 168
欧拉项目 168
Python文档 168
参考书 169
获取帮助 169
附录A 软件安装 170
A.1 Microsoft Windows 171
升级SymPy 172
安装matplotlib-venn 172
启动Python Shell 172
A.2 Linux 172
升级SymPy 173
安装matplotlib-venn 173
启动Python Shell 173
A.3 Mac OS X 173
升级SymPy 176
安装matplotlib-venn 176
启动Python Shell 176
附录B Python主题概览 177
B.1 if __name__ == '__main__' 177
B.2 列表推导(List Comprehensions) 178
B.3 字典数据结构 180
B.4 多个返回值(Multiple Return Values) 181
B.5 异常处理(Exception Handling) 183
指定多个异常类型 183
else代码块 184
B.6 在Python中读取文件 185
一次性读取所有行 186
指定一个文件名作为输入 186
读取文件时错误的处理 186
B.7 代码重用 189
- END -