前言 -> 计算思维
四要素
- 分解:把数据、过程或问题分解成更小的、易于管理或解决的部分
- 模式识别:观察数据的模式、趋势和规律
- 抽象:识别模式形成背后的一般原理
- 算法开发:为解决某一类问题撰写一系列详细的指令
什么是编程
很简单,编程(programming)就是告诉计算机要做什么。计算机只是一些没有生命的机器,它们自己可不知道该做什么,一切都得你来告诉它,而且你还必须把细节都说清楚。不过不要忘了,一定要自己动手试一试,如果只是纸上谈兵,只看不做,你就无法感受到程序成功运行那一刻的快乐和成就感。


什么是算法
算法就是计算或者解决问题的步骤。我们可以把它想象成食谱。要想做出特定的料理,就要遵循食谱上的步骤;同理,要想用计算机解决特定的问题,就要遵循算法。这里所说的特定问题多种多样,比如“将随意排列的数字按从小到大的顺序重新排列”,“寻找出发点到目的地的最短路径”,等等。
课程导学
面向编程零基础的Python语言入门课程,以引导学员自主思考为核心思想,不“念使用说明书”式的灌输型教学。鼓励学员勤动手,尝试多种可能性,进而推导出一般性规律,总结经验,掌握创造‘轮子’的能力。
本课程不教什么
由于 Python 语言的语法,非常接近自然语言的语法,所以市面上充斥着大量的《Python:从入门到精通》、《2小时学会Python》等等。此类课程更像是一场电影,听的时候什么能都听懂,内容非常精彩,但过后什么不记得。准确的说本质上什么都没有学会,仅仅是了解了世界上有一种开发语言,语法易懂,上手容易。
Python的语法简单易学,2小时从入门到“精通”后,大部分网络课程,就开始百科全书式的罗列常用模块,以及常用类中提供的各种“魔法”方法。在我们看来,这样跟通读Python官方文档,没有任何本质上的区别。
>>> la = [1, 2, 3, 4, 5, 6]>>> lb = la[::-1]>>> lb[6, 5, 4, 3, 2, 1]
简单的一个操作 la[::-1],得到倒序排列的数组 [6, 5, 4, 3, 2, 1],厉害吧?不,这仅仅是Python为我们提供了很多便捷的“操作”而已。这个操作很“厉害”,但学员并不一定厉害,真正掌握了背后的处理原理,甚至自己写出一套更加便捷的处理程序,才算是真正的“厉害”。
本课程不教:语法“糖”,不罗列“魔法”方法,不百科全书式的念文档、举例子、展示执行结果。
本课程教什么
会说话吗?会看懂220个基本的 Sight Words 吗?那么你一定能看懂绝大部分 Python 语句,剩下看不懂的怎么办?预测 -> 执行 -> 验证 -> 学习 -> 掌握
预测至上
编程是一门互动性非常强的课程,绝对不是老师在上面讲,学生在下面听就能学好的。
以学员为中心,自己推导出来的结论,印象才更深刻,理解才更透彻。世界上有非常多种编程语言,Python仅仅是几十种主流编程语言中的一种。所以掌握Python的编程语法是远远不够的,更重要的是掌握编程这件事背后的思维方式:计算思维。
Python恰巧是我们学习这种思维方式的一种介质,所以本课程会弱化编程语言的概念,逐步强化计算思维这种新的思维方式,也是本课程设立的初衷。
不“乱”猜答案
根据下面的代码:
>>> print('Hello World')Hello World>>>
预测,下面的一段代码,会发生什么?
>>> name = "Pitt">>> print('Hello' + name)
稍微变更一下代码,又会发生什么呢?
>>> print('Hello', name)
预测不是“瞎”猜。预测是“合理”推断,合哪个理呢?不管哪个理,有个理就行,有理就不是瞎猜,不管此理正确与否。在初始阶段,合自己的理就行,如果预测对了,会进一步强化自己的理,如果预测错了,学会一步步调整自己的理,直至预测正确。
实际上,机器学习大体上也就是这么个过程,机器学习的优势在大数据,样本多,调整快,但本质上机器并不懂为什么,也就是机器是依靠大力出奇迹。我们的优势在于,能搞明白为什么,进而有目的,有方向的调整,以达到更好的结果。
那么上面的两段代码会有什么样的输出呢,你预测到了吗?
HelloPitt>>>Hello Pitt>>>
再来几个例子:
age = 15if age >= 18:print("You're old enough to buy a ticket for this film.")else:print(f"You'll be old enough in {18 - age} years")
favorite_foods = ["Sushi", "Apple", "Mango", "Pizza", "Chicken"]print(favorite_foods[2])print(favorite_foods[10])
IPO: 输入、处理、输出

本课程教:推理能力,创造轮子(module)的能力。
三个小程序 -> 观察
两种编程方式
- 交互式:对每个输入语句即时运行结果,适合语法练习
- 文件式:批量执行一组语句并运行结果,编程的主要方式
#CalCircle.pyr = 25area = 3.1415 * r * rprint(area)print("{:.2f}".format(area))
import turtleturtle.pensize(2)turtle.circle(10)turtle.circle(40)turtle.circle(80)turtle.circle(160)
蟒蛇绘制 -> 模仿
问题分析
算法设计
实例编写
举一反三
绘图体系 -> 模块
turtle库
画布
画笔
太阳系背景 -> 数据类型
整数
浮点数
random库
时间弧度转换 -> 语法元素
import mathdef tan(a):assert len(a) == 3, 'invalid params'h = a[2]m = a[1]s = a[0]#first convert a to hours in decimalshours = h + m * 1/60 + s * 1/3600print('the hours: ', hours)#Then, multiplying by 30, obtain the degreedegree = 30 * hoursprint('the degree: ', degree)#Multiplying the degree by 𝜋/180 gives a in radiansradians = degree * (2*math.pi) / 360print('the radians:', radians)tana = math.tan(radians)print('the tan𝜶: ', tana)return tana#ta = tan([9, 15, 55.8])ta = tan([25, 33, 6])print(ta)
缩进
变量
注释
猜数字 -> 算法设计
'''写一个程序,随机设定一个数字,让用户猜测,并给出猜测结果提示(偏大/偏小/相等)。有6次猜测机会,如果6次之内猜中或者6次以上未猜中,则游戏结束。'''import random'''步骤一x = random.randint(1, 100)guess = int(input('please guess a number: '))if guess > x:print('too big')elif guess < x:print('too small')else:print('you got it!')''''''步骤二for i in range(100):got = True/Falseif got:print('good game')breakif i >= 6:print('game over')print('the dice num was: ', dice)break'''dice = random.randint(1, 100)#有6次机会,如果6次之内或者6次以上,则游戏结束。for i in range(100):guess = int(input('please guess a number: '))got = guessTheDice(guess, dice)if got:print('good game')breakif i >= 6:print('game over')print('the dice num was: ', dice)breakpassdef guessTheDice(guess, x):got = Falseif guess > x:print('too big')got = Falseelif guess < x:print('too small')got = Falseelse:print('you got it!')got = Truereturn got
分支语句
输入
输出
八大行星 -> 程序控制
'''写一个程序,利用循环语句,由近及远,输出太阳系中八大行星的名称。'''# for N in '水金地火木土天海':# print(N)# print()'''写一个程序,利用循环控制语句,由近及远,1)输出太阳系中,除地球之外的行星名称。2)输出地球之前的行星名称。3)输出地球之后的行星名称。'''''' 3)for N in '水金地火木土天海':if N == '水':continueelif N == '金':continueelif N == '地':continueelse:print(N)print()for N in '水金地火木土天海':if N == '水' or N == '金' or N == '地':continueprint(N)print()for N in '水金地火木土天海':if N in '水金地':continueprint(N)print()planets = '水金地火木土天海'for i in range(len(planets)):if i < 3:continueprint(planets[i])print()'''''' 2)for N in '水金地火木土天海':if N == '地':continueprint(N)print()'''''' 1)for N in '水金地火木土天海':if N == '地':breakprint(N)print()'''

数码管 -> 函数

二十四节气 -> 入门检验


