赞
踩
python安装教程
pycharm安装教程
python遇到的问题
给项目配置intergreter
可以输出数字,字符串(加单引号),含有运算符的表达式,输出到文件

\n 换行
\t 空格
\b 退一个格
\r 覆盖
\反斜杠

ps:
如果不希望原来的转义字符起作用,就在原字符之前加上r或者R,但是最后一个字符不能是反斜杠,示例如下:

错误示例:前面有r,最后一位是反斜杠
正确示例:前面有r,最后一位可以是双斜杠

2.3.1 保留字
输入:

就会出来python默认的保留字,以下几种:
[‘False’, ‘None’, ‘True’, ‘peg_parser’, ‘and’, ‘as’, ‘assert’,
‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’,
‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’,
‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’,
‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
2.3.2 标识符
变量,函数,类,模块和其他对象起的名字就叫标识符
规则:
1.不能是保留字
2.不能以数字开头
3.严格区分大小写
4.字母,数字,下划线构成
2.4.1 变量的构成
变量由标识,类型和值构成
标识:内存地址
类型:数据类型
值:存储的具体数据

2.4.2 变量的多次赋值

- 整数类型 int
- 浮点数类型 float
- 布尔类型 bool
- 字符串类型 str
2.5.1 整数类型(正数,附属,0)
二进制——以0b开头, 0-9
八进制——以0o开头, 0-7
十六进制——以0x开头,0-9,a-f
例子:

2.5.2 布尔类型
布尔值可以转换成整数计算
True 表示为1
False 表示为0

2.5.3 字符串类型
ps:单纯的单引号和双引号无法转行,三重的单引号和双引号可以转行

str()
int()
float()
转换成int类型的注意事项:

ps:当将string类型与int类型连接时会报错,解决方案是进行类型转换,例如:

转换成float类型

单行注释 #
多行注释 ‘’‘ 或者 “”"
input函数默认输入的是字符串类型,印证如下:

改进以后,将str类型转换成int类型

2.8.1 算术运算符

注意:整除 // 的时候,一正一负向下取整

另外,取模运算的时候,余数的公式=被除数-除数×商
所以 9%-4的结果 9-(-4)×(-3)=-3

2.8.2 赋值运算符
1.执行顺序为从右向左
2.支持链式赋值, 比如a=b=c=20
3.支持参数赋值 +=、-=、*=、/=、//=、%=
4.支持系列解包赋值 a,b,c=20,30,40

2.8.3 比较运算符
对变量或表达式的结果进行大小,真假的比较,分别为:

注意:
比较运算符的结果类型为bool类型
==比较的是值是否相等,is比较的是id是否相等

2.8.4 布尔运算符
and
-true and true true
-其余为falseor
-false or false 结果为false
-其余为truenot 对布尔类型操作数取反
-not false 为true
-not true 为false

in与not in的运算

2.8.5 位运算
-按位与 & 对应结果都为1,结果为1,否则为0
-按位或 | 对应结果都为0,结果为0,否则为1
-左移位运算<<
-右移位运算>>
2.8.6 运算符的优先级

3.2.1 对象的布尔值

双分支结构

多分支结构:

嵌套if的使用:

语句什么都不做,只是一个占位符,用在语法上需要语句的地方

- 用于生成一个整数序列
- 创建range的三种方式 -range(stop) -range(start,stop) -range(start,stop,step)


注意:不管range对象标识的整数序列有多长,所有range对象占用的内存空间都是相同的,至于再用到range对象的时候才会计算序列中的相关元素
循环的分类
3.5.1 while循环

例题,计算累加和


3.5.2 for -in循环
格式
for 自定义的变量 in 可迭代对象:
循环体


如果再循环体内不需要自定义变量,可用”_“代替


水仙花数:

3.5.3 break语句与continue语句
break指一旦满足条件,立刻退出循环结构,例如:

cotinue语句指当满足现有条件时,退出当前循环,进行下一循环,例如:
打印5的倍数

3.5.4 else语句的搭配
-和if搭配,if…else…
-和for循环&while循环搭配
例如:

3.5.5 嵌套循环
打印矩形:

打印直角三角形:

3.5.6 break和continue的复杂循环用法
break有两层嵌套的时候

continue有两层嵌套的时候:

1.变量可以存储一个元素,而列表可以存储许多个元素
2.列表相当于其他语言中的数组
3.列表的特点:
-列表元素按顺序有序排列
-索引映射唯一一个数据
-列表可以存重复数据
-任意数据类型混存
-根据需要动态分配和回收内存

列表的详解

-正向索引从0 ~ N-1
-逆向索引从-N ~ -1
-索引不存在,则会抛出Index Error

index()函数
注意1: 如果列表中存在n个相同元素,只返回相同元素中的第一个索引

注意2:如果查询的元素在列表中不存在,则会抛出ValueError

注意3:还可以在指定的start和stop之间进行查找
1.语法格式
列表名[ start: stop: step]
2.注意
1)切片范围[ start, stop]
2) step默认为1
3)step为正数,
[ :stop:step] 切片的第一个元素默认是列表的第一个元素 [start::step] 切片的最后一个元素默认是列表的最后一个元素
4)step为负数,
[:stop:step] 切片的第一个元素默认是列表的最后一个元素 [start::step] 切片的最后一个元素默认是列表的第一个元素
5)切出来的切片为新的列表对象
例1,切出来的切片为新的列表对象,因为id不一样了

例2.

1.判断
in 与 not in

2.遍历

4.5.1 列表元素的添加
1.列表元素末尾增加一个元素
list.append(添加元素)

2.在列表末尾至少添加一个元素
list.extend()

3. 在任意一个位置上添加一个元素
list.insert(插入位置,插入元素)
切片:在列表的任意位置上添加N多个元素

4.5.2 列表元素的删除操作
从列表中移除一个元素,如果有重复元素只移第一个,元素不存在则抛出ValueError

2.pop()
-根据索引移除元素
-如果指定的索引位置不存在将抛出异常
-如果不写索引值,默认删除最后一个元素

3.切片
删除至少一个元素,但是将产生新的列表对象

4.clear()与del
清空列表中的所有元素

del直接删除列表
下图中,列表直接不存在了

4.5.3 列表元素的修改操作
-为指定索引的元素赋予一个新值
-为指定切片赋予一个新值

4.5.4 列表元素的排序
list.sort() 或者list.sort(reverse=True)进行升序排序
list.sort(reverse=False)进行降序排序
这种方法不会产生新的列表元素
-------------------------------------------------------------------------------内置函数sorted()对列表进行排序时会产生新的列表元素
sorted(list)升序排序
sorted(list,reverse=True)降序排序
list.sort()用法

sorted用法

4.5.5 列表生成式

1)python内置的数据结构之一,与列表一样是一个可变序列
2)以键值对的方式存储数据,字典是一个无序的序列 例如:scores={‘张三’:100,‘李四’:56}
3)元素按照关键值的hash值排序,与放进来的顺序无关
5.2.1 字典的创建
- 最常用的方式:使用花括号,如: scores={‘张三’:100,‘李四’:98,‘王五’:45}
- 使用内置函数dict()

5.2.2 字典元素的获取
-使用[]获取元素
-使用get()方法获取元素

5.2.3 字典元素其他操作
1)key的判断
in / not in

2) 字典元素的删除
-del 删除指定的key-value对
-clear()清空字典的元素

3)新增字典元素

4)获取字典视图
- keys() 获取字典关键值
- values() 获取字典中所有
- items() 获取字典中所有key,value对


5)字典的遍历
for item in scores:
// 获取key值
…print(item)
//获取字典元素的value值
print(scores[item]) 或者
print(scores.get(item))
- 字典当中的所有元素都是一个key-value对,key不允许重复,value可以重复
- 字典中的元素是无序的
- 字典中的key必须是不可变对象(比如list可变就不能使用)
- 字典也可以根据需要动态的伸缩
- 字典hi浪费较大的内存,是一种使用空间换时间
生成过程:

所使用的函数:
内置函数zip() 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回这些元组组成的列表

ps:按元素少的那个部分来压缩成字典
python内置的数据结构之一,是一个不可变序列
ps:
不变可变序列——没有增、删、改的操作,如:字符串,元组
可变序列——可以进行增、删、改操作,对象地址不发生改变,如:列表、字典
-直接小括号
-使用内置函数tuple()
-只包含一个元组的元素需要使用逗号和小括号,如: t =(10, )

ps:如果元组中只有一个元素,逗号不能省略

**空元组的创建方式

元组中存储的是对象的引用 a)如果元组中的对象本身是不可变对象,则不能再引用其他对象
b)如果元组中的对象是可变对象,则可变对象的引用不允许改变,但数据可以改变,比如:元组中元素存在list,list不可以变为100,但是100可以添加到list中,示例如下:

正常情况

将100插入到t[1]
不允许直接插入,报错如下:

正确插入方法:

-已知元组中元素个数的时候,可以使用索引
-for…in遍历
1)python内置的数据结构
2)与列表、字典一样都属于可变类型的序列
3)集合是没有value的字典,只有key

1.使用{},集合中的元素不允许重复,如果重复打印的时候默认输出一个
2.使用内置函数set()

3.定义空集合
1)不可以使用 {} 直接定义空集合!!!因为 {}是字典类型
2)直接用set()函数定义

1.集合元素的判断 in or not in
2.集合的新增元素
调用add() 一次添加一个集合元素
调用update() 一次至少添加一个元素

3.集合元素的删除操作
-调用remove(),一次删除一个指定元素,如果指定元素不存在抛出KeyError
-调用discard(),一次删除一个指定元素,如果指定元素不存在不抛出KeyError
-调用pop(),一次只删除一个任意元素,注意,pop()函数不存在参数,因此括号里只能为空
-调用clear(),清空集合

1.判断是否相等 ==或者!=
注意:集合是无序的,不管两个集合中的元素排列顺序是否一样,只要元素一致就说明两个集合相等
2.判断一个集合是否是另一个集合的子集
调用issubset方法
3.判断一个集合是否是另外一个集合的超集
调用issuperset方法
4.判断两个集合有无交集
调用isdisjoint方法,有交集结果为false,没有交集结果为true!!
# 判断两个集合是否相等 s1={10,20,30,40,100,500} s2={30,20,10,100,40,500} print(s1==s2) print(s1!=s2) # 判断一个集合是否是另一个集合的子集 s1={10,20,30,40,100,500} s2={30,20,100,40,500} s3={10,20} s4={1,2,3} print(s2.issubset(s1)) print(s3.issubset(s1)) # 判断一个集合是否是另一个集合的超集 print(s1.issuperset(s2)) print(s1.issuperset(s3)) # 判断两个集合有无交集,没有交集为true,有交集为false print(s3.isdisjoint(s1)) print(s4.isdisjoint(s3))
结果:

1.取交集
-调用intersection函数
-用&符号

2.取并集
-调用union()函数
-使用或 | 符号
3.取差集(s1减去s1与s2相交的部分)
-调用difference()函数
-用减号表示

4.对称差集
调用symmetric_difference()函数

为便于理解,见下图:

1.用于生成集合的公式


Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。

驻留机制的几种情况(交互模式):
字符串的长度为0或1时

符合标识符的字符串
例子:因为abc%不是标准的标识符(字母、数字、下划线组成),所以没有驻留机制
例2:因为s1和s2是合法的标识符,所以产生驻留机制
字符串只在编译时进行驻留,而非运行时

[-5,256]之间的整数数字

ps:pycharm进行了优化处理,所以驻留机制失效
7.2.1 查询操作的方法
1.查询方法

7.2.2 字符串的大小写转换操作
- upper() 把字符串中所有字符转换成大写字母
- lower() 把字符串中所有字符转换成小写字母
- swapcase() 把字符串中所有小写字母转换成大写字母,把字符串中所有大写字母转换成小写字母
- capitalize() 把第一个字符转换成大写,把其余字符转换成小写
- title() 把每个单词的第一个字符转换为大写,把每个单词的其余字符转换为小写

7.2.3 字符串内容对齐操作的方法
- center() 居中对齐
- ljust() 左对齐
- rjust() 右对齐
- zfill() 右对齐,左边用0填充

7.2.4 字符串的劈分
- split() 从字符串的左边开始劈分、sep指定劈分字符串的劈分符,maxsplit指定劈分字符串时的劈分符
- rsplit() 从字符串的右边开始劈分、sep指定劈分字符串的劈分符,maxsplit指定劈分字符串时的劈分符

7.2.5 字符串的判断
- isidentifier() 判断是否是合法的标识符
- isspace() 指定的字符串是否全部由空白字符组成
- isalpha() 指定的标识符是否全部由字母组成
- isdecimal() 判断指定的标识符是否全部由十进制数字组成
- isnumeric() 判断指定的字符串是否全部由数字组成
- isalnum() 判断指定的字符串是否全部由字母和数字组成

7.2.6 字符串的替换

运算符:>,>=,<,<=,==,!=
比较规则:先比第一个,相等再比dirge,依次类推
比较原理:比较的是ordinal value(原始值),调用内置函数ord可以得到
ps: ==与is的区别
== 比较的是value is 比较的是id是否相等

字符串是不可变类型,不具备增删改操作,切片操作将产生新的对象

格式化字符串的两种方式:
- %做占位符
- {}做占位符
- f-string


1.为什么需要字符串的编码转换?

2.编码与解码
编码:将字符串转换为二进制数据(bytes)
解码:将bytes类型的数据转换成字符串类型



- 如果是不可变对象,在函数体的修改不会影响实参的值,arg1的修改为100,不会影响n1的值
- 如果是可变对象,在函数体的修改会影响到实参的值,arg2的修改为append(10),会影响到n2的值

函数的返回值
(1)如果函数没有返回值,return可以省略不写
(2)函数的返回值可以是一个,直接返回原数据类型
(3)函数的返回值如果是多个,结果是元组
没有返回值和返回值为一个:

函数的返回值有多个,返回元组类型:

1.个数可变的位置参数
定义函数时,如果无法实现确定位置实参的个数,括号里加 “*”变成fun(*args),输出结果为一个“元组”,个数可变的位置参数只能为一个
例子1:

例子2:

2.个数可变的关键字形参
例子1:

例子2:

3.注意
一个函数定义的过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求,位置形参放在关键字形参之前!!

例子1:

例子2:斐波那契函数
0、1、1、2、3、5、8、13、21、34、……
F(0)=0,
F(1)=1,
F(n)=F(n - 1)+F(n - 2)(n ≥2,n ∈ N*)

2. try…except…else…finally结构
** finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源

3.常见的异常类型

3. traceback包


class Student:
内容
类名—默认规则为由一个或多个打你组成,每个单词的首字母大写,其余小写

- 类属性
- 实例方法
- 静态方法
- 类方法
定义一个标准的学生类:

1.格式:
实例名=类名()
例如:stu=Student()

2.调用方法的两种方式:
- 对象名.方法名()
- 类名.方法名(类的对象)

3.类属性,类方法和静态方法


0.动态绑定与静态绑定
- 静态绑定: 在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由 编译器或其它连接程序实现。
- 动态绑定: 后期绑定: 在运行时根据具体对象的类型进行绑定。
简单理解就是比如Student类中已经规定属性home=‘东北’,那所有新创建的对象stu1,stu2…stuN的home属性就都是东北,这个属于静态绑定。
但是,如果Student类中没有规定gender属性,而单纯想给一个新创建的对象stu2添加gender属性,这个属于动态绑定
1.一个Student类可以创建N多个Student类的实例对象,每个实体对象的属性值不同。


2.python是动态语言,在创建对象之后,可以动态的绑定属性和方法
例子1.动态绑定属性

例子2.动态绑定方法

将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行类对象的外部调用方法。这样,无需关心方法内部的具体实现细节,从而降低复杂度
在python中没有专门的修饰用于属性的私有,如果该属性不希望再类对象外部被访问,前边使用两个’_‘
10.7.1 封装性的例子:

例子:使用两个’_‘对禁止类的属性被外部使用
解决方法:

10.7.2 继承
1.基础了解
1)语法格式
class 子类类名(父类1,父类2…):
pass
2)如果一个类没有继承任何类,则默认继承object
3)python 支持多继承
4)定义子类时,必须在其构造函数中调用父类的构造函数
2.例子
例子:Person是父类,Student与Teacher都是子类继承父类

Student与Teacher继承Person类,Person类又继承Object类

例子:

多继承的理解

3.Object类
例子中可以看到默认的Object类的属性

原始数据:

后来通过str改写

10.7.3 多态
多态就是拥有多种形态,即便不知道一个变量所引用的对象是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用的对象类型,动态决定调用哪个对象中的方法
Java静态语言实现多态的三个必要条件
- 继承
- 方法重写
- 父类引用指向子类对象
python是动态语言,与java不同
例子:


1.概述

2.特殊属性
__dict__应用

__class __ 输出对象所属的类

其他特殊属性

3.特殊方法
1.add
1)add简单实例

2)字符串之间的相加
刚开始不能直接相加

使用add特殊方法之后

2.len
普通用法

求字符串的长度

3.创建对象的特殊方法 new与init

传参方式

1.变量的赋值操作
只是形成两个变量,实际上还是指向同一个对象


2.类的浅拷贝
Python拷贝一般是浅拷贝,拷贝是,对象包含的子对象内容不拷贝,因此,元对象与拷贝对象会引用同一个子对象

3.类的深拷贝
使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象、源对象和拷贝对象左右的子对象也不相同

1.一个保重可以包含N多个模块,一个模块中可以包含N多个模块,也可以包含N多个类和语句,这些模块组合在一起就成了python程序
2.在python中一个拓展名为.py的文件就是一个模块
理解图

1.格式
import 模块名称 [as 别名]
from 模块名称 import 函数/变量/类
例子1.

例子2.

2.如何导入自定义模块
step1.自定义一个模块calc

step2.找到需要导入模块的那个文件,右键选择Make Directory as——Sources Root

step 3.直接导入

1.包与目录的区别
2.包的导入
import 包名.模块名
示例:
step1.
新建一个package,在package里新建一个模块
结果如下:

step2.
在main.py中导入包

3.注意事项
i. 使用import方式导入的时候,只能跟包名或者模块名
即:
import package
import module
ii. 使用from…import可以导入包,模块,函数,变量
from package1 import module_A
from package1.module_A import a

使用案例

1.安装
打开dos窗口,输入:
pip install 模块名

1.文件的读写俗称“IO”操作
2.原理

3.文件操作流程

4.语法规则
file=open(filename [ ,mode,encoding])

5.常用的文件打开模式

例子:运行该文件时分别打开了win10系统上的记事本,计算器和迅雷软件

os模块操作目录相关函数




总体业务流程


def main(): while True: menm() choice=int(input('请选择:')) if choice in [0,1,2,3,4,5,6,7]: if choice==0: answer=input('您确定退出系统吗?y/n') if answer=='y': print('谢谢您的使用') break else: continue elif choice==1: insert() elif choice==2: search() elif choice==3: delete() elif choice==4: modify() elif choice==5: sort() elif choice==6: total() elif choice==7: show() def menm(): print('===============学生信息管理系统================') print('--------------------功能菜单------------------') print('\t\t\t\t 1.录入学生信息') print('\t\t\t\t 2.查找学生信息') print('\t\t\t\t 3.删除学生信息') print('\t\t\t\t 4.修改学生信息') print('\t\t\t\t 5.排序') print('\t\t\t\t 6.统计学生总人数') print('\t\t\t\t 7.显示所有学生信息') print('\t\t\t\t 0.退出系统') def insert(): pass def search(): pass def delete(): pass def modify(): pass def sort(): pass def total(): pass def show(): pass if __name__=='__main__': main()

def insert(): student_list=[] while True: id=input('请输入学生id:') if not id: break name=input('请输入姓名:') if not name: break try: english=int(input('请输入英语成绩:')) java=int(input('请输入Java成绩:')) python=int(input('请输入python成绩:')) except: print('输入无效,不是整数类型,请重新输入') continue # 将录入的学生信息保存在字典里 student={'id':id,'name':name,'english':english,'java':java,'python':python} # 将学生信息添加到列表当中 student_list.append(student)






1. pip点击安装失败,显示Fatal error in launcher: Unable to create process using。。。

检查:
1)环境变量配置问题
2)使用python -m pip或者其他命令解决
import无法导入问题,我人傻了
解决
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。