自学Python-2

计算机语言:

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、只能往后取值,不能倒着取

你可能感兴趣的:(自学Python-2)