计算机语言:
C C++ C# Java Python
Python历史:
创始人:吉多
人工智能:带动Python火起来
Python能干什么:
测试、运维、后端、数据分析、人工智能等
Python版本:
3.x
2.x
Python优点和缺点
优点:简单、适合小白学习
缺点:效率没有上面说的语言高
公司:
豆瓣
知乎
Python社区:
Django框架、Flask框架
print() #打印、输出功能
注释
单行注释
多行注释
注释作用
运算符 + - * / // ** %
常见的Bug解决
代码风格
作业:
1、计算6除以4的余数
2、输出I love Python 并加上注释
变量
用来装数据的
命名 起的有意义
驼峰式
大驼峰
小驼峰
下划线也是可以的
变量类型:整数、浮点数、字符串、布尔、复数
作业:
1、尽可能描述你的个人信息用变量,然后打印出来。
2、用变量声明西瓜的价格和斤数然后算出总价
3、用变量描述一个王者英雄的信息,然后想一下能不能一个print()打印出来
类型转换:
bool float int str
不是数字类型的字符串不能转整数
非零即真
字符串之间不能相乘 但是能相加
用type方法来查看变量类型
输入与输出
input输入进来的都是字符串 做计算的时候要转成相应的类型
format或者%d %s %f
作业:
1、请输入数字10,最终格式化打印10%
2、请输入狄仁杰的一些信息,并格式化打印
条件语句
if 条件表达式:
代码块
作业:
1、请输入一个节日,假如是情人节,就输出烛光晚餐
else语句
pass
elif语句:
2、 请输入第一个数字、请输入第二个数字 请输入+-*/运算符,根据输入运算符计算出相应的结果
逻辑运算符
and 多个条件并且的关系
or 多个条件是或者的关系
not 取反
3、请计算输入的一个数字是否是偶数还是奇数
4、算一下输入的年份是闰年还是平年
若某个年份能被4整除但不能被100整除,则是闰年。
若某个年份能被400整除,则也是闰
5、逻辑运算符
从控制台输入要出的拳 —— 石头(1)/剪刀(2)/布(3)
电脑 随机 出拳 ——
比较胜负
6、elif
小明身高1.75,体重80.5。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数:
低于18.5:过轻
18.5-25:正常
25-28:过重
28-32:肥胖
高于32:严重肥胖
7、 条件嵌套
去银行取钱
定义一个变量账号
定义一个变量密码
定义一个变量金额
输入账号
输入密码
假如账号和密码是对的
就可以开始取钱了
请输入取钱金额
假如里面的金额不够、就提示没钱取毛线
如果够 就告诉取了多少钱 还剩多钱
如果账号密码不对
提示非法账户
循环语句
赋值运算符 += *= -= //= **= %= /=
死循环
如何让循环条件不满足
1、把1-100之间的数字打印出来
2、第二题把1-100之间偶数打印出来
3、把石头剪刀布改成能玩3把的程序
4、把1-100之间的和求出来
5、先定义一个数字(随机数)、请输入一个数字,判断你输入的数字是否是大于、小于、等于。如果等于结束了
6、把1-100之间的偶数和求出来 或者偶数的积
7、先定义一个数字(随机数)请输入一个数字,判断你输入的数字是否是大于、小于、等于。如果等于结束了。记录猜的次数
如果1次猜对 王者
如果2-5次猜对 钻石
如果6-10猜对 星耀
如果大于10次 白铁
8、算下1-2+3-4+5-6+....+99等于多少
\n 换行的功能
9、
*
* *
* * *
* * * *
* * * * *
10、
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
break有终止循环的作用
continue 有跳过当次循环,进行下一次循环
for 循环一般跟range方法用,range方法里面有三个参数
第一个参数:起始值
第二个参数:终止值(遍历的时候不包括终止值)
第三个参数:步长(默认是1 ,可以负数)
11、求所有1-100之间奇数的和
12、打印 10,9,8 。。。。。。1
13、用for打印一下乘法口诀表
列表:有顺序的数据结构
append extend insert 不同
pop remove del 不同
1、通过for循环往列表里面添加1-100之间奇数
2、把2-100之间的质数(只能被1和本身整除的数叫质数)加到列表当中
3、l = [1,2,2,3,4,5,1] 去掉重复的元素
4、l = [[1,2],[3,4],[5,6]] 把遍历打印出来
字典:一种键值对并且没有顺序的数据结构
姓名:老王
出生年月:1992.07.02
性别:男
地址:嘻嘻嘻嘻嘻嘻
键值对
能当做字典的键:字符串、整数、浮点数、布尔、元组
不能当做字典的键:列表、字典
1、在字典加入3对个人信息,以输入的方式
l = [{},{},{}]
2、用到循环、列表、字典、条件语句
增加个人信息、修改个人信息、 查找个人信息、删除个人信息
请选择功能:
1、增加个人信息
请输入名字
请输入年龄
请输入性别
2、查找个人信息
3、修改个人信息
4、删除个人信息
元组:有顺序的数据结构
元组跟列表类似,就是定义完不能改变 ,但是可以查找、遍历
可变和不可变
可变:列表、字典、集合(set)
不可变:字符串、整数、浮点数、布尔值、元组
可变类型数据:当数据发生改变的时候,地址不发生改变
不可变类型数据局:当数据发生改变的时候,地址发生改变
集合:集合没有重复元素并且没有顺序的数据结构
注意事项:
1、当元组只有一个元素的时候要加逗号
2、当创建空集合的时候需要用到set
3、字典的键不能用可变类型数据
作业:商店管理系统
1、录入产品
2、查找商品
3、修改商品
4、下架商品
5、列出所有商品信息
6、退出系统
函数
函数是一系列语句的集合.
作用:让代码可读性更高,实现代码复用
作业:
定义计算器函数,这个函数 第一个数字,第二个数字,第三个+-*/ 第三个参数是默认参数是+
参数:
必须参数
关键字参数
默认参数
可变参数
组合参数
作业:
声明一个函数,计算这些参数的和
add(1, 2, 3, 4, 5, 6, 7, 8, 9, a=1, b=2, c=2)
作业:把个人信息管理系统改成函数版
全局变量:整个py文件任何地方都可以调用
局部变量:只有在函数内部有效
****在函数内部要修改全局变量的时候,一定要声明global
返回值和print方法不太理解
print的功能只是把变量打印到控制台上
没必要关心函数内部是怎么实现的,但是当调用改函数的时候,这个函数会返回我的想要的结果,接下来你对这个结果可以做任何操作
return 有返回值的功能 并且结束函数的功能 支持返回多个值,多个值得是元组
函数默认的返回值None
递归函数
函数调用自己
函数一定终止条件
6!= 6*5*4*3*2*1
匿名函数就是没有名字的函数,匿名函数只能有一个式子
匿名函数只能计算一些简单的操作、复杂的操作请普通函数
面向对象 是一种编程思想
类:具有相同属性或者相同行为的一类事物 就叫类 类是抽象的
对象:对象是类的具体实例 对象真实存在的
世界万物都是对象的
车类---->面包车---->
属性
行为
run 面包车.run()
__init__方法会在创建对象的时候自动执行
self指的对象本身
__str__ 返回什么值 打印对象的时候就会打印什么值
房间类
属性:
行为:
把以前的名片系统改成面向对象版本
士兵突击
枪类
装子弹
开火
士兵
开枪
属性和方法 你不能直接调用 这个属性就是私有属性 私有方法
我们利用公有方法 可以对私有属性的值进行校验
私有属性 可以避免子类直接访问 和名字冲突问题
私有方法,可以避免直接被调用,也影响子类调用
类属性就是全局变量
实例属性
对象的属性
类属性
定义类的属性,有全局的含义
私有实例属性
不想让外部直接访问,不想让外部访问,可以把属性定于私有的
私有类属性
不想让外部直接访问,不想让外部访问,可以把属性定于私有的
公有类属性支持类和对象直接调用
静态方法 不引用类属性、或者实例属性、实例方法、它是独立的个体
@staticmethod修饰的方法叫静态方法 静态方法里面不能写self,但是可以写参数
静态支持类或对象直接调用
类方法 @classmethod 修饰的, 可以访问类属性
类方法跟静态方法的区别是 一个可以访问类属性、一个不能访问类属性
属性方法 把一个可以当做属性调用
面向对象的三大特性
封装
1、把属性封装到对象当中,方便调用
2、把相同的功能封装同一方法当中,方便调用
继承
python顶级父类是object
如果不同类中有相同的行为或者属性,这个时候我们就要考虑到用继承
减少代码,实现代码复用
继承具有传递性
当父类的行为满足不了子类的行为的时候,我们就需要重写
super().xxxx 在合适的地方可以调用父类方法
私有属性和私有方法 是继承不过来的
在python3当中 继承是广度继承
在python2当中 类你不写object 是深度继承
在python2当中 类写object就是广度继承
教练员:
篮球教练员:
属性
名字
年龄
行为
吃饭
可以教人打篮球
足球教练员
属性
名字
年龄
行为:
吃饭
睡觉
可以教人踢足球
手机:
华为手机:
属性:
型号
颜色
大小
行为:
打电话
看视频
苹果手机
属性:
型号
颜色
行为:
打电话
isinstance 可以判断一个对象是否某个类的实例
isinstance(对象,类)
多态
同一种事务 具有多种形态
多态的前提继承和重写
调用同一种行为 产生了不同的结果
单例模式
不管你创建多少个对象,我们在内存中只有唯一的一个对象
前部分 学的是解决问题的逻辑
后部分 学的是解决问题的思想
文件操作
r 只读 文件不存在报错
w 写文件 如果文件不存在,就创建新文件,如果文件已存在,则覆盖文件
a 追加
rb 二进制读
wb 二进制写 音乐、视频、流媒体资源、图片
ab 二进制追加
r+ 读写 文件不存在依然报错
w+ 读写
a+ 追加读写
rb+ 二进制读写
wb+ 二进制读写
ab+ 二进制追加读写
open(文件路径, 模式)
wrire()写
read(num) 读
readline()
readlines()读多行
os.chdir('../') # 往后退一步 有切换路径的作用
批量重命名
1.py---> 1-1.py
2.py---> 2-1.py
3.py---> 3-1.py
4.py---> 4-1.py
重命名 遇到的问题
1、切换路径
2、文件写成绝对路径
try
代码
except xxxx
在有可能会出现异常的地方 才加上try except
当没有异常的时候 会走else语法
不管有没有异常 finally 都会执行
异常具有传递性
如果python异常满足不了我们,我们就可以自定义异常。要继承exception
ctrl+t 改名
ctrl+alt+l 格式化代码
.代表当前
* 不推荐使用
如果是* 不知道函数是来自哪个模块
如果用* 如果模块中有重复的函数的名字,后面导入会覆盖前面导入的
from tools import add,jian # 相当于把工具箱里面的用到工具拿过来
from tools import * # 相当于把工具箱里面的所有工具拿过来
import tools # 相当于把工具箱拿过来
模块中的__all__ 会影响 from tools import *
__all__只有定义了 才回让 from tools import * 导入
__name__ 当自己运行的时候 返回的值是__main__
当被当做模块调用的时候,返回的值模块的名字
多个相同功能的模块,放在同一个文件夹下,并且拥用__init__.py 这个文件夹 叫包
包中的__init__
1、声明文件夹是个包
2、可以做初始化操作
3、可以声明__all__ 影响 from 包 import * 导入
列表推导式就简化代码,阅读性会复杂
代码上下调 ctrl+shift+上下
字典推导式
集合推导式
生成器(Generator):一遍循环一遍计算来生成想要的数字
L= [0,2,4,6,8,10........]
把列表推导式换成小括号
用next(g)或者g.__next__()
当函数里面有yield关键字的时候,那这个函数就是生成器,不是函数了。
可以通过send()传值的
第一次启动生成器用send 必须得传值,传值又没人接收
著名斐波那契数列可以通过生成器来做
迭代器
可迭代器对象:能用for遍历的哪些数据
list、dict 、tuple、str
迭代器:能用next()方法叫迭代器
生成器是一个特殊的迭代器,还是可迭代对象
把可迭代器对象 变成迭代器 用iter
Iterable:可迭代对象
Iterator:迭代器
优点:
1、迭代器惰性计算、节省内存
2、迭代器不依赖索引,可以没有索引的对象,字典、集合
缺点:
1、无法获取迭代器长度,
2、只能往后取值,不能倒着取