目录
好辛苦,在读《Python编程,从入门到实际》,这是读的时候做的笔记
我要保持日更!!
我记笔记直接写的,没有用MD编辑器,好后悔!!搞个二级标题好麻烦
看不懂的可以评论或私信
现在的编排可能不那么完善,我每天都会改改,添加添加内容
字符串
修改字符串大小写
首字母大写:title()
字母全大写:upper()
字母全小写:lower()
合并字符串
直接加号连接即可-->可以拼接创建信息
sql语句是concat函数
删除字符串空白
字符串俩端空白都删strip()
只删除右端rstrip()
只删除左端lstrip()
整数类型int变字符串str
str()-->避免类型错误,语句无法输出
报错,提示你第二句错误,应该用函数str转换字符串
正确输入:
制表符,换行符
制表符\t
换行符\n
列表
创建列表
方括号[]表示列表,逗号分隔其中的元素
bicycles=['trek', 'cannondale','redline','specialized']
访问列表
要有索引,第一个元素索引为0,其后1,2,,,(!!索引从0开始)
索引顺序
综合运用一下前面知识
应该看得懂把!
修改,添加,删除列表元素
修改元素
什么!直接改!就是这么简单
添加元素
append()
推广-->创建空列表,然后通过存储用户输入的值,变成一个满满当当的列表
添加只能添加末尾,不干扰其他元素,我想添中间怎么办?
插入元素
插入啊,当然是运用insert()
插入索引2位置,它就是索引2代表元素了!!
删除元素
del语句
这不是函数,这是del语句!!
如果我删除了,但是后续还想用怎么办,还想要这个信息怎么办???
当当当:pop()函数,将元素从列表中删除,并接着使用它的值
如果不输入索引,默认删除末尾元素
注意:使用pop()时,删除的元素不在列表哦
如果你不知道你要删除的值在哪,索引是什么怎么办??
我问你怎么办?
remove()函数闪亮登场
你猜删除后还可不可以接着使用它的值
可以用!惊不惊喜!考察:\n什么意思
注意:remove()只删除第一个指定的值,如有要删除的值在列表中多次出现,要进行循环语句删除了,后续会学,想知道怎么循环吗?
组织列表
就是按你想要的顺序排排序啦
sort()函数,默认按字母顺序排序
如果要按字母顺序相反排序
sort函数还有其他顺序,我这基础班就不介绍了
注意:sort()对列表元素排列顺序的修改是永久性的
如果是临时排序,那就是sorted()函数
看看看,没有变原式排列顺序
反转元素的排列顺序,用我们的reverse()函数
确定列表长度
函数len()
创建列表for循环
for循环,使用range()函数
看出来没,range里面是左闭右开的,1是可以取到的,6是取不到的
创建数字列表
range还可以指定步长(一个步子跨多大)
结合for循环和range()函数来生成1-10的平方
还记得append函数含义吗?在前面讲了哦
列表一部分(切片)
看看依旧是左闭右开
这个代表从-2这个索引开始往后取,到结束
所以想输出最后几个元素就很简单了
复制列表
提示:创建一个包含整个列表的切片(思考思考,举一反三)
答案是:[:]
验证一下
如果简单的将my_bicycles=bicycles,就不能得到俩个列表
看看不能就这样,要创建包含整个切片
元组
列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素, 元组可以满足这种需求。Python将不能修改的值称为不可变的,而不可变的列表被称为元组。
定义元组
元组看起来犹如列表,但使用圆括号而不是方括号来标识
哦吼,不能修改
遍历元组中的所有值
修改元组变量
虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺 寸,可重新定义整个元组
想不到吧!!
检查变量是否相等
将变量car的值设置为'audi'
两个等号是 发问,第二句可解读为“变量car的值是'bmw'
糟糕,大小写不同会被视为不相等
哒哒哒,这样可以了!
而且函数lower()不改变存储在变量car的值
if语句
!=的含义是不等于
可以多个elif
还可以省略else
字典
观察,观察格式,是不是大括号括起来
color被称为键,green变称为值
访问字典中的值
添加键-值对
看看看,添加了俩对键-值
修改字典中的值
综合运用:
对一个能够以不同速度移动的外星人的位置进行跟踪。为此,我们 将存储该外星人的当前速度,并据此确定该外星人将向右移动多远
自己做做:
删除键-值对
彻底删除还是del语句,不记得了回头看看!
遍历字典
遍历所有的键-值对
函数items()
遍历字典中所有的键
函数keys()
按顺序遍历字典中的所有键
字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。 这不是问题,因为通常你想要的只是获取与键相关联的正确的值。
但是但是!!
要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用函 数sorted()来获得按特定顺序排列的键列表的副本
介个函数之前学过哦!!
遍历字典中所有的值
函数values()
这种做法提取字典中所有的值,而没有考虑是否重复。
用集合(set) 集合类似于列表,但每个元素都必须是独一无二的
哒哒哒
在字典中存储列表
所有一个键可以对应好多个值!!还可以存储多个键关联的值都是列表!
在列表中存储字典
看清楚不同了没
混合就类似这样:
同类用列表,不同类用字典键-值
在字典中存储字典
那为什么还要列表存储字典啊,列表存储字典怎么访问里面的元素,字典存储字典不更加好吗?
选择列表存储字典or字典存储字典
列表是一种有序的数据结构,可以存储任意类型的元素,包括字典。当你需要保持元素的顺序或者需要通过索引来访问元素时,列表是一个很好的选择。例如,如果你有一个班级的学生信息,每个学生的信息可以用一个字典表示,那么所有学生的信息就可以存储在一个列表中。
访问列表中字典的元素,可以通过索引来实现:
字典是一种无序的数据结构,其中的元素是键值对。当你需要通过一个唯一的键来快速访问数据时,字典是更好的选择。例如,如果你要存储一个班级的学生信息,并且每个学生都有一个唯一的学号,那么使用字典存储学生信息会更方便。
访问字典中字典的元素,可以通过键来实现:
- 如果你需要保持数据的顺序,或者经常通过索引来访问数据,那么列表可能更适合。
- 如果你需要通过一个唯一的标识符(如学号、用户名等)来快速访问数据,那么字典可能更合适。
用户输入
函数input()
就是将用户输入存储在变量里,再打印输出了
有时候,提示可能超过一行,怎么办,怎么办?
我们可将信息存储在一个变量中,再将该变量传递给函数input()。这样,即便提示超过一行,input() 语句也非常清晰
input函数将用户输入解读为字符串,我输入数字怎么办
函数int()
出场
while循环
使用break退出循环
在循环中使用continue
打印1-10的奇数
我们首先将current_number设置成了0,由于它小于10,Python进入while循环。进入循环后, 我们以步长1的方式往上数,因此current_number为1。接下来,if语句检查current_number 与2的求模运算结果。如果结果为0(意味着current_number可被2整除),就执行continue语句, 让Python忽略余下的代码,并返回到循环的开头。如果当前的数字不能被2整除,就执行循环中 余下的代码,Python将这个数字打印出来
使用while循环来处理列表和字典
在列表之间移动元素
代码含义:我们首先创建了一个未验证用户列表,其中包含用户Alice、Brian和Candace,还创 建了一个空列表,用于存储已验证的用户。while循环将不断地运行,直到列表 unconfirmed_users变成空的。在这个循环中,函数pop()以每次一个的方式从列表 unconfirmed_users末尾删除未验证的用户。由于Candace位于列表unconfirmed_users末尾,因此 其名字将首先被删除、存储到变量current_user中并加入到列表confirmed_users中。接 下来是Brian,然后是Alice。 为模拟用户验证过程,我们打印一条验证消息并将用户加入到已验证用户列表中。未验证用 户列表越来越短,而已验证用户列表越来越长。未验证用户列表为空后结束循环,再打印已验证 用户列表
删除包含特定值的所有列表元素
题目:假设你有一个宠物列表,其中包含多个值为'cat'的元素。要删除所有这些元素,可不断运行一个while循环,直到列表中不再包含值'cat'
提示:remove函数,我们学过哦
这里前面遗留过的问题哦,循环删除重复值
使用用户输入来填充字典
函数
啊啊啊函数,我来了
定义函数
是不是很简单,定义再运用
括号里面可以填!!
实参和形参
在函数greet_user()的定义中,变量username是一个形参——函数完成其工作所需的一项信息。在代码greet_user('jesse')中,值'aimi'是一个实参
来俩个形参
还可以这样
前面形参的定义,代表你调用时不用定义,默认是那个对象,但是你如果自己定义也可以
返回值
函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。在函数中,可使用return语句将值返回到调用函数的代码行
让实参变成可选
如果那个人没有中间这个名字,怎么办
指定一个默认值----空字符串就好了
注意:要将该实参移到形参列表的末尾
返回字典
轻松扩展字典储存
传递列表
在函数中修改列表
将列表传递给函数后,函数就可对其进行修改。在函数中对这个列表所做的任何修改都是永 久性的
题目:来看一家为用户提交的设计制作3D打印模型的公司。需要打印的设计存储在一个列表中, 打印后移到另一个列表中。下面是在不使用函数的情况下模拟这个过程的代码:
这个之前写过类似的哦!!
为重新组织这些代码,我们可编写两个函数,每个都做一件具体的工作。大部分代码都与、原来相同,只是效率更高。第一个函数将负责处理打印设计的工作,而第二个将概述打印了哪 些设计
禁止函数修改列表
假设像前一个示例那样,你有一个未打印的设计列 表,并编写了一个将这些设计移到打印好的模型列表中的函数。你可能会做出这样的决定:即便 打印所有设计后,也要保留原来的未打印的设计列表,以供备案。但由于你将所有的设计都移出 了unprinted_designs,这个列表变成了空的,原来的列表没有了
为解决这个问题,可向函数传 递列表的副本而不是原件;这样函数所做的任何修改都只影响副本,而丝毫不影响原件
创建列表副本:[:] 熟不熟悉
前面学过
传递任意数量的参数
用咱们的通配符*
*toppings中*让Python创建一个名为toppings的空元组
结合使用位置实参和任意数量实参
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最 后。Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中
size该形参放在形参*toppings前面
使用任意数量的关键字实参
题目:你知道你将收到有关用户的信息,但不确定会是什么样的信息。 在下面的示例中,函数build_profile()接受名和姓,同时还接受任意数量的关键字实参
提示:可将函数编写成能够接受任意数量的键—值对——调用语句提供了多少就接受多少
将函数存储在模块中
将函数存储在被称为模块的独立文件中,再将模块导 入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码
导入整个模块
先创建一个包含函数make_pizza()模块
接下来,我们在pizza.py所在的目录中创建另一个名为making_pizzas.py的文件,这个文件导 入刚创建的模块,再调用make_pizza()两次
导入特定的函数
导入方法语句:
from module_name import fuction_0, function_1, function_2
使用as给函数指定别名
当然,也可以使用as给模块指定别名
导入模块中所有的函数
类
创建和使用类
来创建一个Dog类吧
注意:是__init__,不是_init_,要输入俩个_
首先,在Python中,首字母大写的名称指类,这个类定义中的括号是空的,因为我们要从空白创建这个类。
其次,类中的函数称为方法,你前面学到的有关函数的一切都适用于方法,就目前而言,唯一重要 的差别是调用方法的方式。方法__init__()是一个特殊的方法,每当你根据Dog类创建新实 例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约 定,旨在避免Python默认方法与普通方法发生名称冲突
而且,我们将方法__init__()定义成了包含三个形参:self、name和age。在这个方法的定义中,形 参self必不可少,还必须位于其他形参的前面。为何必须在方法定义中包含形参self呢?因为 Python调用这个__init__()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法 调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。 我们创建Dog实例时,Python将调用Dog类的方法__init__()。我们将通过实参向Dog()传递名字和 年龄;self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最 后两个形参(name和age)提供值。
接下来,定义的两个变量都有前缀self。以self为前缀的变量都可供类中的所有方法使用,我们 还可以通过类的任何实例来访问这些变量。self.name = name获取存储在形参name中的值,并将 其存储到变量name中,然后该变量被关联到当前创建的实例。self.age = age的作用与此类似。像这样可通过实例访问的变量称为属性
根据类创建实例
调用方法
创建多个实例
给属性指定默认值
新创建了一个Car类
添加了一个名为odometer_reading的属性,其初始值总是为0。我们还添加了一个名为 read_odometer()的方法,用于读取汽车的里程表
修改属性的值
直接改!
通过方法修改属性的值
我们扩充一下这个方法
通过方法对属性的值进行递增
新添加了这个方法,从334+100=434了
继承
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类, 而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法
创建子类时,父类必须包含在当前文件中,且位于子类前面
定义子类时,必须在括号内指定父类的名称
super()是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用 ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性
给子类定义属性和方法
重写父类的方法
可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。
将实例用作属性
不断给ElectricCar类添加细节时,我们可能会发现其中包含很多专门针对汽车电瓶的属性和方法。在这种情况下,我们可将这些属性和方法提取出来,放到另一个名为Battery的 类中,并将一个Battery实例用作ElectricCar类的一个属性
定义一个新的类,在子类调用这个类
这看似做了很多额外的工作,但现在我们想多详细地描述电瓶都可以,且不会导致ElectricCar 类混乱不堪