python编程从入门到实践 学习笔记

2022-11-15 14:57:48 浏览数 (1)

一、起步

安装python的相关内容

二、变量和简单数据类型

1变量

变量的命名:

  • 只能字母、数字和下划线
  • 不能包含空格
  • 不要将Python关键字和函数名用作变量名
  • 慎用小写字母l和大写字母O

2字符串

2.1修改大小写

  • 方法title()将每个单词的首字母都改为大写
  • 方法upper()将每个字母都转为大写
  • 方法lower()将每个字母都转为小写

例如a='abc defg'

  • print(a.title())输出Abc Defg
  • print(a.upper())输出ABC DEFG
  • print(a.lower())输出abc defg

2.2合并(拼接)字符串:使用 来拼接字符串

2.3使用制表符(t)或换行符(n)来添加空白

2.4删除空白

  • 使用rstrip()删除字符串末尾的空白
  • 使用lstrip()删除字符串开头多余的空白
  • 使用strip()删除字符串两端的空白

其他:

  • 使用函数str()避免类型错误
  • 编写注释:用#标识

三、列表

在Python中,用方括号([])来表示列表,并用逗号来分隔其中的元素。

1访问列表元素

  • 列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置或索引告诉Python即可。
  • 索引从0 而不是1 开始。
  • 将索引指定为-1,可让Python返回最后一个列表元素。
  • 索引-2返回倒数第二个列表元素,索引-3返回倒数第三个列表元素,以此类推。

2 append()和insert()

  • 方法append()将元素添加到列表末尾;
  • 使用方法insert()可在列表的任何位置添加新元素。
  • 为此,你需要指定新元素的索引和值。
  • 例如a.insert(0,'abc'),在列表的索引0的位置插入该元素。

3删除元素

  • 使用del语句删除元素,如del a[0],删除第0个元素;
  • 使用方法pop()删除元素,列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素;
  • 使用pop()来删除列表中任何位置的元素,只需在括号中指定要删除的元素的索引即可,如a.pop(2);
  • 根据值删除元素,使用方法remove()删除指定值的元素,如a.remove('abc')

4排序

  • 使用方法sort()对列表进行永久性排序,按照字母顺序排序,例如a.sort();
  • 如果按与字母顺序相反的顺序排列,则使用a.sort(reverse=True) 使用函数sorted()对列表进行临时排序,同时不影响它们在列表中的原始排列顺序,如sorted(a);
  • 同样,如果要与字母顺序相反的顺序显示列表,也可向函数sorted()传递参数reverse=True,如sorted(a,reverse=True)
  • 反转列表元素的排列顺序,使用方法reverse(),如a.reverse()

其他:len()方法快速确定列表的长度,如len(a)

四、操作列表

1 遍历整个列表

使用for循环,例如 a=['ac','ab','dc'] for i in a: print(i)

2 range()函数

  • 要得到数字1~5,需要使用range(1,6),如list(range(1,6));
  • 使用range()函数,还可以指定步长,如list(range(2,11,2))

3 一些数学运算

  • a=3,print(a**2),输出a的2次方。
  • a=[1,2,3,4,5,6],max(a)求列表a中最大值,min(a)求列表a中最小值,sum(a)求列表中所有值的总和
  • a= [i**2 for i in range(1,11)],print(a),结果为[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

4切片

切片:使用列表的部分元素。

  • 包含起始索引,不包含终止索引,如a=[1,2,3,4,5,6,7,8,9,10],a[1:3]即为[2,3];
  • 如果没有起始索引,则从索引0开始,a[:4]即为[1,2,3,4];
  • 如果没有终止索引,则到最后一个元素结束,a[4:]即为[5,6,7,8,9,10];
  • 如果想要得到最后三个元素,可以使用a[-3:]即为[8,9,10]。

5复制列表

复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。

  • 这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个列表。
  • 如a=[1,2,3,4],b=a[:],此处为浅拷贝。
  • 如果将列表a赋列表b,而不是将列表a的副本存储到列表b,这种语法实际上是让Python将新变量b关联到包含在a中的列表,因此这两个变量都指向同一个列表,此处为赋值,不是拷贝。

python中深拷贝与浅拷贝 此处推荐(225条消息) Python 深拷贝和浅拷贝详解xzw96的博客-CSDN博客python 深拷贝

python中深拷贝、浅拷贝、赋值引用 (225条消息) python:深拷贝,浅拷贝,赋值引用bufengzj的博客-CSDN博客深浅拷贝python

6元组

元组:使用圆括号来标识,使用索引来访问元素。

  • 列表可以修改其元素,而元组不可以。
  • 不可变的列表被称为元组。如a=(10,20),取元组中的元素a[0]、a[1]。
  • for循环遍历元组 修改元组变量:虽然不能修改元组的元素,但可以给存储元组的变量赋值。如a=(10,20),后面直接给元组a赋值,a=(30,40)。

五、 if语句

  • 在Python中检查是否相等时区分大小写;
  • and,or,in,not in,True,False等的使用
  • if语句,if-else 语句,if-elif-else 结构(可以使用多个elif,else语句可以省略)
  • 确定列表是否为空,如a=[1,2],直接if a:

六、字典

在Python中,字典是一系列键值对,与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。

键—值对是两个相关联的值。

  • 指定键时,Python将返回与之相关联的值。
  • 键和值之间用冒号分隔,而键—值对之间用逗号分隔。如a={'color':'red','score':5}。

键值对

  • 添加键值对:依次指定字典名、用方括号括起的键和相关联的值。如a['name']='jack'。
  • 修改字典中的值:可依次指定字典名、用方括号括起的键以及与该键相关联的新值,如a['color']='blue'
  • 删除键值对:使用del语句进行删除,如del a['color']。
  • 遍历字典中所有的键值对:例如字典a={'color':'red','score':5},for key, value in a.items(): 当然key和value只是变量名,可以是任意名称,如k和v。
  • 遍历字典中的所有键:例如for k in a.keys(): 按顺序遍历字典中的所有键:例如for name in sorted(a.keys()):
  • 遍历字典中的所有值:例如for v in a.values(): 这种做法提取字典中所有的值,而没有考虑是否重复。为剔除重复项,可使用集合(set),集合类似于列表,但每个元素都必须是独一无二的。例如for v in set(a.values()):

嵌套:

  • 列表中嵌套元组:如a1={'color':'red','score':5},a2={'color':'blue','score':10},a3={'color':'green','score':15},b=[a1,a2,a3],b.append({'color':'black','score':20})。
  • 在字典中存储列表:如a1={'color':'red','score':[5,10,15]}。
  • 在字典中存储字典:如a1={'aa':{‘a1’:1,‘a2’:2,‘a3’:3}},'bb':{‘b1’:1,‘b2’:2,‘b3’:3}}}

七、用户输入和while循环

1函数input()让程序暂停运行,等待用户输入一些文本。使用函数input()时,Python将用户输入解读为字符串。函数int()可以将数字的字符串表示转换为数值表示。求模运算符(%),取余。

2for循环用于针对集合中的每个元素的一个代码块,而while循环不断地运行,直到指定的条件不满足为止。

3我们使用函数remove()来删除列表中的特定值,这之所以可行,是因为要删除的值在列表中只出现了一次。如果要删除列表中所有包含特定值的元素,该怎么办呢?例如:while 'cat' in pets: pets.remove('cat')

八、函数

def 函数名(形参): 可以有多个形参

形参与实参

  • 函数定义中的变量称为形参
  • 函数调用中的变量称为实参

使用参数

  • 调用函数时,可以不指出参数的名称,但是实参的位置一定要写对;
  • 指出参数的名称时,实参的位置不做要求。
  • 编写函数时,可给每个形参指定默认值,在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。

return返回值,也可以返回字典等。

结合使用函数和while 循环

将函数存储在模块中,再导入整个模块。

  • from a import b as c,从a.py中引入函数b,并给函数b一个别名c。
  • import a as c,给模块a一个别名c,c直接调用函数,c.b()。
  • from a import *,引入模块a中所有的函数。

给形参指定默认值时,等号两边不要有空格,对于函数调用中的关键字实参,也应遵循这种约定。

九、类

1方法__ init__(),当你根据类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线。该方法的定义中,形参self必不可少,还必须位于其他形参的前面。

2根据类创建实例,a=Cat(),访问实例的属性,调用类中定义的方法。

3继承:定义子类时,必须在括号内指定父类的名称

十、文件和异常

(1)从文件中读取数据

1读取整个文件:

代码语言:javascript复制
with open('a.txt') as f:
    contents = f.read()
    print(contents)

你只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭。

要删除末尾的空行,可在print语句中使用rstrip(),print(contents.rstrip())

2文件路径

包含相对路径和绝对路径。在Windows系统中,在文件路径中使用反斜杠()而不是斜杠(/)。另外,由于反斜杠在Python中被视为转义标记,为在Windows中确保万无一失,应以原始字符串的方式指定路径,即在开头的单引号前加上r。

3逐行读取

代码语言:javascript复制
with open('a.txt') as f:
    for line in f:
        print(line)

出现多余的空白行,改为print(line.rstrip())。

4创建一个包含文件各行内容的列表

代码语言:javascript复制
with open('a.txt') as f:
    lines= f.readlines()
for line in lines:
    print(line.rstrip())

5使用文件的内容

readlines()从文件中读取每一行,并将其存储在一个列表中。为删除每行左边的这些空格,可使用strip()而不是rstrip()。

6包含一百万位的大型文件

对于你可处理的数据量,Python没有任何限制;只要系统的内存足够多,你想处理多少数据都可以。

(2)写入文件

1写入空文件

代码语言:javascript复制
with open('a.txt','w') as f:
    f.write("I love programming.")

打开文件时,可指定读取模式('r')、写入模式('w')、附加模式('a')或让你能够读取和写入文件的模式('r ')。如果你省略了模式实参,Python将以默认的只读模式打开文件。

如果你要写入的文件不存在,函数open()将自动创建它。然而,以写入('w')模式打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件。

2写入多行

要让每个字符串都单独占一行,需要在write()语句中包含换行符。

3附加到文件

如果你要给文件添加内容,而不是覆盖原有的内容,可以附加模式('a')打开文件。

(3)异常

每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。

异常是使用try-except代码块处理的。try-except代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办。

使用了try-except代码块时,即便出现异常,程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的traceback。

1处理ZeroDivisionError 异常

如print(5/0)会出现异常。

2使用try-except 代码块

代码语言:javascript复制
try:
    print(5/0)
except ZeroDivisionError:
    print("You can't divide by zero!")

3使用异常避免崩溃

4else 代码块

5处理FileNotFoundError 异常

Python无法读取不存在的文件,因此它引发一个异常。

6分析文本

方法split()以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中。

7使用多个文件

8失败时一声不吭:使用pass语句

(4)存储数据

一种简单的方式是使用模块json来存储数据。

模块json让你能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。

还可以使用json在Python程序之间分享数据。

更重要的是,JSON数据格式并非Python专用的,这让你能够将以JSON格式存储的数据与使用其他编程语言的人分享。

使用json.dump()和json.load()

json.dump()来存储一组数字,json.load()将这些数字读取到内存中。

函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。

先导入模块json,import json,numbers.json中数据的存储格式与Python中一样。

代码语言:javascript复制
import json
num = [2, 3, 5, 7, 11, 13]
file = 'numbers.json'
with open(file, 'w') as f:
    json.dump(num, f)

使用函数json.load()加载存储在numbers.json中的信息,并将其存储到变量numbers中。

代码语言:javascript复制
import json
file = 'numbers.json'
with open(file) as f:
    num = json.load(f)
print(num)

十一、测试代码

单元测试和测试用例

Python标准库中的模块unittest提供了代码测试工具。单元测试用于核实函数的某个方面没有问题;测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。

0 人点赞