python系统学习之路
前言
大一学完C语言后,暑假开始学python。原因之一是因为打CTF需要用一门高效,简洁,强大的语言来写脚本来做题,而python是非常符号这一特点的。其二是因为参与了大二学长的大创,负责爬虫,也需要用到python。因此我在B站上找到了大家都比较推荐的python课【0基础也能学】第6天学到这,有C语言基础学得还是挺快的,下面是我对第二至第六章的笔记与总结以及python和C之间的对比,对视频中一些错误的内容用蓝色标记了,但图片上可能也会有点小错误,没标出来,反正这我写的文章,应该就只有我自己看,懒得改。要是真有人看的话,建议先看补充知识
目录
第二章
python常见数据类型
变量
type
type() : 用于查看数据类型【变量是没有类型的,变量存储的数据是有类型的】
数据类型的转换
print 补充知识
同C语言不一样,print()函数默认换行,为了不换行,要加上end=’’
如:print(“Hello World”,end=’’)
标识符
python中的标识符
变量的命名规范
运算符
算术运算符
赋值运算符
字符串拓展
字符串的定义
字符串的引号嵌套
字符串的拼接
1.如果我们有两个字符串(文本):字面量,可以将其拼接成一个字符串,通过+号即可完成
2.不过,两个字符串单纯拼接,显得很呆,一般是字符串和变量进行拼接
注:字符串不能和数字(int、float)等其他类型拼接
字符串格式化
同样是占位符,但python同C语言不太一样,C语言中是要求后面的变量要和占位符的数据类型对应,如%s占位,后面必须得用字符串类型的变量;但python中则是将变量内容转换成相应的类型再放入占位位置。
字符串格式化的精度控制
精度控制是和C语言基本上一样的,但是,C语言中是没有四舍五入的
字符串快速格式化
特点:不限数据类型,不做精度控制
对表达式进行格式化
特点,能够跳过将表达式的值赋值到变量中的过程,直接格式化字符串
C语言中也是可以格式化表达式的
数据输入
当然,同C语言的scanf类似,可以将提示语句写入到input()中,如input(“hello”)
注:输入的数据都会变成字符串类型,若需要修改,要自己去数据类型转换
第三章
bool类型和比较运算符
bool类型
True,表示真,数字上代表1,False,表示假,数字上代表0
bool类型可以通过定义得到,也可以通过比较得到(同C语言一样)
比较运算符
(同C语言类似)
if语句
注:python中通过空格缩进来对应层次关系。
if,else语句
if elif else语句
同C语言稍微不太一样,C语言是if,else if,else,python有elif,来顶替else。
第四章
while循环
基本语法
for循环
注:for循环和C语言大不一样。
C语言中,for循环和while循环是可以相互转换的,两者可以说没什么差别,但python中差别很大,for循环没有while的循环条件限制,而是用数据集(序列)的范围来做限制
字符串可以直接当做序列,但数字类型不行。【当然,从字符串中取得的字符赋值给变量也是str类型】
range语句
序列类型
是指内容可以一一取出的一种类型,包括字符串、列表、元组等。
for循环的本质是遍历序列类型(遍历列表时还会提到)
语法
注意:range同random略有不同,random(a,b)是可以取到b的,而range(a,b)得到的序列中没有b【对于random(b),是默认将a视为0了,对于random(a,b,step),步长step不写,视为1】
for循环临时变量的作用域
在循环外定义,for循环可以看做将变量又重新覆盖了几遍。
continue和break来控制循环
continue和break在C语言和python中功能类似
第五章
函数
函数的定义
参数,函数体,返回值,这些概念以及相关操作同C语言高度一致。
函数的调用
函数的传参
python函数的参数也是同C语言高度相似的
函数返回值
什么是返回值
无返回值(也就是返回None)
函数的嵌套调用
同C语言一样,没啥好说的
函数变量作用域
同C语言一样,也没啥好说的
局部变量
全局变量
两者关系
C语言中没有global这种效用的东西
第六章
数据容器
列表
列表的定义
支持嵌套,也就是说元素可以是列表
列表的下标索引
列表索引同C语言中的数组索引有类似之处,比如都是从0开始,但也有不同,python是有从后往前递减的索引。而取列表的嵌套列表中的元素,则类似于C语言中的多维数组
列表的常用操作方法
列表的查询功能【方法】
列表的修改功能【方法】
上图显然有点问题,结果中应该是2,3
(每次只能追加一个任意元素)
相较于append,extend虽然能够追加到多个元素到列表后,实际上可以将追加的元素看做追加了一个数据容器
del是一个删除元素的关键字,而pop是list中的一个方法【这个方法的实际功能是将列表中指定的元素取出来,然后返回出去,因此还可以用一个变量来接收返回值】
注意:传入的参数不是下标,而是元素,如果列表中没有此元素则会报错
len是一个内置函数,不是列表中的方法,可以直接用就行
总结
列表的特点
列表的循环遍历
while循环
【同C语言中数组的遍历思想一样】
for循环
由之前接触for循环的时候,我们就了解到for循环的本质。for循环更合适遍历列表
while循环与for循环对比
虽然for循环会受限,但for循环将会是之后写代码用得更多
此外值得注意的是:while循环是下标在变化,而for循环是将对应的元素拿了出来
元组
但元组中可以嵌套列表,然后列表可以修改数据
元组的定义
也就是将列表的中括号换成了小括号而已
但要注意:如果单个元素不加逗号,整体就会是元素的数据类型,而非tuple
元组也是可以嵌套的,取嵌套元组中的数据和列表一样,注意是用[],而不是()
元组的操作
元组的操作同列表类似,但由于其不可修改的特性,使其操作比较少。
元组的循环遍历
元组的while循环和for循环同列表是一样的,只是不能修改而已,如果进行修改就会报错
字符串
字符串的定义不必多说,当然作为数据容器,字符串同列表、元组一样也支持索引下标
字符串的操作
最基础的操作
index、count、len这些功能都是能用的
字符串的替换【字符串特有】
可以认为.replace得到一个返回值
字符串分割【字符串特有】
分隔符字符串起到分隔的作用
字符串的规整操作【字符串特有】
strip方法只能去除字符串前后的指定字符【不需要考虑指定字符的顺序】,如果不传参,则默认指定空格和回车符
总结
字符串的循环遍历
字符串的特点
注意:与列表和元组不同的是,字符串只能存储str数据类型
序列及切片操作
但要注意:序列是不能修改的,会得到一个新的序列,参考元组和字符串可以知道
步长不写(留空)默认是1【步长留空,可以将前面的:也省略,但第一个:是无论如何都不能省略的】【起始和结束留空,表示从头到尾,且可以取到最后一位】
而 [::-1]相当于将序列反转
集合
特点:不支持元素重复,且无序
集合的定义
定义空集合得用set()【()是空元组,{}是空字典】赋值时会自动去重,且是无序的【每次运行的结果都可能不一样】
集合的操作方法
集合的修改
添加新元素
移除元素
同列表的remove略有不同,由于列表是可重复的,remove只会移除第一个匹配到的元素,而集合是不重复的,因此两者有所不同。
随机取一个元素
同列表中的pop略有不同,由于列表是有序的,有下标,因此在列表中pop中带上了下标,可以取对应的元素,而集合无序,因此没参数,随机取一个元素
清空集合
同列表中的方法效果一样。用clear方法
取差集【集合特有】
注:这是集合特有的方法,产生了一个新集合,想想可以知道,只能是产生一个新集合
消除差集【集合特有】
想想可以知道,只能是在某个集合中消除【谁用的方法就消谁】
合并集合【集合特有】
(想想也只能得到新集合)
统计元素个数
同之前的一样用len函数
循环遍历集合【只能用for循环】
由于无序,没有索引,只能用for循环
总结
集合的特点
不能while循环,因为不支持索引
字典
字典的定义
注:字典同集合一样,不允许重复,新的key会覆盖掉老的key中的value
字典数据的获取
【是中括号[]】
字典的嵌套
亲测发现:key不可以为列表(list)、集合(set)、字典(dict)【键是不能修改的数据类型】
这一点黑马的视频是没讲清楚的
字典的常用操作
添加新元素或修改元素
删除元素
用pop传入的参数是key【可将key当做列表的索引】返回的是字典中的value
清空元素
仍然是用clear方法,都一样
获取全部的key【字典特有】
注:返回值的类型是dict_keys ,但并不重要,这个方法常和for循环结合起来,操作value
for循环可以依次取出key值。
字典的遍历
方式1:通过获取全部的key后,进行for循环,依次得到key
方式2:直接对字典for循环得到的就是key【更快】
不能用while循环来遍历字典
统计长度
用len函数
总结
字典的特点
数据容器的简单分类与对比
字典中的key除了可修改的类型,其他都能用
数据容器的通用操作
遍历
统计
注意:不同的数据类型是不能比较大小的,编译器会报错
注:字典最大最小元素比较的是key而不是value
相互转换
字典转列表、元组、集合后,只剩下key
其他数据容器转字符串后,输出结果与原来一样,但实际上转换后就是在这些数据容器上加了一对双引号,如:列表转字符串后:”[1, 2, 3, 4]”
不能将其他容器转字符串,因为没有value
容器排序
反向排序,如:sorted(my_list, reverse = True)
sorted排序会将排序后的结果存放到列表中,且对列表排序后会仍然会丢失value
总结
补充知识
制表符\t
但有时会由于第二行第一个单词太抽象了而不能够对齐
语法规范
逗号后面来个空格
字符串大小的比较
python中字符串大小的比较和C语言原理一样,都是逐一比较每个字符的ASCII值,直到有一组比较出来,作为结果
python与c语言的区别
自增
C语言可以用i++,python中只能用i += 1
类与方法
有点像自己创建了一个库(不需要import引入,先用一个变量名,接收这个库,然后这个变量名便有了这个库的功能(可以调用这个类中的函数【方法】))
编译器用到的操作(pycharm为例)
ctrl + D 向下填充【复制本行到下一行】
ctrl + Z 撤销
Shift + Alt +鼠标左键 纵向选择
编程语言不可能完全能记下来