Python期末复习知识点总结(4-6章)

(同样是编辑于2020.7

(于2021.11.7补发至个人博客

 

 

                     第四章

1程序的基本结构

       1.1程序流程图  略

       1.2程序的基本结构

              程序由三种基本结构组成:顺序结构、分支结构和循环结构。

2.程序的分支结构

       2.1 单分支语句:

              2.1.1 结构 If  <条件> :

                           <语句块>

                   注:If语句首先评估条件的结果值,如果结果为True,则执行语句块。

              2.1.2  python的关系操作符

                     <小于 <=小于等于 >大于 >=大于等于 ==等于 !=不等于

                     特别注意:python中使用“=”表示赋值语句,使用“==”表示判断等于。

              2.1.3 一点说明:python中字符串的比较的本质上是字符串对应Unicode编码的比较。因此,字符串的比较按照字典顺序进行。Eg. Python<python(大写字母编码小于小写字母编码)

       2.2二分支结构:

              2.2.1 结构:if <条件> :  #有冒号!

                                    <语句块1>

                               else :  #有冒号!

                                    <语句块2>

              2.2.2更简洁的表示方法: <表达式1> if <条件> else <表达式2>

                                   例:print(“空气{}污染!”.format(“存在” if PM>=75 else “没有”))

                                   条件成立执行表达式1.

       2.3多分支结构:

              2.3.1 结构:if <条件1> :  #有冒号!

                                    <语句块1>

                               elif <条件2>:  #有冒号!

                                     <语句块2>

                                     ……

                               else :  #有冒号!

                                    <语句块N>

3.实例5:身体质量指数BMI

       基于分支结构的知识点,代码如下:

  1. #CalBMIv3.py
  2. height, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]: "))
  3. bmi = weight / pow(height, 2)
  4. print("BMI 数值为:{:.2f}".format(bmi))
  5. who, nat = "", ""
  6. if bmi < 18.5:
  7.     who, nat = "偏瘦", "偏瘦"
  8. elif 18.5 <= bmi < 24:
  9.     who, nat = "正常", "正常"

10. elif 24 <= bmi < 25:

  1. 11.     who, nat = "正常", "偏胖"

12. elif 25 <= bmi < 28:

  1. 13.     who, nat = "偏胖", "偏胖"

14. elif 28 <= bmi < 30:

  1. 15.     who, nat = "偏胖", "肥胖"

16. else:

  1. 17.     who, nat = "肥胖", "肥胖"

18. print("BMI 指标为:国际'{0}', 国内'{1}'".format(who, nat))

       注:①所有赋值均用了同步赋值法。此方法第二章出现过。

②who, nat = "", "":给两个值赋值空字符串。

③此代码实现用两种标准衡量体重。具体分割数值见教材105页

④注意一下if控制的范围。

              ⑤当一行语句过长时,可在语句中间添加一个反斜杠\后回车分行书写,

                 添加了反斜杠的两行语句在python眼中是一句。

                 Eg. height, weight = eval(input("请输入身高(米)和体重\

(公斤)[逗号隔开]: "))

4.程序的循环结构:

       4.1 遍历循环:for语句

              4.1.1结构:for <循环变量> in <遍历结构> :        

                                     <语句块>

              4.1.2遍历结构可以是字符串、文件、组合数据形式或range()函数等。

                     注:range(N):循环N次

              4.1.3遍历循环的一种扩展模式:

                     for <循环变量> in <遍历结构> :      

                            <语句块1>

                     else:

                            <语句块2>

                  注:只有for循环正常执行并结束后程序会执行else语句中的内容。

       4.2无限循环:while语句

              4.2.1 结构:while <条件> :

                                          <语句块>

                            其中条件与if语句中的判断条件一样,结果为True和False

              4.2.2扩展模式同for

       4.3循环保留字 break和continue

              4.3.1 break:跳出for或while的最内层循环

                                   脱离该循环后程序从循环代码后继续执行。

              4.3.2 continue:结束当前当此循环

                                     跳出循环体中下面尚未执行的语句,但不跳出当前循环。

              4.3.3扩展模式同for while

5. random库的使用

       5.1 random库——采用梅森旋转算法生成伪随机数序列

                            所谓伪随机数,因为计算机时按照一定算法生成随机数的,

其结果是确定的可预见的,成为伪随机数。

       5.2random库解析

注:个人认为第二 第三 第五 第六个比较重要。

6.实例6:Π的计算

       蒙特卡罗方法。代码如下

  1. #CalPiV2.py
  2. from random import random
  3. from time import perf_counter
  4. DARTS = 1000*1000
  5. hits = 0.0
  6. start = perf_counter()
  7. for i in range(1, DARTS+1):
  8.     x, y = random(), random()
  9.     dist = pow(x ** 2 + y ** 2, 0.5)
  10. 10.     if dist <= 1.0:
  11. 11.         hits = hits + 1

12. pi = 4 * (hits/DARTS)

13. print("圆周率值是: {}".format(pi))

14. print("运行时间是: {:.5f}s".format(perf_counter() - start))

注:①整体思路:在四分之一圆内以及半径相同正方形内随机撒点

                          设定撒点总数,并记录出现在四分之一圆内的点的总数。

② 代码中的dist:点到圆心距离

     ③出现在圆内的点数除以点总数即为面积比,

利用四分之一圆面积公式求派

          ④求根号下x方y方也可用math库中的sqrt()函数

7.程序的异常处理

       7.1异常处理:try-except语句

              结构:try:

                            <语句块1>

                       except<异常类型>:

                            <语句块2>

              注:语句块1为正常执行的程序内容,

语句块2为如果发生了except所提示的类型错误所执行的内容。

eg.

try:

       num = eval(input(“请输入一个整数:”))

       print(num**2)

except NameError:

       print(“输入错误,请输入一个整数!”)

代码执行效果:

>>> 

请输入一个整数:NO

输入错误,请输入一个整数!

       7.2异常的高级用法

              7.2.1 try-except支持多个except语句

                     与多分支结构类似

              7.2.2保留字else finally

                     else同for while循环中的else一样:

                         当try语句块正常执行结束且没有发生异常时else语句块执行

                     finally 无论try语句块是否正常执行finally都执行

      

照例插播一个小总结,方便记忆。

 

赋值符号                                   等于判断符号

不等于判断符号              if简洁用法

同步赋值法                两行语句中间\的作用

range()                   else在for while中的作用

break                         continue

random()                     randint(a,b)

randrange(a,b[,c])              uniform(a,b)

else在异常处理中的作用         finally

 

                     第四章习题

1 for var in ___:

    print(var)

哪个选项不符合上述程序空白处的语法要求?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A (1,2,3)

B "Hello"

C range(0,10)

D {1;2;3;4;5}

2. for i in range(0,2):

    print(i)

哪个选项是以上程序的输出结果?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 1 2

B 1

C 0 1 2

D 0 1

3. k=10000

while k>1:

    print(k)

    k=k/2

哪个选项给出了上述程序的输出次数?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 14

B 15

C 1000

D 13

4. 哪个选项是用来判断当前Python语句在分支结构中?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 大括号

B 冒号

C 缩进

D 引号

5. 哪个选项是下面代码的执行结果?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

for s in "PYTHON":

   if s=="T":

      continue

   print(s,end="")

 

A PY

B PYTHON

C TT

D PYHON

6. 哪个选项是random库中用于生成随机小数的函数?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A randrange()

B randint()

C random()

D getrandbits()

7. 关于try-except,哪个选项的描述是错误的?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 用于对程序的异常进行捕捉和处理

B 使用了异常处理,程序将不会再出错

C NameError是一种异常类型

D 表达了一种分支结构的特点

8. 以下可以终结一个循环的保留字是:(学习通)

A、exit B、break C、if D、continue

9. 请选择如下程序的执行结果:(学习通)

s = 0

for i in range(1, 11):

     if i % 2 == 0:

        continue

     if i % 10 == 5:

        break

     s = s + i

print(s)

A、34 B、4 C、10 D、9

10. 下面代码的输出结果是:(学习通)

s = 0

while True:

    if s<=1:

        s = s + 1

    else:

        break

print(s)

A、1

B、死循环

C、3

D、2

11. 关于程序的异常处理,以下选项中描述错误的是 :(学习通)

A、编程语言中的异常和错误是不同的概念,异常处理可以使程序更健壮

B、异常语句可以与else和finally保留字配合使用

C、Python通过try、catch等保留字提供异常处理功能

D、异常处理的目的是捕获异常并妥善处理,以使程序在发生异常时也可以继续运行而不致崩溃

12.下面不能作为Python分支结构的条件表达的是(a为一个数值变量) (学习通)

A、a>10

B、a in {“ysu”}

C、a>5 and a<10

D、5

13. 关于random.uniform(a,b)的作用描述,以下选项中正确的是

A、生成一个均值为a,方差为b的正态分布

B、生成一个(a, b)之间的随机数

C、生成一个[a, b]之间的随机整数

D、生成一个[a, b]之间的随机小数

14.  sum = 0

for i in range(1,11):

       sum += i

       print(sum)

以下选项中描述正确的是:(学习通)

A、循环内语句块执行了11次

B、sum += i 可以写为 sum +  = i

C、输出的最后一个数字是55

D、如果print(sum) 语句完全左对齐,输出结果不变

15. 已知有如下代码:

>>> import random

>>> random.______()

执行后产生的随机数始终在[0, 1.0)之间,请问它可能是random库中的哪一个函数?

(学习通)

A、shuffle

B、randint

C、random

D、uniform

16. 以下关于Python的程序控制结构的说法中错误的是? (学习通)

A、在while和for循环中,continue语句的作用是终止当前当次循环,重新进入下一次循环。

B、在while和for循环中,break语句的作用是跳出所有的循环,不仅终止当前循环,也终止上一层循环。

C、if语句执行有一个特点,它是从上往下判断,如果在某个判断上是True,则执行该判断对应的语句,忽略剩下的elif和else。

D、布尔运算符有一个很有趣的短路逻辑特性,即表达式x and y当x为假时,会直接返回False,不会去计算y的值。

17. 以下不正确的字符串是:(学习通)

A、'abc"ab"

B、'abc"ab’

C、"abc'ab"

D、"abc\ab"

 

 

 

 

                     第四章习题答案

1. 正确答案 D

for .. in .. 中 in 的后面需要是一个迭代类型(组合类型),{1;2;3;4;5}不是Python的有效数据类型。

2. 正确答案 D

range(0, 2)输出两个值:0和1。

3. 正确答案 A

请跟随程序计算或在IDLE中运行程序获得结果。

噗这个注解哈哈哈,这个题可以反过来想2的多少次方

嫌10000太大先除几个2,然后再反过来想,容易一些。

不过其实说实在的除以14次2而已,硬算也是可以的。

4. 正确答案 C

缩进表达层次关系

5. 正确答案 D

continue结束当次循环,但不跳出当前循环。

6. 正确答案 C

randint()、getrandbits()、randrange()都产生随机整数,random()产生0到1之间的随机小数。

7. 正确答案 B

使用了异常处理,程序可能运行不会出错,但逻辑上可能出错。程序错误是一个大概念,不仅指代码运行错误,更代表功能逻辑错误。

8. 正确答案 B

9. 正确答案 B

这题见太多次了。它的作用是计算1到4不能整除2的数的和。也就是1+3=4

没反应过来就再反应反应

10. 正确答案D

11. 正确答案C

       保留字try except 这题选进来主要是看一眼A选项。

12. 正确答案 B

       需要注意的是D选项,整数做条件:0:FALSE 其他均为TRUE

13. 正确答案 D

14. 正确答案 C

       range函数所限定的范围左闭右开。

       +=这类计算符号与等号连接使用的用法均不能有空格。

       print在for内输出10个数,在for外输出1个数。

15. 正确答案C

16. 正确答案B

       break只终止本层循环。

       注意一下C和D两个正确选项。

17. 正确答案A

       字符串左右最外侧引号必须数量一样单双三都行

 

 

                     第五章

1.函数

       1.1定义及一些注意

              1.1.1定义:函数是一段具有特定功能的,可重用的语句组。

                     函数也可以看作是一段具有名字的子程序。

              1.1.2对函数的使用不需要了解函数内部实现原理

              1.1.3自定义函数:用户自己编写的。

                      还有内置函数、标准库中的库函数

              1.1.4 使用函数有两个目的:降低变成难度和代码复用

              1.1.5格式:def <函数名>(<参数列表>):

                                  <函数体>

                                     return<返回值列表>

                     注意:当没有参数时也要保留圆括号。

                        函数定义中的参数时形式参数。

              1.1.6函数调用:<函数名>(<参数列表>)

                                   这里的参数为要传入函数内部的参数,为实际参数。

       1.2函数的调用过程

              我觉得应该都明白咋调用吧……不太懂的可以看书126看不明白可以问我

       1.3 lambda函数——匿名函数

              将函数名作为函数结果返回

              格式:   <函数名> = lambda <参数列表> : <表达式>

              等价于: def <函数名> (<参数列表>):

                                 return<表达式>

              (每个模块对应着看就懂了)

              简单地说,lambda函数用于定义简单的、能够在一行内表示的函数,返回一个函数类型。

              举个栗子

              >>>f = lambda x,y : x+y

              >>>f(10,12)

              >>>22

2.函数的参数传递

       2.1可选参数和可变数量参数

              定义函数时有些参数存在默认值,若调用时不输入参数则带入默认值,如果输入参数则以输入为准。

              举个栗子

              >>>def bling(str, times=1):

                     print(str*times) #这个还记得吧,字符串乘以n就是将字符串输出n次

              >>>bling(“xdyhfg!”) #猜中这一串是啥奖励你一朵小发发(这个是没输入参数

              >>>xdyhfg!

              >>>bling(“xdyhfg!!”,3) #输入参数后无视原来的默认参数

              >>> xdyhfg!! xdyhfg!! xdyhfg!!

              函数调用时需要按顺序输入参数,可选参数必须定义在非可选参数的后面,在上面的栗子中times必须跟在str后。

              也可设计可变数量参数(顾名思义不一定是几个),表示为一个星号加一个变量名。

              要注意!!!带有星号的可变参数只能出现在参数列表的最后。

              举个栗子

              >>>def vfunc(a,*b):

                            print(type(b)) #内置函数,输出变量类型

                            for n in b:

                                   a+=n

                            return a

              >>>vfunc(1,2,3,4,5)

              <class’tuple’>   #b变量的类型为元组类型(输出本无有注释我就是说明一下

              15

       2.2参数的位置和名称传递

              python可以按照形参名称输入实参,不一定非要按顺序输入参数。

              比如有这么个函数      func(x1,x2,x3)(return省略了 有返回值)

              你可以这么调用      result=func(x1=3,x3=6,x2=7)

       2.3函数的返回值

              可以没有return,return可以不止返回一个值,

return可以不止一个(比如ifelse配套用)

       2.4函数对变量的作用

              在定义的函数内部可以定义全局变量,函数外的变量均为全局变量

              格式:global<变量名>

              关于局部变量和全局变量的原则,我觉得书上写的挺好。直接上图

 

              如果这四条看不懂看看书131-132的几个栗子,再看不懂问我。

3. 模块3:datetime库的使用

       一些库函数

              datetime.now() 当前日期和时间,精确到微秒

              datetime.utcnow() 当前世界标准时间

              datetime(year,month,day,hour,minute,second,microsecond)构造一个日期和时间

              个人认为这些都不重要。可以简单看看控制符汇总表(也感觉不太重要)

              指路教材135

4.实例7:七段数码管绘制

       这一部分的重点在于函数封装。

       整体实现方式比较容易理解:

①    有一个默认画完一个八(七段数码管)的函数

②    不管画不画,画笔都会画,需要通过对数字分类控制笔的抬起和放下

七段数码管的绘制顺序

 

       基于以上知识点以及实现方式,代码如下

  1. import turtle
  2. def drawLine(draw):   #绘制单段数码管
  3.     turtle.pendown() if draw else turtle.penup()
  4.     turtle.fd(40)
  5.     turtle.right(90)
  6. def drawDigit(digit): #根据数字绘制七段数码管
  7.     drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
  8.     drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
  9.     drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
  10.     drawLine(True) if digit in [0,2,6,8] else drawLine(False)
  11.     turtle.left(90)
  12.     drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
  13.     drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
  14.     drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
  15.     turtle.left(180)
  16.     turtle.penup()
  17.     turtle.fd(20) 
  18. def drawDate(date):  #获得要输出的数字
  19.     for i in date:
  20.         drawDigit(eval(i))  #通过eval()函数将数字变为整数
  21. def main():
  22.     turtle.setup(800, 350, 200, 200)
  23.     turtle.penup()
  24.     turtle.fd(-300)
  25.     turtle.pensize(5)
  26.     drawDate('20181010')
  27.     turtle.hideturtle()
  28.     turtle.done()
  29. main()

本身不难,注意一下if else的简洁写法,细节自己理解理解(暂时没见过有这部分的题)

(不知道为啥这次不能复制成之前那种格式)

5. 代码复用和模块化设计

       尽量使功能块内部耦合紧密,功能块之间耦合度低。

       (提供一种理解记忆方式:所谓耦合,可以想成相关程度。同一个模块都是干一个事儿的,相关性肯定强,耦合就紧密。而不同模块之间干的事儿不一样,如果相关性强,那不是重复了嘛,所以耦合度低。)

       这个部分个人认为只有这一句话有用。细节可以看书141-142

6.函数的递归

       6.1所谓递归——函数定义中调用函数自身的方式

          关键特征:①存在一个或多个基例,基例不需要在此递归,它是确定的表达式。

②所有递归链要以一个或多个基例结尾

6.2递归的使用方法

       ……就……那么使

7. 实例8:科赫曲线绘制

  1. #KochDrawV1.py
  2. import turtle
  3. def koch(size, n):
  4.     if n == 0:
  5.         turtle.fd(size)
  6.     else:
  7.         for angle in [0, 60, -120, 60]:
  8.            turtle.left(angle)
  9.            koch(size/3, n-1)

10. def main():

  1. 11.     turtle.setup(800,400)
  2. 12.     turtle.penup()
  3. 13.     turtle.goto(-300, -50)
  4. 14.     turtle.pendown()
  5. 15.     turtle.pensize(2)
  6. 16.     koch(600,3)     # 0阶科赫曲线长度,阶数
  7. 17.     turtle.hideturtle()

18. main()

主要思想就是递归

基例:在一条直线的三分之一处开始,画出一个三角形的两条边。

8.python内置函数

       书149

       比较有用的之前都列出来了。

 

                     第五章习题

1.以下选项不是函数作用的是:

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 降低编程复杂度

B 提高代码执行速度

C 增强代码可读性

D 复用代码

2.下列程序的输出结果为:

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

def f(a,b):

  a=4

  return  a+b

def main():

  a=5

  b=6

  print(f(a,b),a+b)

main()

A 10   11

B 11  10

C 11  11

D 10  10

3. 以下关于Python函数说法错误的是:

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

def func(a,b):

  c=a**2+b

  b=a

  return c

a=10

b=100

c=func(a,b)+a

A 该函数名称为func

B 执行该函数后,变量a的值为10

C 执行该函数后,变量c的值为200

D 执行该函数后,变量b的值为100

4. 以下关于函数调用描述正确的是:

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 自定义函数调用前必须定义

B 函数在调用前不需要定义,拿来即用就好

C 函数和调用只能发生在同一个文件中

D Python内置函数调用前需要引用相应的库

5.以下关于模块化设计描述错误的是:‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

 

A 应尽可能合理划分功能块,功能块内部耦合度高

B 高耦合度的特点是复用较为困难

C 应尽可能合理划分功能块,功能块内部耦合度低

D 模块间关系尽可能简单,模块之间耦合度低

6.以下对递归描述错误的是:‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 执行效率高

B 一定要有基例

C 书写简单

D 递归程序都可以有非递归编写方法

7.以下关于函数说法错误的是:‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 函数可以看做是一段具有名字的子程序

B 对函数的使用必须了解其内部实现原理

C 函数是一段具有特定功能的、可重用的语句组

D 函数通过函数名来调用

8.哪个选项对于函数的定义是错误的?‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A def vfunc(a,b):

B def vfunc(*a,b):

C def vfunc(a,b=2):

D def vfunc(a,*b):

9.关于return语句,以下选项描述正确的是:‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 函数中最多只有一个return语句

B return只能返回一个值

C 函数可以没有return语句

D 函数必须有一个return语句

10.以下关于递归函数基例的说法错误的是:‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 递归函数的基例不再进行递归

B 递归函数的基例决定递归的深度

C 每个递归函数都只能有一个基例

D 递归函数必须有基例

11. 定义以下函数,其中f为所需要传入的函数。(学习通)

def test(f, a, b):

    print(f(a, b))

则执行语句 test((lambda x,y: x ** 3 + y), 2, 3)的输出结果是哪个选项?

A、9  B、11  C、8  D、10

12. 下列表达式是'False'的是:(学习通)

A、 'abcd'<'ad'

B、 'abc'<'abcd'

C、 ''<'a'

D、 'Hello'>'hello'

 

                     第五章习题答案

1. 正确答案 B

函数不能直接提高代码执行速度。

2. 正确答案 A

这里没有全局变量,都是函数局部变量的运算。

3. 正确答案 C

这里没有全局变量,请在IDLE中执行代码观察结果。

4. 正确答案 A
函数调用前必须已经存在函数定义,否则无法执行。

Python内置函数直接使用,不需要引用任何模块。

5. 正确答案 C
模块内高耦合、模块间低耦合。

6. 正确答案 A
递归不提高程序执行效率。

任何递归程序都可以通过堆栈或队列变成非递归程序(这是程序的高级应用)。

7. 正确答案 B
调用函数不需要知道函数内部实现原理,只需要知道调用方法(即接口)即可。

8. 正确答案 B
def vfunc(*a, b) 是错误的定义:*a表示可变参数,可变参数只能放在函数参数的最后。

9. 正确答案 C
函数可以包含0个或多个return语句

10. 正确答案 C
每个递归函数至少存在一个基例,但可能存在多个基例。

11. 正确答案 B

     遇见lambda函数的要领:看冒号后面的。

    此题冒号后面让用x的三次方加y,text的三个变量f,a,b分别对应lambda函数,x和y

12. 正确答案 D

    字符串比较大小实际上是对应编码的大小比较。小写字母编码比大写字母编码大

 

 

 

              第六章

1.组合数据类型——序列类型、集合类型和映射类型

    注:首层分类千万不要记错!组合数据类型分大类就这三种

①    序列类型:是一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他。

②    集合类型:是一个元素集合,元素之间无序,相同元素在集合中唯一存在。

③    映射类型:是键值数据项的组合,每个元素是一个键值对,表示为(key,value)

1.1序列类型

   分为字符串、元组、列表三种类型。

 

(后两个不常见)

              1.1.1三种序列类型都可以使用相同的索引体系——正向递增序号和反向递减序号

              1.1.2字符串可以看成是单一字符的有序组合,也被看作是基本数据类型

              1.1.3元组是包含0个或多个数据项的不可变数据类型。

                      元组生成后是固定的,其中任何数据项不能替换或删除。

                     元组用逗号隔开每个数据项,用圆括号括起来eg.(444,’dog’,’miao’)

                     注:圆括号在不混淆语义的情况下不是必须的。

                     元组套元组的索引 举个栗子↓(简单易懂√)

                     >>>wdmy=(’wo’,’de’,’ma’,’ya’)

                     >>>ha=(wdmy,2333)

                     >>>ha[0][1]

                     >>>’de’

       1.2集合类型

              1.2.1集合是包含0个活多个数据项的无序组合,元素不可重复,元素类型只能是固定数据类型(比如整数、浮点数、字符串、元组),而列表和字典和集合类型本身都是可变数据类型,不能作为集合元素出现。(就是说集合里不能套集合不能有列表和字典)

                   (是不是固定数据类型取决于能否进行哈希运算 教材157页)

              1.2.2set(x)函数用来生成集合(集合用大括号表示)

                     >>>w = set(“apple”)

                            {‘p’,’a’,’e’,’l’} #去重、无序

              1.2.3操作符和函数

 

       这一页姑且都看一看熟悉一下。我觉得比较重要的会列在后面辅助记忆。

       表六点三对比着记,注意返回值。

       1.3映射类型

              包括字典型,后面讲字典的时候细说

2.列表类型和操作(还记得列表属于那种组合类型嘛)

       2.1列表

2.1.1是包含0个或多个对象引用的有序序列,属于序列类型。

              2.1.2列表的长度和内容可变(还记得哪个序列类型不可变嘛)

              2.1.3因为属于序列类型,所以表6.1的方法都能用

       2.2列表类型的操作

 

       (ls是列表名 都知道吧……)

       (这个表都挺重要的)

       教材161-162实例看一看辅助理解

3. 实例9:基本统计值计算

 过于简单 直接粘代码了

  1. #CalStatisticsV1.py
  2. def getNum():       #获取用户不定长度的输入
  3.     nums = []
  4.     iNumStr = input("请输入数字(回车退出): ")
  5.     while iNumStr != "":
  6.         nums.append(eval(iNumStr))
  7.         iNumStr = input("请输入数字(回车退出): ")
  8.     return nums
  9.  

10. def mean(numbers):  #计算平均值

  1. 11.     s = 0.0
  2. 12.     for num in numbers:
  3. 13.         s = s + num
  4. 14.     return s / len(numbers)
  5. 15.  

16. def dev(numbers, mean): #计算方差

  1. 17.     sdev = 0.0
  2. 18.     for num in numbers:
  3. 19.         sdev = sdev + (num - mean)**2
  4. 20.     return pow(sdev / (len(numbers)-1), 0.5)
  5. 21.  

22. def median(numbers):    #计算中位数

  1. 23.     sorted(numbers)
  2. 24.     size = len(numbers)
  3. 25.     if size % 2 == 0:
  4. 26.         med = (numbers[size//2-1] + numbers[size//2])/2
  5. 27.     else:
  6. 28.         med = numbers[size//2]
  7. 29.     return med
  8. 30.  

31. n =  getNum() #主体函数

32. m =  mean(n)

33. print("平均值:{},方差:{:.2},中位数:{}.".format(m, dev(n,m),median(n)))

问一个应该没人不知道的问题  这个程序从第几行开始执行?

应该还记得双斜杠是整除号吧,不四舍五入的那种

sprt求平方根 sorted:升序排列

 

4.字典类型和操作

       4.1字典

              格式:{<键1>:<值1>,……}(键和值用中括号[]括起来)

              对应:<值>=<字典变量>[<键>]

       4.2 操作

              4.2.1生成空列表 set()

 

              4.2.2注意事项

①      字典是一个键值对的集合,该集合以键为索引,一个键信息只对应一个值信息。

②      字典中元素以键信息为索引访问。

③      字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。

④      字典的键为固定数据类型(可以理解为不可变)

5.模块4:jieba库的使用

       5.1分词函数

 

jieba库的三种分词模式:

①    精确模式:将句字最精确的切开,适合文本分析

lcut 输出的分词能够完整且不多余的组成原始文本

②    全模式:把句字中所有可以成词的词语全扫描出来。速度快,但不能消除歧义

冗余性最大

③    搜索引擎模式:在精确模式的基础上,对长词再次切分。

库安装指令,以jieba库为例 pip install jieba(想了想还是顺手打以下这条)

库的引用忘了的回turtle那复习

6.实例10:文本词频统计

  1. #CalHamletV1.py
  2. def getText():
  3.     txt = open("hamlet.txt", "r").read()
  4.     txt = txt.lower()
  5.     for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
  6.         txt = txt.replace(ch, " ")   #将文本中特殊字符替换为空格
  7.     return txt
  8.  
  9. hamletTxt = getText()

10. words  = hamletTxt.split()

11. counts = {}

12. for word in words:          

  1. 13.     counts[word] = counts.get(word,0) + 1

14. items = list(counts.items())

15. items.sort(key=lambda x:x[1], reverse=True) 

16. for i in range(10):

  1. 17.     word, count = items[i]
  2. 18.     print ("{0:<10}{1:>5}".format(word, count))
    1. 以哈姆雷特为例的英文词频统计。

①    第三行文件的打开后面会整理到

②    第四行 全部换小写

③    getText函数就是把全文本的大写换小写,特殊字符换空格然后返回更改之后的文本

④    此程序从第九行开始,首先处理文本

⑤    第十行 以空格为分隔符分割字符串

⑥    第11行,创建了一个字典(后面的题里也有涉及到,这种创建方法默认创建的是字典)

⑦    第十三行,counts[word]为字典中的键,counts.get(word,0) + 1为word键的值,默认值为0,从1开始计数

⑧    第十四行,创建了一个以counts字典所有键值对为元素的列表(因为列表能排序字典不能)

⑨    第十五行,以值的值排序,reverse=True控制排为降序(sorted默认升序,这里是sort,不太一样 具体我也不太懂)

⑩    最后的for循环,输出出现次数最多的十个 第十八行控制了格式,格式咋控制忘了的去翻format的大表格

值得一提的是这好像是第一次见到format控制了两个变量。冒号前为参数序号,0对应word,1对应count

  1. #CalThreeKingdomsV1.py
  2. import jieba
  3. txt = open("threekingdoms.txt", "r", encoding='utf-8').read()
  4. words  = jieba.lcut(txt)
  5. counts = {}
  6. for word in words:
  7.     if len(word) == 1:
  8.         continue
  9.     else:
  10. 10.         counts[word] = counts.get(word,0) + 1

11. items = list(counts.items())

12. items.sort(key=lambda x:x[1], reverse=True) 

13. for i in range(15):

  1. 14.     word, count = items[i]
  2. 15.     print ("{0:<10}{1:>5}".format(word, count))
    1. 以三国演义为例的中文词频统计

①    引用可以分中文词的jieba库

②    第四行,还记得lcut是那种分词方式么2333(精确模式)

③    第七行,因为统计的是人名所以排除了分词结果是单个字符的情况

④    后面和哈姆雷特没啥差了

 

ok第六章撒花!这一章我觉得有概率会考程序填空?大概

建议找找慕课上的编程题做一做 不做的话至少把实例看熟,函数表格看书

除此之外这一章有些细节很值得注意的 比如组合类型分类 比如每种类型的一些特点 元组不可更改之类的

建议再翻翻书

 

 

函数&方法小汇总 忘了的回去查哇

主要记忆:作用和返回值

 

  1. 序列通用(实际上字符串那里都有)

x in s                     s[i:j:k]

x not in s                  len(s)

s+t                       min(s)

s*n                       max(s)

s[i]                       s.index(x[,i[,i]])

s[i:j]                      s.count(x)

  1. 集合类型

& | ^ -                    

s.add(x)                    s.isdisjoint(t)

s.clear()                    len(s)

s.copy()                    x in s

s.discard(x)                 x not in s

s.remove(x)                

3.    列表类型

ls[i]=x                        ls.append(x)

ls[i:j]=lt                       ls.clear()

ls[i:j:k]=lt                      ls.copy()

del ls[i:j]                      ls.insert(I,x)

del ls[i:j:k]                     ls.pop(i)

ls+=lt 或ls.extend(lt)           ls.remove(x)

ls*=n                         ls.reverse()

  1. 字典

<d>.keys()                      <d>.popitem()

<d>.values()                     <d>.clear()

<d>.items()                      del <d>[<key>]

<d>.get(<key>,<default>)         <key>in<d>

<d>.pop(<key>,<default>)       

 

                     第六章习题

1.哪个选项是下面代码的输出结果?‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

d= {'a': 1, 'b': 2, 'b': '3'}

print(d['b'])

A 2   B 3   C {'b':2}  D 1

2. 关于Python的元组类型,以下选项错误的是:

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 元组一旦创建就不能被修改

B 一个元组可以作为另一个元组的元素,可以采用多级索引获取信息

C 元组中元素必须是相同类型

D 元组采用逗号和圆括号(可选)来表示

3. 关于Python组合数据类型,以下描述错误的是:

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 组合数据类型能够将多个相同类型或不同类型的数据组织起来,通过单一的表示使数据操作更有序、更容易

B Python的字符串、元组和列表类型都属于序列类型

C 组合数据类型可以分为3类:序列类型、集合类型和映射类型

D 序列类型是二维元素向量,元素之间存在先后关系,通过序号访问

4. 给定字典d,哪个选项对d.values()的描述是正确的?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 返回一个元组类型,包括字典d中所有值

B 返回一个列表类型,包括字典d中所有值

C 返回一种dict_values类型,包括字典d中所有值

D 返回一个集合类型,包括字典d中所有值

5. 关于大括号{},以下描述正确的是:

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 直接使用{}将生成一个字典类型

B 直接使用{}将生成一个集合类型

C 直接使用{}将生成一个列表类型

D 直接使用{}将生成一个元组类型

6. 列表ls,哪个选项对ls.append(x)的描述是正确的?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 向列表ls最前面增加一个元素x

B 向ls中增加元素,如果x是一个列表,则可以同时增加多个元素

C 只能向列表ls最后增加一个元素x

D 替换列表ls最后一个元素为x

7. 给定字典d,哪个选项对x in d的描述是正确的?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A  x是一个二元元组,判断x是否是字典d中的键值对

B 判断x是否是字典d中的值

C 判断x是否是在字典d中以键或值方式存在

D 判断x是否是字典d中的键

8.序列s,哪个选项对s.index(x)的描述是正确的?

‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

A 返回序列s中元素x第一次出现的序号

B 返回序列s中x的长度

C 返回序列s中元素x所有出现位置的序号

D 返回序列s中序号为x的元素

9. 对字典数据类型描述正确的是 (学习通)

A、字典是键值对的集合

B、字典是有序的

C、元组不可以作为字典的键

D、列表可以作为字典的键

10. s =["seashell","gold","pink","brown","purple"]

print(s[1:4:2])(学习通)

A、['gold', 'pink']

B、['gold', 'pink', 'brown', 'purple']

C、['gold', 'pink', 'brown']

D、['gold', 'brown']

11. 如下:(学习通)

str1 = "Runoob example....wow!!!"

str2 = "exam";

Print(str1.find(str2, 5)) 打印的结果是?

12.已知 dicts={张三":2,"李四”:4,"王五":5} 则想将王五的号码改成7,下列语句正确的是(学习通)

A、dicts["王五"]=7

B、dicts("王五")=7

C、dicts[2]=7

D、dicts[3]=7

这一章py123上的编程题我感觉还挺简单也比较有会的必要也贴在这儿了,答案里是我的答案,能实现就可以啦

1. 数字不同数之和

描述

获得用户输入的一个整数N,输出N中所出现不同数字的和。‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

例如:用户输入 123123123,其中所出现的不同数字为:1、2、3,这几个数字和为6。‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

输入输出示例

 

输入

输出

示例 1

123123123

6

 

2.人名最多数统计

描述

编程模板中给出了一个字符串,其中包含了含有重复的人名,请直接输出出现最多的人名。‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪ ‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

输入输出示例

(这里是个示例,展示输出格式,不是结果。‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪

 

输入

输出

示例 1

黄蓉

s = '''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖

       杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙

       金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍

       鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰

       阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰

       乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王

       忽必烈 慕容复 张三丰 赵敏 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正

       李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复

       逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣

       洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复

       黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄

       张三丰 令狐冲 赵敏 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫

       洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈

       完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱

       郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲

       谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉

       双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏

       逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄 赵敏'''

 

 

                     第六章习题答案

1.正确答案 B

创建字典时,如果相同键对应不同值,字典采用最后(最新)一个"键值对"。

2. 正确答案 C

序列类型(元组、列表)中元素都可以是不同类型。

3. 正确答案 D

序列类型总体上可以看成一维向量,如果其元素都是序列,则可被当作二维向量。

4. 正确答案 C

运行如下代码:(其中d是一个预定义的字典)

d={"a":1, "b":2}

type(d.values())

输出结果是:<class 'dict_values'>

d.values()返回的是dict_values类型,这个类型通常与for..in组合使用。

5. 正确答案 A

集合类型和字典类型最外侧都用{}表示,不同在于,集合类型元素是普通元素,字典类型元素是键值对。

字典在程序设计中非常常用,因此,直接采用{}默认生成一个空字典。

6. 正确答案 C

ls.append(x),如果x是一个列表,则该列表作为一个元素增加的ls中。

7. 正确答案 D

键是值的序号,也是字典中值的索引方式。

因此,x in d 中的x被当作d中的序号进行判断。         

8. 正确答案 A

注意:s.index(x)返回第一次出现x的序号,并不返回全部序号。

9. 正确答案 A

注意一下:字典无序、元组可以为字典的键(因为是固定数据类型)、列表不可以作为字典的键(因为可变)

10. 正确答案 D

从1到4以2为步长输出。注意列表第一个元素序号为0

11. 正确答案 7

Python find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。题干里的5是从五开始 这题只要从7以前的数开始都返回7

12. 正确答案 A

编程题1.

w = set(input())

answer = 0

for i in w:

    answer += int(i)

print(answer)

编程题2.

counts={}

s = s.split()

for word in s:

    counts[word] = counts.get(word,0)+1

cc = list(counts.items())

cc.sort(key=lambda x : x[1],reverse=True)

maxname,count = cc[0]

print(maxname)

 

 

最后一点点文件相关的知识点

(真的有人会看到这儿嘛 如果你看到这儿了,我保你……python肯定有分儿23333)

1.  python能够以文本和二进制两种方式处理文件

2.  文件可以包含任何数据内容

3.  文本文件和二进制文件的区别

 

 

4.文件的打开 open()函数

   格式:<变量名> = open(<文件名>,<打开模式>)

         注:文件名可以是文件的实际名字,也可以是包含完整路径的名字

5.文件的打开模式

 

其中 r w x a可以和b t +组合使用

文件使用结束后用<变量名>.close()方法关闭

6.文件的读写

 

注意一下后两个的区别

 

 

over!!!!!!!!!

到这里13216个字儿(就这个4-6一个文档) 哭了

看完的小朋友我分给你我出门捡到1角钱的好运祝你python高分过!

posted @ 2021-11-07 16:03  hotaru蛍  阅读(2609)  评论(0)    收藏  举报