Markdown语法:Typora工具
- 标题:
# 内容
,一级标题 - 引用:
> 内容
- 无序列表:
- 内容
,Tab键嵌套 - 有序列表:
1. 内容
- 代码:三个`
- 图片:
![](图片路径)
- 指定图片路径:
# 安装typora
https://www.ittel.cn/archives/10903.html
001 计算机基础和环境搭建
1、计算机基础
-
计算机组成:硬件、软件
-
操作系统:
-
windows,优点:生态牛逼、工具多;缺点:略慢、收费。【个人的电脑】
-
linux,优点:资源占用少、免费;缺点:工具少、告别游戏。【企业的服务器】
-
mac,优点:生态还行、工具差不多都有、用户体验和交互; 缺点:不能玩游戏
-
-
软件(应用程序):程序员开发的一大堆代码
-
编程语言:软件,是由程序员使用“编程语言”开发出来的一大堆代码的集合。
-
解释器(实时翻译)、编译器(全文翻译、目标程序)
- 编译器、解释器,就是一个
翻译官
,将代码翻译成计算机能够识别的命令。
- 编译器、解释器,就是一个
2、学习编程的本质(三件事)
- 选择语言:选择一门编程语言,在自己的电脑上安装此编程语言相关的编译器/解释器。
- 编写代码:学习编程语言的语法规则,根据语法规则 + 业务背景,设计并开发你的软件(代码集合)。
- 运行代码:使用“编译器、解释器” 去运行自己写的代码。
3、编程语言
- 语言分类
- 翻译:解释型(python)、编译型(C)
- 高低:低级语言(机器、汇编)、高级语言(python、C、java)
- python火爆原因
- 语法简洁 、 适合小白学习
- 类库强大
- 开发效率极高
- Python的解释器
- CPython【主流】:底层是由C语言开发出来的Python解释器。
- IPython、Jython、PyPy、IronPython、RubyPython
- CPython解释器的版本
- 2.x,目前最新的Python2.7.18。(2020后不再维护)
- 3.x,目前最新的3.9.0版本。
4、环境搭建
-
安装Python解释器:python3.9
- 终端运行:在终端输入“解释器路径 代码路径”
- 配置环境变量:方便在任意目录下调用解释器
-
安装Pycharm编辑器
https://www.python.org/downloads/release/python-390/
https://www.jetbrains.com/pycharm/download/other.html
002 快速上手
1、编码(密码本)
- 编码:自然语言和机器语言之间的映射
- 常见:ascii、unicode、utf-8、gbk、…
- 注意:文件保存和打开时的编码要保持一致,否则会乱码。
2、print输出
- 默认print在尾部会加换行符“/n”
- 想要不换行,可以使用end=“”
3、数据类型
- 整型(int):支持加、减、乘、除、取余、指数等操作
- 字符串(str):单行(" “)、多行(”“” “”");加(拼接)、乘(重复)
- 布尔型(bool):True 、 False
4、类型转换(创建新值)
- 转换为整形:int(…)
- 转换为字符串:str(…)
- 转换为布尔型:bool(…)
5、变量
- 创建并赋值:name = “ssc”
- 变量名的命名规范:组成开头关键字,见名知意下划线。
- 只能由“字母、数字、下划线”组成
- 不能以数字开头
- 不能用Python内置的关键字
- 下划线连接(小写)
- 见名知意
- 变量的内存指向
6、注释
- 单行:#
- 多行:“”" “”"
7、输入
- 格式:name = input(“请输入用户名:”)
- 注意:用户输入的任何内容本质上都是字符串类型。
8、if条件语句
- 单分支、双分支、多分支
- 嵌套
003 Python基础
1、循环语句
- while 循环(次数不确定)
- 循环控制变量:break(跳出本层循环)、continue(跳过本次循环)
- while else:当while后的条件不成立时,else中的代码就会执行。(若执行了break,则else不执行)
2、字符串格式化
-
字符串格式化,以更便捷的形式实现字符串的拼接。
-
%
- text = “我叫%s” % “ssc”
- text = “我叫%s,今年%d岁” % (name, age):位置传参(一一对应)
- message = “%(name)s过来呀,%(user)s今天不在。” % {“name”: “死鬼”, “user”: “ssc”}:关键字传参(顺序可乱)
- 输出 %(转义):80%%
-
format
- text = “我叫{}”.format(“ssc”)
- text = “我叫{},今年{}岁”.format(“ssc”,18):位置传参(一一对应)
- text = “我叫{0},今年{1}岁”.format(“ssc”,18):序号传参(可复用)
- text = “我叫{n1},今年{age}岁,真名是{n1}。”.format(n1=“ssc”, age=18):关键字传参(顺序可乱)
-
f:Python3.6版本,可分行,更便捷。(推荐)
-
name = “喵喵”
age = 19
text = f"嫂子的名字叫{name},今年{age}岁" -
v2 = f"嫂子今年{22:#b}岁"
print(v2) # 二进制:0b10110v3 = f"嫂子今年{22:#o}岁"
print(v3) # 八进制:0o26v4 = f"嫂子今年{22:#x}岁"
print(v4) # 十六进制:0x16
-
3、运算符
- 常见的运算符
- 算数运算符
- 比较运算符
- 赋值运算符
- 成员运算符
- 逻辑运算符
- 运算符优先级
- 先算数,后比较,非与或
- 绝招:加括号
- 面试题
- A and B:A真看B
- A or B:A假看B
- 如果遇到多个and 和or的情况,先计算and再计算or
004 进制和编码
1、Python代码运行方式
- 脚本式(文件:长久保存):解释器路径 源码路径
- 交互式(终端:临时保存)
2、进制
- 计算机中底层所有的数据都是以
010101
的形式存在(图片、文本、视频等)。 - 进制转换
- 十进制转其他
- 转二进制:bin( )
- 转八进制:oct( )
- 转十六进制:hex( )
- 其他转十进制
- 二进制:int(“0b11001”, base=2)
- 八进制:int(“0o27”, base=8)
- 十六进制:int(“0x1c”, base=16)
- 十进制转其他
3、计算机中的单位
- b(bit),位
- B(byte),字节
- KB(kilobyte),千字节
- M(Megabyte),兆
- G(Gigabyte),千兆
- T(Terabyte),万亿字节
- …
4、编码
- **ascii编码:ascii码规定使用1个字节来表示字母与二进制的对应关系,共计2方 = 256。
- **gbk编码:**中日韩等亚洲国家的文字编码;单字节、双字节(1个汉字对应2个字节)
- **unicode万国码:**全球文字;ucs2(2字节)、ucs4(4字节);浪费空间、在内存中使用
- utf-8编码:
- 包含所有文字和二进制的对应关系,全球应用最为广泛(1个汉字对应3个字节)
- 本质上是对unicode的压缩,用尽量少的二进制去与文字进行对应。(文件存储、网络传输)
- Python中的编码与解码:
- 字符串(str) “ssc媳妇叫铁锤” unicode处理 一般用于内存
字节(byte) b"sscfdsfdsdfskd" utf-8编码 or gbk编码 一般用于文件存储、网络传输 - 字符串转换为字节类型(编码):data = name.encode(“utf-8”)
- 字节转换为字符串类型(解码):text = data.decode(“utf-8”)
- 字符串(str) “ssc媳妇叫铁锤” unicode处理 一般用于内存
005 数据类型(上)
1、整型(int)
- 定义:number = 10
- 功能:加减乘除
- 转换:int( )
- 长整型(long):python3已弃用
- 地板除:
- 2.x:print(9/2) # 4
- 3.x:print(9/2) # 4.5
2、布尔型(bool)
- 定义:data = False
- 转换:整数0、空字符串、空列表、空元组、空字典转换为布尔值时均为False
- 如果在 if、while 后面写一个值当做条件时,会默认转换为布尔类型,然后再做条件判断。
3、字符串(str)
- 定义:name = “sxk”
- 个性:
- 开头:str.startswith()
- 结尾:str.endswith()
- 判断十进制:str.isdecimal()
- 判断整型(数字、序号):str.isdigit()
- 移除字符串两边指定的字符 :str.strip()两边、str.lstrip()左边、str.rstrip()右边
- 大写:str.upper()
- 小写:str.lower()
- 替换:str.replace(“原文”,“替换”)
- 切割(列表 ):str.split(“切割符”,切割次数)、str.lsplit()左边、str.rsplit()右边
- 拼接:str1 = “拼接符”.join(拼接对象)
- 格式化:str1 = str.format()
- 字符串转字节(编码):data = str.encode(“utf-8”)
- 字节转字符串(解码):str = data.decode(“utf-8”)
- 个性展示:
- 居中:str.center(20, ‘*’)
- 居左:str.ljust(20, ‘*’)
- 居右:str.rjust(20, ‘*’)
- 左侧补0:str.zfill(10)
- 共性
- 拼接(加)
- 重复(乘)
- 长度:len(str)
- 索引取值(单个字符):str[]
- 范围切片(多个字符):str[起始:终止:步长]
- 倒序:str[-1: :-1]
- 循环取单个字符:
- while:索引、len()
- for:range、len()
- 转换:str()
- 字符串是不可变类型
006 数据类型(中)
1、列表(list)
-
定义:列表是一个有序且可变的容器,可以存放多种不同类型的元素;list = []
-
个性:
-
增加:
- 尾部追加一个元素:list.append()
- 批量追加一组元素:list.extend( [] )
- 指定位置插入元素:list.insert(索引, 元素)
-
删除:
-
删除首次出现元素:list.remove();找不到,会报错,先判断,无返回值
-
根据索引删除元素:
- list.pop() # 默认删除末尾元素
- item = list.pop(索引) # 删除指定元素,有返回值(删除的元素)
- del list[索引]
-
清空列表所有元素:list.clear()
-
-
按照元素获取索引:index = list.index();找不到,会报错
-
排序:list.sort() ,升序; list.sort(reverse=True),降序
-
反转:list.reverse()
-
-
共性:
-
拼接(加)
-
重复(乘)
-
成员:“ssc” in list
-
长度:len(list)
-
索引(单个元素):读改删
-
查看:list[索引]
-
修改:list[索引] = 新值
-
删除:
- list.remove(元素) # 直接删除元素、无返回值
- list.pop(索引) # 按照索引删除、有返回值
- del list[索引] # 按照索引删除、无返回值
- 注意:超出索引范围会报错。
-
切片(多个元素):读改删
-
查看:list[起始:终止]
- 修改:list[起始:终止] = 修改的列表 ; 超出前后范围就放最前最后
- 删除:del list[起始:终止]
-
步长:
-
查看:list[起始:终止:步长]
-
反转:
- list.reverse() # 改变原列表(对象.方法)
- list[::-1] # 得到新列表
-
for循环:
- 注意:循环时切忌边获取、边删除,会改变后面元素索引,导致跳过部分元素
- 解决:倒着删除,for index in range(len(user_list) - 1, -1, -1):
-
转换:list(字符串、元组、集合)
-
嵌套:增(append)删(del)改查
-
2、元组(tuple)
-
定义:元组是一个有序且不可变的容器,在里面可以存放多个不同类型的元素。tuple=(,)
-
不可变:我儿子永远不能换成是别人,但我儿子可以长大;
若元组的元素是可变类型,其值可变,但类型不变。
-
注意:在元组的最后多加一个逗号,用于标识它是一个元组。
-
共性
- 拼接(加)
- 重复(乘)
- 长度:len()
- 索引:一个,tup[0]
- 切片:多个,tup[0:2]
- 步长:个性多个,tup[1:4:2]
- 反转:
- 字符串、元组:步长
- str[-1: :-1]
- tup[::-1]
- 列表:
- 步长,list[::-1];
- reverse,list.reverse
- 字符串、元组:步长
- for循环:目前,只有 str、list、tuple 可以被for循环。
-
转换:tuple(),目前只有字符串、列表可以转换为元组。
-
嵌套:元组和列表都可以充当容器,其内部可以放很多元素,并且也支持元素内的各种嵌套。
007 数据类型(下)
1、集合(set)
-
定义:集合是一个 无序 、可变(元素不可变)、不允许数据重复的容器。
-
空:
- 空列表:v1 = []、v11 = list()
- 空元组:v2 = ()、v22 = tuple()
- 空集合:v3 = set()
- 空字典:v4 = {} 、v44 = dict()
- Python的None(其他语言的null)表示空时,节省内存
-
个性:
- 增加:set.add()
- 删除:set.discard()
- 交集:&、intersection
- 并集:|、union
- 差集:-
-
共性:
- -,计算差集
- &,计算交集
- |,计算并集
- 长度:len()
- for循环遍历
-
转换:set();int、str、list、tuple、dict都可以转换为集合。
-
集合的存储原理:
-
哈希函数
-
因存储原理,集合的元素必须是**可哈希(不可变类型)**的值;
即集合的元素只能是 int、float、bool、str、tuple 。
-
因存储原理特殊,集合的查找效率非常高
-
-
嵌套:子元素也要可哈希
2、字典(dict)
- 定义:字典是无序、键不重复 且元素只能是键值对的可变的容器。
- 键值对:键必须可哈希(不可变),值任意类型。
- 个性:
- 获取值:
- dict.get(键);键不存在,默认返回 None,可设置返回值(推荐使用)
- dict[键];键不存在,则报错(字典的索引是键,列表的索引是数字)
- 获取所有的键:dict.keys();Python3中返回的是高仿列表,它可以被循环显示。
- 获取所有的值:dict.values()
- 获取所有的键值:dict.items(),item是一个元组 (键,值)
- 设置值(新增没有的键值对):
- dict.setdefault(“age”, 18)
- 更新字典键值对:
- dict.update({“age”:14,“name”:“ssc”})
- 无键,直接添加;有键,则更新其值
- 移除指定键值对:dict.pop(“age”) # 返回删除的值
- 按照顺序移除(后进先出):dict.popitem() # 以元组形式返回删除的键值对
- 获取值:
- 共性
- |,求并集(Python3.9新加入)
- 长度:len(dict)
- 是否包含:in
- 键:“age” in info = “age” in info.keys()
- 值:“ssc” in info.values()
- 键值对:(“age”, 12) in info.items()
- 增删改查:
- 索引:通过键为索引去获取值时,键不存在会报错;get不会报错,返回None
- 新增:键不存在、setdefault
- 修改:键已存在、update
- 删除:del info[“age”];键不存在时会报错
- for循环:可以对其中的键、值、键值进行循环;
- 转换:dict( [ (“k1”, “v1”), [“k2”, “v2”] ] )
- 存储原理、速度快
- 嵌套:
- 字典的键必须可哈希(list、set、dict不可哈希)
- 字典的值可以是任意类型
- 字典的键和集合的元素在遇到布尔值 和 1、0 时,需注意重复的情况。
- 元组的元素不可以被替换。
3、浮点型(float)
-
在浮点型转换为整型时,会将小数部分去掉。
-
想要保留小数点后N位,round(v1,3) # 四舍五入
-
在项目中如果遇到精确的小数计算应该怎么办?
-
import decimal
v1 = decimal.Decimal(“0.1”)
-
008 阶段总结
1、代码规范
-
命名
- 文件夹:小写 & 小写下划线连接
- 文件:小写 & 小写下划线连接
- 变量:
- 全局变量:大写 & 大写下划线连接
- 局部变量:小写 & 小写下划线连接
-
注释
- 文件夹:创建名为"__init__.py"的文件,里面用"“” “”"写注释
- 文件:“”" “”"
- 代码:单行 #、多行 “”" “”"
- todo:版本更新
-
条件嵌套:最多不超过三层
-
逻辑处理:简单逻辑先处理
-
循环:少循环、多干事
-
PEP8规范
2、知识补充
- pass:保证语法的完整性
- is比较:
- is,用于表示内存地址是否一致。
- ==,用于比较两个值是否相等。
- 位运算:
&
,与(都为1):计算标志位|
,或(只要有一个为1)~
,非(取反)^
,异或(值不同)<<
,左移动(扩大)>>
,右移动(缩小)
思维导图
链接:https://www.zhixi.com/view/61e9ec41
密码:5125