分类目录归档:Python

第 4 课 计算的本质

第 4 课 计算的本质

上次的课后作业

:如果你不理解视频里的内容,不要反复观看试图理解,不懂的先去群里问,或者去看答案,重要的是去练习,我们不能从概念到概念,而是应该从实践(解决问题),然后再结合理论知识。

只有实践的经验才会转换为你的编程能力。

  1. 程序要满足:输入分数 x (0 < x < 100),程序输出分数对应的等级:x < 60 不及格,60 < x < 80 及格,80 < x < 90 良好,90 < x < 100 优秀。

    scope = float(input("the scope euquals to "))
    if scope < 60:
       print("不及格")
    elif 60 <= scope < 80:
       print("及格")
    elif 80 <= scope < 90:
       print("良好")
    elif 90 <= scope <= 100:
       print("优秀")
  2. 程序要满足:首先输入一个整数 n ,然后程序连续接受输入 n 个数字,最终程序输出 n 个数字的平均值。

    n = int(input("n = "))
    total = 0.0
    for i in range(n):
       total += float(input())
    print("the average value is {0}".format(total / n))
  3. 左旋转字符串

    class Solution(object):
       def reverseLeftWords(self, s, n):
           """
           :type s: str
           :type n: int
           :rtype: str
           """
           # s n
           return s[n:] + s[0:n]
  4. 一维数组的动态和

    class Solution:
       def runningSum(self, nums):
           """
           :type nums: List[int]
           :rtype: List[int]
           """
           if nums is None:
               return []
           for i in range(1, len(nums)):
               nums[i] = nums[i] + nums[i-1]
           return nums

课程纲要

计算的本质:符号、模型、数黄瓜的故事。

  • 现实:左边4根黄瓜,右边2根黄瓜

  • 符号:

    • 4 + 2
    • 四 加 二
    • 肆 加 贰
    • 叽里 哼哈 呱啦
  • 模型:10 根手指、画“正”字、算盘…… (可操作模型)

  • 计算图模型:更加本质的模型。加法器:具体怎么计算我们并不关心。函数1

  • 表达式:(2 + 4) * 3 函数2

    • 数字是表达式;递归

    • 表达式 + 表达式。两个表达式相加是表达式;

    • 表达式 - 表达式。两个表达式相减是表达式;

    • 表达式 * 表达式。两个表达式相乘是表达式;

    • 表达式 / 表达式。两个表达式相除是表达式;

    (即构成表达式 运算符 表达式 的顺序的式子是表达式)

    • 图示 表达式

    • 验证 (2 + 4) * 3 是表达式

    • 变量与赋值

    • 表达式 (2 + 4) * 7 + ((12 - 3) * 6) / 2 过于复杂;

    • 用名字代表中间的过程,例如:爸爸的妹妹的老公,叫做「姑丈」;

    • a = (2 + 4) 原式 = a * 3

  • 函数:t -> 2*t

    function1

    function2 (1)

  • 参数和变量

    变量

  • 函数:有名字的运算过程

    a = 2 + 4

    f = t -> t * 2

    f(t) = t * 2

  • 函数调用 f(2)

  • 分支

    branch

    t -> if (t < 22) 
       {
         "hotpot"
       }
       else 
       {
         "ice cream"
       }
  • 变量的类型,不同的符号有不同的用途

    • 4 + 2 ( 数字 )
    • 四 加 二 、肆 加 贰 、兔子、鸡、abc、21411 (字符串)
    • 是,否 (布尔型)
  • 抽象:屏蔽具体的细节和步骤,只考虑输入和输出。例如:出租车司机的案例、圆的面积公式 pi*r^2

  • 注:本篇文章的内容大部分来源于 https://www.yinwang.org/blog-cn/2018/04/13/computer-science

硬币计划

Coin-Project 硬币计划

起因是不想花太多时间去催作业了,导致我没空去做其他的,还有备课,还有就是提高大家的自觉性。我决定对改作业催作业收费,需要这两项服务的人自愿付费,不限制金额

当然我目的不是卸磨杀驴,课程结束后,我会把所有付款人和款项公示,并以集体的名义,将所有费用,捐赠给支付宝公益平台的免费午餐计划,同时你也可以自行进行捐款。

收费有很多好处:

  1. 避免有些同学自律性不足,中途退出或者不交作业。
  2. 不论是我还是大家,学习 Python 会更加有使命感。
  3. 贫困的孩子们可以多吃饱饭。

参加硬币计划的同学:不限制金额,请自己捐款,然后把截图给我,要带明确的个人标识嗷。复制下列口令到支付宝,即可参与捐款:

15我支持【免费午餐】爱心捐赠,一起来吧! http:/bU4S46I45X0长按苻制,去👉zhi[爱心]亻寸[爱心]宝👈首页进行搜索,参与爱心捐赠

捐款之后,请填写【腾讯文档】,确定你公示的名字。参与的同学以后作业请发送到 python[\at]benearyou.com (请把 [\at] 改成 @ ,才是真实邮箱,目的是防止垃圾邮件骚扰)

如果不参与:不影响正常上课,有问题仍然可以在群里答疑。只是不单独催作业改作业了,但你仍然可以看直播和其他人的作业对答案。

公示名单

捐赠人 金额(元)
Yulia Юлия 50
xpzoumeng 50
三十 66
喵不乖 66
乐子 20
Aimee 50
Robb 10
JonDoe297 50
总额 422

感谢你们的学习,让这个世界变得更好!

免费午餐计划简要介绍

捐款项目的地址:支付宝公益平台-以公益的方式,为世界带来更多平等的机会

免费午餐坚持“师生同食、就地取材、透明公开、村校联合”学校执行的四项基本原则,保障为孩子们提供安全、营养的免费午餐。

1、服务时间:长期

2、帮扶地区:全国

3、受助对象:我们开通了多渠道面向社会公众筹集善款,以一人一餐4元的标准为乡村学校孩子们提供免费午餐。若学校存在因学生贫困吃不上午饭、离家远无法回家吃饭、学校没有能力提供午餐等情况,可向免费午餐基金上交开餐申请。

第 3 课 控制流

第 3 课 控制流

不会的东西可以在群里提问、或搜索查看标准库文档入门教程

课程纲要

  1. 逻辑运算:三种逻辑运算是什么?

  2. 控制流的元素

    • 条件 True or False
      • 得出 bool 型的运算符。例如:== in 以及 bool 型的 and not or
      • 能转换为 bool 型的类型。例如: float 型的 0.0, int 型的 0, str 型的 ""(空字符串)都为 False
    • 代码块和缩进(使用四个空格)
      1. 缩进增加时,代码块开始。
      2. 代码块可以包含其他代码块。
      3. 缩进减少为零,或减少为外面包围代码块的缩进,代码块就结束了。
    • 程序顺序执行
  3. 控制流语句

    • 条件判断

      • if 语句

      • 格式:if condition :

      • 例子:如果明天不下雨,我就去外婆家。(用 print 模拟)

      • else 语句

      • 格式:else :

      • elif 格式: elif condition :

      • 例子:

        • 如果老师说交作业,小明就说放在家里了,否则他就写作业。(用 print 模拟)
        • 小明去买一个西瓜,如果看见西红柿,就买两个。(用 print 模拟)
      • goto 是什么?goto | 科普:程序跳转,顺序运行

    • 循环
      • while 循环
      • 格式:while condition :
      • 例子:男女朋友闹矛盾,女生要等他道歉敲门99下才开门。(用 print 模拟)
      • for 循环
      • for item in items :
      • range() ,len()方法
      • 例子:如何将一个字符串输出,使得每行按顺序打印该字符串中的字符。
      • 循环和条件的组合 break continue

课后作业

编程:

  1. 程序要满足:输入分数 x (0 < x < 100),程序输出分数对应的等级:x < 60 不及格,60 < x < 80 及格,80 < x < 90 良好,90 < x < 100 优秀。
  2. 程序要满足:首先输入一个整数 n ,然后程序连续接受输入 n 个数字,最终程序输出 n 个数字的平均值。

附录 程序流程图

if 语句

image-20201231155300630

elif 语句

image-20201231155543295

while 语句

image-20201231162057447

第 2 课 字符串和数据结构

第 2 课 字符串和数据结构

不会的东西可以在群里提问、或搜索查看标准库文档入门教程。( Ctrl + F )

课程纲要和笔记

  1. 数据结构
    • 复习变量
      • 变量是内存的名字,赋值过程就是名字的重新绑定。例子:a = 1 a = a + 1
    • 复习数据类型
      • int, float: + - * \ \\ %
      • str: + == replace() split() format() strip() notice:*
      • bool: or and not
      • str(), float(), int():特定的类型有特定的运算,所以需要进行类型转换。
  • 数据结构是什么以及意义是?
    • 上述数据类型是最基本的、不可分割的数据结构。例子:学生信息表:学号、身份证、姓名。
    • 由于内存的性质,我们需要把现实世界的数据用线性的结构表示。数据结构,要考虑其结构操作
  • list 列表
    • 数据:本质上是表格,线性排列,可以是任何类型,
    • 操作:
    • append() [] * n +
    • pop() pop(i)
    • array[i] = n
    • fruits.index(x)
    • 更多特性
  • tuple 不可变列表
  1. 字符串和文件读写
  • f = open(file_name, 'w', encoding="utf-8") f.close()
    • 如何存储文件?文件读写
    • 需要 close 因为操作系统的规定。
    • f.read() , f.readline()
    • f.write()
  1. 简要复习上一课的内容,解答作业
    1. 编写一个程序:能顺序地输入两个数,回车后,程序将在在屏幕上打印两个数分别加减乘除的结果,程序代码应该包括你的注释
    2. 编写一个程序:能先输入字符串 s,然后输入一个整数 n,程序将把 n 个字符串拼接打印出来。

课后作业

  1. 编程作业,程序满足:自定义一个list里面包含一些整数,自行对其进行增删改查操作,转换成str类型,按照utf-8编码输出为txt文件。

  2. 复制下列代码,并利用它在屏幕上打印出Google likes Python

L = [
    ['Apple', 'Google', 'Microsoft'],
    ['Java', 'Python', 'Ruby', 'PHP'],
    ['likes', 'dislikes', 'own']
]

附录

  • 注意:上课的时候突然卡壳了!readline() 在遇到行尾的时候返回空白字符串,转成bool型是False,正确的按行读取并且加载到数组中应该是这样:

    array = []
    with open("test.txt", "r", encoding="utf-8") as f:
      text = f.readline()
      array.append(text)
      while text:
          text = f.readline()
          array.append(text)
    print(array)
  • 上课代码

    if __name__ == '__main__':
      print("hello")
      a = 1
      a = a + 1
      a = "test"
    
      print(a.capitalize())
      print(a == b)
      user = input()
      age = input()
      welcome = "hello, {0}, {1}".format(user, age)
      print(welcome)
      b = "hello"
      n = int(input())
      #   integer
      #   int(n) * str(b)   --> str
      print(n * b)
      flag = True
      # not
      # not True = False
      # or
      # (bool) and (bool)
      print(flag and False)
    
      #   原子
      #   学生表 :学号(str or int)、身份证(str)、姓名(str)。
      #   学生表 : x1 学号身份证姓名
      #   学生表 : x2 学号身份证姓名
      #   图 1-256
      array = [2, "s", 1.16 ]
      a = [1, 9, 3]
      b = [2, 2,2]
      matrix = [
          a ,
          b ,
          [  2,3,5  ]
      ]
    
      array.append("hello")
      array = ["s"] * 9
    
      new_list = array + matrix
      print(new_list)
      new_list.pop(3)
    
      new_list[0] = "T"
    
      new_list.clear()
      print(new_list)
    
      print(new_list.index("s"))
      # (list) .index( )
    
      t1 = tuple([1, 2, 4, 5, 8])
    
      table = tuple(["monday", "tuesday"])
      print(table[0])
    
      string = "s12255122sw"
      #   []
      print(string[1:-2])
      print(string[-2:])
      #   gbk
      #   utf-8
      #   01010 -->  a
      #   01010 -->  b
      #
      f = open("test.txt", "w", encoding="utf-8")
      # r: read w:write
      f.write(string * 10)
      f.close()
    
      # array = []
      #
      with open("test.txt", "r", encoding="utf-8") as f:
          text = "2"
          while text:
              text = f.readline()
              array.append(text)
    
      print(array)
    
      a = float(input())
      b = float(input())
      print(a * b, a + b , a / b)
    
      s = input()
      n = int(input())
      print(n * s)

第 1 课 变量和类型,用内存的视角看数据

第 1 课 变量和类型,用内存的视角看数据

注意,任何情况下,新手应该从官方的教程和API教程开始:Python 文档,而不是网上良莠不齐的资料。同时,不要成为语言律师 ( language lawyer )。

  • 运行 Python 脚本的两种运行方法是什么?
  • 什么是内存?
  • 什么是变量?
  • 什么是类型?
  • 变量和字面量有什么关系?
  • 当我们 print 的时候,计算机发生了什么?

课程纲要

  • 程序如何运行(了解)
    • 抽象
    • 内存
    • 运行 Python 脚本发生了什么(用命令行、用IDE)
  • 变量与类型(掌握,请在课后阅读官方教程加深理解)
    • 变量的意义及其命名
    • 变量内存中的表现(以后再深入,先大致了解)
    • 布尔类型及逻辑运算
    • 数字及算术运算
    • 整数
    • 字符串及其操作
    • 拼接、*、strip()、split() 等操作
    • 转义符号
    • 字符串编码
    • 「烫烫烫烫」是什么(utf-8, gbk 等编码问题,深入可以了解 字符编码笔记:ASCII,Unicode 和 UTF-8
    • str(), float(), int()
    • input(), print(), len()
  • 加餐(学有余力的同学可看)
    • 数字编码
    • 整数:补码和原码
    • 小数:浮点数
    • 计算机体系结构
    • 冯诺依曼结构
    • 当我们 print 的时候,计算机发生了什么?
    • 真正的互联网,已经死了

课后作业

  1. 编写一个程序:能顺序地输入两个数,回车后,程序将在在屏幕上打印两个数分别加减乘除的结果,程序代码应该包括你的注释
  2. 编写一个程序:能先输入字符串 s,然后输入一个整数 n,程序将把 n 个字符串拼接打印出来。

授课笔记

  • 程序如何运行(了解)
    • 计算机最重要的概念——抽象是什么?出租车的例子
    • 内存
    • CPU就像我们的大脑,内存就像我们的草稿本
    • 是一组线性的空间
    • 运行 Python 脚本发生了什么?
    • IDE: pycharm, idle 命令行调用:cmd, bash, ssh
    • 学有余力的同学可以学后面的计算机体系结构
  • 变量与类型(掌握,请在课后阅读官方教程加深理解)
    • 变量的意义及其命名
    • 为啥需要变量?因为这是一个变动的世界
    • 如何命名?用英文单词,函数和变量 = 小写 + 下划线, 类名使用驼峰命名法(PyCharm 会提示你)
    • 类型是什么?
    • 变量内存中的表现(以后再深入,先大致了解)
    • 变量和字面量有什么关系?
    • 布尔类型及逻辑运算
    • why: 因为我们需要根据不同情况去运行不同的解决方法,比如登录账号的时候。
    • and, or, not
    • 数字及算术运算
    • why: int 和 float 处理生活的数据
    • 加减乘除,求幂,取模,// 向下取整
    • 字符串及其操作
    • 跨行输入、拼接、*、strip()、split() 等操作
    • 转义符号
    • 字符串编码
    • 「烫烫烫烫」是什么(utf-8, gbk 等编码问题,深入可以了解 字符编码笔记:ASCII,Unicode 和 UTF-8
    • str(), float(), int()
    • input(), print(), len()
  • 加餐(学有余力的同学可看)

    • 数字编码

    • 整数:补码和原码

    • 小数:浮点数

    • 计算机体系结构

    • 冯诺依曼结构:我们需要先大致了解计算机的体系结构:

    • gda
    • 1182611-20190530163801121-1848365582
    • 当我们 print 的时候,计算机发生了什么?

    • 真正的互联网,已经死了

第 0 课 Hello, world!

第 0 课 Hello, world!

1.前言

“软件定义世界”,不仅因为「移动支付让超市不再找零,使口香糖销量大减」这样的小事,还说明未来程序将不可避免地深入人们的生活,而且会重构现实世界。

以前的生活需要一个门卫守停车场,而现在可以做到只需要监视器和二维码,意味着什么?

  1. 停车场不再可能发生门卫让自己的熟人进来,或中饱私囊的事情。程序把流程写死,可以定义社会规则。
  2. 停车场不再需要一个人守在门口,只需电力和少数维护成本。程序将替换机械的工作,节省人力成本,提高生产力。
  3. 用算法对调度各区域的停车场车位,人们将不会浪费时间在找停车场上。程序可以对资源进行抽象,用数学让效率最大化

用最短路算法实现地图导航、用协同过滤推荐调节商品供需关系…… 从这点来看,只要人们还需要提高生产力,软件就会持续地改变世界。

编程对不是计算机的专业有什么用?

8岁时李笑来向他妈妈要了10元钱,去少年宫学习计算机编程。后来在新东方当老师,编写《TOEFL核心词汇21天突破》一书时,他用自己编写的批处理程序,短时间内完成了海量词汇处理工作。在现在看来,写这样一本按词频收集单词的书,对一个过了四级的学过编程的人其实毫无难处,难的是在一个「少年宫」还流行的年代,还学到了编程,并且在自己的领域内发现了计算机的能力。

计算机是人大脑的延伸,学编程是学会用计算机的视角看世界。更重要的信息的搜集能力,和快速学习的能力,前者是靠的是领域经验,后者更多的是靠天赋和后天的积累。所以本节课重点不教编程,只教搜集。

2. 方法

接下来你需要学习如何使用搜索引擎,不要怀疑,大多数人并不懂搜索。网上已经有很多资料了:

上面的技巧,不需要全部都会,知道一点点就可以了,大多数搜索引擎都可以使用。

推荐两个搜索引擎:
http://bing.com/
https://duckduckgo.com/

下面是锻炼你搜索能力的题目,安装两个软件,在上面写出代码,并且正确运行。

网上其实有无数的教程和博客去说这两件事情,那么问题其实是,如何快速找到并了解一个新事物、一个未知的逻辑?

请完成下一节的练习

3. 安装编程环境

根据自己的操作系统,安装下面两个软件。目前不需要知道下面两个软件是什么,先安装好再说。

3. Hello, world! 开始你的第一个程序

配置好解释器,下载安装好后在 pycharm 新建一个项目,新建一个 py 文件,内容是:

print("Hello, world!")

复制、粘贴、运行就可以了。

日程

虽然简单,做完后,请把运行成功的全屏截图,发到我的邮箱kevtyle@hotmail.com,过期算一次不交作业哦。

做完后,请把运行成功的全屏截图,发到下列邮箱:

python[\at]benearyou.com (为防止垃圾邮件骚扰,把 [\at] 改成 @ 为真实邮箱)

这次作业改为课后作业,课程简介更新了,请仔细查看。

直播 12月27日 20:00(暂定),直播当天发布下一次课的内容。

课后作业 12月30日 23:59

作业 12月28日 23:59 截止。

隔一天一次直播,即下一次课为12月29日 20:00