编程网课.jpg

前言 -> 计算思维

四要素

  • 分解:把数据、过程或问题分解成更小的、易于管理或解决的部分
  • 模式识别:观察数据的模式、趋势和规律
  • 抽象:识别模式形成背后的一般原理
  • 算法开发:为解决某一类问题撰写一系列详细的指令

什么是编程

很简单,编程(programming)就是告诉计算机要做什么。计算机只是一些没有生命的机器,它们自己可不知道该做什么,一切都得你来告诉它,而且你还必须把细节都说清楚。不过不要忘了,一定要自己动手试一试,如果只是纸上谈兵,只看不做,你就无法感受到程序成功运行那一刻的快乐和成就感。

image.png

image.png

什么是算法

算法就是计算或者解决问题的步骤。我们可以把它想象成食谱。要想做出特定的料理,就要遵循食谱上的步骤;同理,要想用计算机解决特定的问题,就要遵循算法。这里所说的特定问题多种多样,比如“将随意排列的数字按从小到大的顺序重新排列”,“寻找出发点到目的地的最短路径”,等等。

课程导学

面向编程零基础的Python语言入门课程,以引导学员自主思考为核心思想,不“念使用说明书”式的灌输型教学。鼓励学员勤动手,尝试多种可能性,进而推导出一般性规律,总结经验,掌握创造‘轮子’的能力。

本课程不教什么

由于 Python 语言的语法,非常接近自然语言的语法,所以市面上充斥着大量的《Python:从入门到精通》、《2小时学会Python》等等。此类课程更像是一场电影,听的时候什么能都听懂,内容非常精彩,但过后什么不记得。准确的说本质上什么都没有学会,仅仅是了解了世界上有一种开发语言,语法易懂,上手容易。

Python的语法简单易学,2小时从入门到“精通”后,大部分网络课程,就开始百科全书式的罗列常用模块,以及常用类中提供的各种“魔法”方法。在我们看来,这样跟通读Python官方文档,没有任何本质上的区别。

  1. >>> la = [1, 2, 3, 4, 5, 6]
  2. >>> lb = la[::-1]
  3. >>> lb
  4. [6, 5, 4, 3, 2, 1]

简单的一个操作 la[::-1],得到倒序排列的数组 [6, 5, 4, 3, 2, 1],厉害吧?不,这仅仅是Python为我们提供了很多便捷的“操作”而已。这个操作很“厉害”,但学员并不一定厉害,真正掌握了背后的处理原理,甚至自己写出一套更加便捷的处理程序,才算是真正的“厉害”。

本课程不教:语法“糖”,不罗列“魔法”方法,不百科全书式的念文档、举例子、展示执行结果。

本课程教什么

会说话吗?会看懂220个基本的 Sight Words 吗?那么你一定能看懂绝大部分 Python 语句,剩下看不懂的怎么办?预测 -> 执行 -> 验证 -> 学习 -> 掌握

预测至上

编程是一门互动性非常强的课程,绝对不是老师在上面讲,学生在下面听就能学好的。

以学员为中心,自己推导出来的结论,印象才更深刻,理解才更透彻。世界上有非常多种编程语言,Python仅仅是几十种主流编程语言中的一种。所以掌握Python的编程语法是远远不够的,更重要的是掌握编程这件事背后的思维方式:计算思维。

Python恰巧是我们学习这种思维方式的一种介质,所以本课程会弱化编程语言的概念,逐步强化计算思维这种新的思维方式,也是本课程设立的初衷。

不“乱”猜答案

根据下面的代码:

  1. >>> print('Hello World')
  2. Hello World
  3. >>>

预测,下面的一段代码,会发生什么?

  1. >>> name = "Pitt"
  2. >>> print('Hello' + name)

稍微变更一下代码,又会发生什么呢?

  1. >>> print('Hello', name)

预测不是“瞎”猜。预测是“合理”推断,合哪个理呢?不管哪个理,有个理就行,有理就不是瞎猜,不管此理正确与否。在初始阶段,合自己的理就行,如果预测对了,会进一步强化自己的理,如果预测错了,学会一步步调整自己的理,直至预测正确。

实际上,机器学习大体上也就是这么个过程,机器学习的优势在大数据,样本多,调整快,但本质上机器并不懂为什么,也就是机器是依靠大力出奇迹。我们的优势在于,能搞明白为什么,进而有目的,有方向的调整,以达到更好的结果。

那么上面的两段代码会有什么样的输出呢,你预测到了吗?

  1. HelloPitt
  2. >>>
  3. Hello Pitt
  4. >>>

再来几个例子:

  1. age = 15
  2. if age >= 18:
  3. print("You're old enough to buy a ticket for this film.")
  4. else:
  5. print(f"You'll be old enough in {18 - age} years")
  1. favorite_foods = ["Sushi", "Apple", "Mango", "Pizza", "Chicken"]
  2. print(favorite_foods[2])
  3. print(favorite_foods[10])

IPO: 输入、处理、输出

image.png

本课程:推理能力,创造轮子(module)的能力。

三个小程序 -> 观察

两种编程方式

  1. 交互式:对每个输入语句即时运行结果,适合语法练习
  2. 文件式:批量执行一组语句并运行结果,编程的主要方式
  1. #CalCircle.py
  2. r = 25
  3. area = 3.1415 * r * r
  4. print(area)
  5. print("{:.2f}".format(area))
  1. import turtle
  2. turtle.pensize(2)
  3. turtle.circle(10)
  4. turtle.circle(40)
  5. turtle.circle(80)
  6. turtle.circle(160)

image.png
image.png

蟒蛇绘制 -> 模仿

image.png

问题分析

算法设计

实例编写

举一反三

绘图体系 -> 模块

image.png

turtle库

画布

画笔

太阳系背景 -> 数据类型

image.png

整数

浮点数

random库

时间弧度转换 -> 语法元素

  1. import math
  2. def tan(a):
  3. assert len(a) == 3, 'invalid params'
  4. h = a[2]
  5. m = a[1]
  6. s = a[0]
  7. #first convert a to hours in decimals
  8. hours = h + m * 1/60 + s * 1/3600
  9. print('the hours: ', hours)
  10. #Then, multiplying by 30, obtain the degree
  11. degree = 30 * hours
  12. print('the degree: ', degree)
  13. #Multiplying the degree by 𝜋/180 gives a in radians
  14. radians = degree * (2*math.pi) / 360
  15. print('the radians:', radians)
  16. tana = math.tan(radians)
  17. print('the tan𝜶: ', tana)
  18. return tana
  19. #ta = tan([9, 15, 55.8])
  20. ta = tan([25, 33, 6])
  21. print(ta)

缩进

变量

注释

猜数字 -> 算法设计

  1. '''
  2. 写一个程序,随机设定一个数字,让用户猜测,并给出猜测结果提示(偏大/偏小/相等)。有6次猜测机会,如果6次之内猜中或者6次以上未猜中,则游戏结束。
  3. '''
  4. import random
  5. '''步骤一
  6. x = random.randint(1, 100)
  7. guess = int(input('please guess a number: '))
  8. if guess > x:
  9. print('too big')
  10. elif guess < x:
  11. print('too small')
  12. else:
  13. print('you got it!')
  14. '''
  15. '''步骤二
  16. for i in range(100):
  17. got = True/False
  18. if got:
  19. print('good game')
  20. break
  21. if i >= 6:
  22. print('game over')
  23. print('the dice num was: ', dice)
  24. break
  25. '''
  26. dice = random.randint(1, 100)
  27. #有6次机会,如果6次之内或者6次以上,则游戏结束。
  28. for i in range(100):
  29. guess = int(input('please guess a number: '))
  30. got = guessTheDice(guess, dice)
  31. if got:
  32. print('good game')
  33. break
  34. if i >= 6:
  35. print('game over')
  36. print('the dice num was: ', dice)
  37. break
  38. pass
  39. def guessTheDice(guess, x):
  40. got = False
  41. if guess > x:
  42. print('too big')
  43. got = False
  44. elif guess < x:
  45. print('too small')
  46. got = False
  47. else:
  48. print('you got it!')
  49. got = True
  50. return got

分支语句

输入

输出

八大行星 -> 程序控制

  1. '''
  2. 写一个程序,利用循环语句,由近及远,输出太阳系中八大行星的名称。
  3. '''
  4. # for N in '水金地火木土天海':
  5. # print(N)
  6. # print()
  7. '''
  8. 写一个程序,利用循环控制语句,由近及远,1)输出太阳系中,除地球之外的行星名称。2)输出地球之前的行星名称。3)输出地球之后的行星名称。
  9. '''
  10. ''' 3)
  11. for N in '水金地火木土天海':
  12. if N == '水':
  13. continue
  14. elif N == '金':
  15. continue
  16. elif N == '地':
  17. continue
  18. else:
  19. print(N)
  20. print()
  21. for N in '水金地火木土天海':
  22. if N == '水' or N == '金' or N == '地':
  23. continue
  24. print(N)
  25. print()
  26. for N in '水金地火木土天海':
  27. if N in '水金地':
  28. continue
  29. print(N)
  30. print()
  31. planets = '水金地火木土天海'
  32. for i in range(len(planets)):
  33. if i < 3:
  34. continue
  35. print(planets[i])
  36. print()
  37. '''
  38. ''' 2)
  39. for N in '水金地火木土天海':
  40. if N == '地':
  41. continue
  42. print(N)
  43. print()
  44. '''
  45. ''' 1)
  46. for N in '水金地火木土天海':
  47. if N == '地':
  48. break
  49. print(N)
  50. print()
  51. '''

image.png

数码管 -> 函数

image.png

二十四节气 -> 入门检验

image.png