diff options
author | Hui Lan <lanhui@zjnu.edu.cn> | 2019-07-26 21:23:49 +0800 |
---|---|---|
committer | Hui Lan <lanhui@zjnu.edu.cn> | 2019-07-26 21:23:49 +0800 |
commit | 2631ebb607824b4c74ec236ef688c8124a6a1a99 (patch) | |
tree | eff70fca72a9633a0e0b172a495c841f285b06e2 | |
parent | 8a52d6b349c8a676649c447bcfb587f0f5b8b786 (diff) |
LectureNotesOnPython.rst: 添加了很长的一节 把现实的问题转化为计算机可以处理的问题
-rw-r--r-- | LectureNotesOnPython.rst | 338 |
1 files changed, 335 insertions, 3 deletions
diff --git a/LectureNotesOnPython.rst b/LectureNotesOnPython.rst index 9e89d23..628138a 100644 --- a/LectureNotesOnPython.rst +++ b/LectureNotesOnPython.rst @@ -81,7 +81,330 @@ Bit, byte, KB, MB, GB, TB换算。 习语言、易语言等目前非主流语言。 -最简单的类定义: + +把现实的问题转化为计算机可以处理的问题 +----------------------------------------------------- + +编程就是将 **现实中的问题** 转化成 **计算机可以理解的问题** 的过程。 + +为什么需要程序呢? 因为运算快, 处理数据快, 且没有情绪。 + + +如果我问你, 下面的文字中有几个apple? 你一定可以很快的告诉我。 + +| Apple Orange Apple + + +那么, 下面的文字中有几个Apple呢? 没有几分钟数不出来吧? 而且容易数错。 这样的问题交给计算机回答再适合不过了。 + + +| ORANGE Banana APPLE Banana BANANA Apple BANANA Apple BANANA Apple +| APPLE Apple ORANGE Apple ORANGE Orange ORANGE Orange ORANGE Banana +| APPLE Banana BANANA Banana ORANGE Orange BANANA Apple APPLE Banana +| BANANA Banana APPLE Banana ORANGE Orange ORANGE Banana APPLE Orange +| BANANA Orange BANANA Banana APPLE Banana BANANA Orange APPLE Orange +| APPLE Orange BANANA Banana ORANGE Banana ORANGE Banana BANANA Apple +| APPLE Orange ORANGE Orange BANANA Banana BANANA Apple ORANGE Orange +| ORANGE Banana APPLE Orange BANANA Orange APPLE Banana APPLE Banana +| ORANGE Banana ORANGE Banana ORANGE Banana BANANA Apple BANANA Banana +| ORANGE Apple APPLE Apple APPLE Orange APPLE Apple APPLE Apple BANANA +| Banana BANANA Banana APPLE Banana BANANA Banana APPLE Orange ORANGE +| Banana APPLE Orange BANANA Orange APPLE Orange BANANA Banana ORANGE +| Banana BANANA Apple ORANGE Banana ORANGE Apple ORANGE Banana APPLE +| Apple APPLE Orange ORANGE Orange APPLE Apple APPLE Orange BANANA +| Banana ORANGE Apple ORANGE Orange ORANGE Banana ORANGE Apple APPLE +| Apple ORANGE Banana BANANA Banana APPLE Apple APPLE Banana APPLE Apple +| APPLE Banana APPLE Orange BANANA Orange BANANA Apple BANANA Apple +| APPLE Banana ORANGE Apple APPLE Apple BANANA Banana ORANGE Apple +| ORANGE Apple ORANGE Banana APPLE Orange BANANA Apple ORANGE Orange +| APPLE Apple ORANGE Orange BANANA Banana BANANA Orange BANANA Banana +| APPLE Apple ORANGE Orange APPLE Banana ORANGE Banana BANANA Orange +| BANANA Banana BANANA Apple BANANA Banana APPLE Orange BANANA Orange +| ORANGE Apple APPLE Banana APPLE Banana ORANGE Orange APPLE Apple APPLE +| Orange APPLE Orange ORANGE Orange BANANA Orange BANANA Banana BANANA +| Orange ORANGE Banana BANANA Apple ORANGE Orange BANANA Orange APPLE +| Apple BANANA Banana BANANA Banana APPLE Apple APPLE Orange BANANA +| Apple BANANA Orange BANANA Apple BANANA Apple ORANGE Banana ORANGE +| Orange BANANA Banana APPLE Orange BANANA Banana ORANGE Apple ORANGE +| Apple BANANA Banana APPLE Apple APPLE Banana ORANGE Banana APPLE +| Banana APPLE Banana APPLE Apple BANANA Apple ORANGE Banana APPLE Apple +| BANANA Orange ORANGE Banana ORANGE Apple APPLE Banana APPLE Apple +| APPLE Banana APPLE Orange ORANGE Orange ORANGE Banana ORANGE Orange +| APPLE Orange APPLE Banana ORANGE Apple APPLE Apple ORANGE Apple ORANGE +| Apple ORANGE Apple APPLE Banana APPLE Apple BANANA Orange BANANA Apple +| BANANA Apple BANANA Orange APPLE Banana ORANGE Apple APPLE Apple APPLE +| Apple APPLE Apple BANANA Orange ORANGE Orange ORANGE Banana APPLE +| Apple BANANA Apple ORANGE Apple BANANA Banana APPLE Orange BANANA +| Banana APPLE Orange ORANGE Apple BANANA Orange ORANGE Apple APPLE +| Banana APPLE Banana BANANA Banana ORANGE Apple APPLE Orange BANANA +| Orange APPLE Banana ORANGE Banana APPLE Banana BANANA Banana APPLE +| Orange APPLE Apple APPLE Banana ORANGE Orange APPLE Orange ORANGE +| Banana BANANA Orange ORANGE Banana ORANGE Banana BANANA Orange BANANA +| Orange ORANGE Banana BANANA Banana APPLE Orange APPLE Orange APPLE +| Orange APPLE Orange ORANGE Apple BANANA Orange BANANA Banana BANANA +| Orange BANANA Banana ORANGE Banana BANANA Apple APPLE Orange BANANA +| Banana ORANGE Banana BANANA Orange APPLE Orange BANANA Apple APPLE +| Banana ORANGE Orange ORANGE Apple APPLE Orange APPLE Apple ORANGE +| Apple APPLE Banana APPLE Banana APPLE Banana ORANGE Banana ORANGE +| Apple BANANA Apple BANANA Banana ORANGE Orange ORANGE Apple APPLE +| Banana BANANA Banana BANANA Orange ORANGE Apple APPLE Apple APPLE +| Apple BANANA Orange ORANGE Banana ORANGE Apple ORANGE Banana APPLE +| Banana APPLE Apple APPLE Orange ORANGE Apple APPLE Apple APPLE Orange +| ORANGE Orange APPLE Banana BANANA Apple ORANGE Orange BANANA Banana +| ORANGE Apple APPLE Orange APPLE Banana APPLE Apple APPLE Banana BANANA +| Banana APPLE Orange APPLE Banana ORANGE Orange ORANGE Banana ORANGE +| Apple ORANGE Orange ORANGE Orange ORANGE Banana APPLE Banana BANANA +| Banana APPLE Banana APPLE Banana BANANA Banana ORANGE Orange BANANA +| Banana ORANGE Orange ORANGE Orange APPLE Apple ORANGE Apple APPLE +| Orange BANANA Orange BANANA Apple ORANGE Banana BANANA Orange ORANGE +| Banana BANANA Apple APPLE Apple BANANA Banana BANANA Orange APPLE +| Apple ORANGE Banana BANANA Orange BANANA Apple BANANA Apple APPLE +| Banana ORANGE Banana APPLE Orange APPLE Orange APPLE Orange BANANA +| Orange BANANA Orange APPLE Orange APPLE Orange APPLE Banana BANANA +| Banana APPLE Orange ORANGE Banana APPLE Banana ORANGE Orange APPLE +| Apple BANANA Orange APPLE Orange APPLE Orange ORANGE Banana BANANA +| Orange BANANA Apple APPLE Banana BANANA Banana BANANA + + +程序员是这个转化者。 转化是艰辛的工作。 但是由于一旦程序写好, 就可以重复利用, 所以这种辛苦是值得的。 所以, 重复性的劳动就交由计算机去做吧。 而程序员要做的是读懂问题, 分析好问题, 写好指令, 把指令存在程序中, 然后让计算机执行程序。 + +清晰的代码很重要, 如果代码不清晰, 维护代码将是一场噩梦, 很多时候代码索性就无法维护。 在整个程序的生命周期中, 维护的花销最大 (举冰山的例子)。 程序也有生命, 如果程序停止维护, 它的生命基本上就结束了。 没有人会对不再被维护的程序很感兴趣。 因为不再维护了, 就意味的失去了改善的可能性。 + +编程的要件是 **数据** ,以及 **对数据的操作** 。 不管是什么程序, 一般来说会有一个输入, 一个输出, 输入与输出之间就是一系列的运算。 我们要确保输入是正确有效的, 输出是我们期望的结果, 运算是有效率的。 + +例子1 + +.. code:: python + + a = 10 # 输入1 + b = 2 # 输入2 + print(a**b) # a的b次方是输出 100 + + + +例子2 + +.. code:: python + + a = 'hello' # 输入1 + b = ' word' # 输入2 + print(a + b) # a + b表示将两个字符串合并在一起 + + +以上的输入是我们写进程序中的,其实我们还可以在命令行中输入, 利用 input 函数。 实际编程中, 手动从命令行输入数值的情况比较少。 熟练的程序员比较常用的是利用命令行参数来输入数据。 + +.. code:: python + + a = int(input('Enter a: ')) + b = int(input('Enter b: ')) + print(a**b) + + +字符串用来存储信息。 是个最基本的数据类型。 日常生活中, 你发的短信就是一个字符串。 一篇文章, 不论多少字,说到底,也是一个字符串。 + +我们可以对字符串进行多种多样的操作,以达到我们的具体目的。 + +关于字符串的一系列问题。 + +问题: 如何存储一个字母 a? + +.. code:: python + + a = 'a' + + +问题: a 与 'a'有什么区别? + +a是变量名。 'a'是值。 a = 'a' 这个语句要从右边向左边读, 即把'a'这个值赋给变量a。 我们可以用其他任何有效的变量名, 比如c就很好。 单引号很重要, 如何没有单引号, a就是变量。 在使用变量前要先对它赋值。 赋值后内存中就会存有这个变量。 + + +.. code:: python + + a = 'a' # 把字符’a‘赋值给变量a, 此时内存中有变量a, 我们可以在下面的语句中使用它 + c = a # 把变量a中的值赋给变量c, 这时c的值与a的值是一样的,都是'a' + print(a == c) # 为什么这里有两个等于号呢? + + +问题: 变量名只能由一个字母组成吗? 起一个有效的变量名。 + + | i + | j + | k + | v + | name + | amount + | price + | number + + +变量可以起到帮助别人理解程序的作用, 所以变量的名字要起得尽量有意义。 要么简洁, 要么有意义。 + + +问题: 如何存储一个单词 apple? + +.. code:: python + + fruit = 'apple' + + +问题: 将apple全部转大写。 + +.. code:: python + + fruit = 'apple' + print(fruit.upper()) + + + + +问题: 如何知道fruit对应的值的长度? + +.. code:: python + + l = len(fruit) # fruit对应的值有几个字符 + print(l) + +以上l是个变量, len是函数名, 功能是数出fruit变量对应的值有几个字符。 + +问题: 如何存储两个单词 apple banana? + +.. code:: python + + fruit = 'apple banana' + +问题: 这时候fruit的长度是多少? 请你数一数。 + +问题: apple 中有字母b吗? + +简单的 + +.. code:: python + + 'b' in 'apple' + +复杂的 + +.. code:: python + + fruit = 'apple' + + result = False + for c in fruit: + if c == 'b': + result = True + + print(result) + +问题: apple 中有字符串app吗? + +.. code:: python + + 'app' in 'apple' + + +问题: 水果字符串中有橘子orange吗? + +.. code:: python + + fruit = 'apple banana apple' + print('orange' in fruit) + + + + +问题: 如何数 apple 中有几个 p? + +简单的 + +.. code:: python + + fruit.count('p') + + +复杂的 + +.. code:: python + + fruit = 'apple' + count = 0 + for c in fruit: + if c == 'p': + count += 1 + print(count) + + +问题: 数出字符串'apple banana apple'中, apple出现的次数? + +.. code:: python + + fruit = 'apple banana apple' + print(fruit.count('apple')) + + + +问题: 如何获得第一个p出现的位置? + + +.. code:: python + + fruit = 'apple' + position = fruit.find('p') + print(position) + + +问题: 我现在一头雾水, 这正常吗? 总是出错, 这正常吗? + +这很正常。 编程要达到一定的代码量, 才能渐渐感觉清晰。 你的第一个目标是100行代码, 实现这个目标后下一个目标是500行代码, 当你的代码量超过1000行时, 很多问题会渐渐清晰。 出错也很正常, 认识到错误的原因, 把错误改正了, 就等于进步了。 + +**练习** 以脚本模式运行下面的程序, 查看输出结果。 脚本模式即把下面的代码存在文件fruit.py中, 然后在命令行运行python fruit.py。 + + +.. code:: python + + + lst = [ 'apple', 'orange', 'banana' ] + + num = 3 # 多少个水果 + + import random + s = '' + for i in range(num): + w = random.choice(lst) # 随机在lst中选一个元素 + if i % 3 == 0: # 百分号%代表模 + s += ' ' + w.upper() + if i % 3 == 1: + s += ' ' + w.title() + if i % 3 == 2: + s += ' ' + w + fruit = s.strip() + print(fruit) + + +fruit中有多少apple? 有多少banana? 有多少orange? 数的时候你需要区分大小写吗? + +(难度加大) 找出控制水果数的变量, 改变其值, 产生100个水果。 + +(难度再加大) 今后,我们将统计每个水果出现的次数。 你不会编程, 但是你可以用文字的方式写下解决这个问题的思路。 + +(难度再加大) 今后,我们也会将结果排序, 比如按照水果出现的次数从高到低来排序, 或者按照水果的名字来排序(按照字典序)。 + +(代码重用) 这样的程序是不是也可以用来统计一篇文章中所有单词的词频? 进而帮助我们学习英文? + + + + + + +**练习** 把下面这段文字转成字符串并存在变量boris中。 + +Boris Johnson, Prime Minister of the United Kingdom. Alexander Boris de Pfeffel Johnson is a British politician serving as Prime Minister of the United Kingdom and Leader of the Conservative Party since July 2019. He has been the Member of Parliament for Uxbridge and South Ruislip since 2015 and was the MP for Henley from 2001 to 2008. He also served as Mayor of London from 2008 to 2016 and Foreign Secretary from 2016 to 2018. Johnson identifies as a one-nation conservative and has been associated with both economically and socially liberal policies. + +将本段文本中所有字符转成大写字母。 JOHNSON共出现了几次? 这段文本中共有多少字符? 其中标点符号占了几个字符? 空格占了几个字符? + + + +最简单的类定义 +------------------------------------ class A: @@ -90,9 +413,18 @@ Bit, byte, KB, MB, GB, TB换算。 以上面的类为蓝本,创建一个实例:a = A()。 虽然这个a什么也做不了。 -Python文件命令行执行。 python a.py。 +Python脚本文件命令行执行 +-------------------------------------- + +python a.py。 + + + + +函数头的三要素 +--------------------------------------- -函数头的三要素:def,函数名,参数列表: +def,函数名,参数列表: | def add_number(a, b): |