1.计算机基础
1.1基本概念
计算机组成
计算机是由多个硬件组合而成,常见的硬件有:CPU、硬盘、内存、网卡、显示器、机箱、电源…
注意事项:机械将零件组合在一起,他们之间是无法进行协作。
操作系统
用于协调计算机的各个硬件,让硬件之间进行协同工作,以完成某个目标。
常见的操作系统分类:
windows,优点:生态牛逼、工具多;缺点:略慢、收费。【个人】
xp、win7、win10
linux,优点:资源占用少、免费(很多公司的服务器上安装Linux);缺点:工具少、告别游戏。【企业的服务器】
centos、ubuntu、redhat
mac,优点:生态还行、工具差不多都有、用户体验和交互;缺点:不能玩游戏
软件(应用程序)
在安装上操作系统之后,我们会在自己电脑上安装一些常用的软件,例如:QQ、杀毒、微信
1.2.编程语言
常见的编程语言:Java、C#、Python、PHP、C++….
1.3.编译器/解释器:
翻译官,将代码翻译成计算机能够识别的命令
解释器
实时翻译:拿到1000行代码之后,解释一句交给操作系统一句。
Python、PHP、JavaScript、Ruby…一般称为解释型语言
编译器
全文翻译。拿到2000行代码之后会将他编译成一个临时文件(计算机能够识别命令),再把文件交给操作系统去读取。
C、C++、Go、Java….一般称为编译型语言
1.4.如何学编程
选择一门编程语言,安装此编程语言相关的编译器/解释器。
学习编程语言的语法规则,根据语法规则+业务背景设计并开发你的软件
使用编译器/解释器去运行自己写的代码。
1.5.语言的分类
翻译的维度:
解释型语言:Python、PHP、JavaScript、Ruby…
编译型语言:C、C++、Go、Java….
高低的维度:
低级编程语言,写出来的代码直接可以被计算机识别。
高级编程语言,写出来的代码无法直接被计算机识别,但可以通过某中方式将其转换为计算机可以识别的语言。
2.基础入门
2.1.进制和编码
- 编码
ascⅡ编码,2^8=256中对应关系
gb-2312编码
gb-2312编码,1980年
gbk编码,对gb-2312进行扩展,包含中日韩等文字,1995年
unicode编码
浪费空间,在文件存储和网络传输时,不会直接使用,而在内存中会使用
ucs2:用2个字节表示
ucs4:用4个字节表示
utf-8编码
utf-8是对unicode的压缩,用尽量少的二进制去与文字进行对应
0000-007F 用1个字节表示
0080-07FF 用2个字节表示
0800-FFFF 用3个字节表示
10000-10FFFF 用4个字节表示
编码必须要保持:保存和打开一直,否则会乱码。
Python解释器默认是以utf-8编码的形式打开文件
建议:所有Python代码文件的都要以utf-8编码保存和读取。
2.2.python代码运行方式
脚本式:pycharm
交互式:终端
2.3.进制
十进制:可以转换为二、八、十六进制,bin()、oct()、hex()
二进制:可以转换为十进制,int(“0b1101”,base=2)
八进制:可以转换为十进制,int(“0o27”,base=8)
十六进制:可以转换为十进制,int(“0x1c”,base=16)
2.4.单位
b(bit)位
B(Byte)字节
KB(killobyte)千字节
MB(Megabyte)兆
GB(Gigabyte)千兆
TB(Terabyte)万亿字节
更大的单位PB/EB/ZB/YB/BB/NB/DB
2.5.输入
input()
2.6.输出
print(),默认在尾部会加换行符
print(“”,end=””),修改默认结尾换行
2.7.数据类型
整型int、字符串str、布尔类型bool
列表list、元组tuple、集合set、字典dict
2.8.变量
给变量赋值:变量名=值
变量名只能由字母、数字、下划线组成
不能以数字开头
不能用Python内置的关键字
2.9.注释
解释器会忽略不按照代码去运行
单行注释:control+?
多行注释
2.10.条件语句
if else,注意缩进
条件嵌套,if elif else
2.11.循环语句
while循环,注意缩进
while else
一般在做无限制(未知)循环此处时使用
for循环,注意缩进
一般应用在已知的循环数量的场景
for+range()
break
用于循环中终止循环
注意缩进位置,终止当前循环
continue
用于循环中结束本次循环,开始下一次循环
注意缩进位置,结束当前循环
2.12.字符串格式化
%
text="我叫%s,今年%d岁"%(name,age)
data=text%(name,age)
字符串格式化中存现百分比的显示,请一定要加%%以实现输出%
format(推荐)
text="我叫{},今年{}岁,真实的姓名是{}。".format("武沛齐',18,"武沛齐")
data=text.format(name,age)
f
text=f"嫂子的名字叫{name},今年{age}岁"
text=f"嫂子的名字叫{name},今年{19+2=}岁"
text=f"嫂子的名字叫{name},今年{22:#b}岁"
text=f"嫂子的名字叫{name},今年{22:#o}岁"
text=f"嫂子的名字叫{name},今年{22:#x}岁"
2.13.运算符
算数运算符
运算符 | 描述 | 实例 |
---|---|---|
+ | 加—两个对象相加 | a + b输出结果30 |
– | 减—得到负数或是一个数减去另一个数 | a – b输出结果-10 |
* | 乘—两个数相乘或是返回一个被重复若干次的字符串 | a * b输出结果200 |
/ | 除—x除以y | b / a输出结果2 |
% | 取模—返回除法的余数 | b % a输出结果0 |
** | 幂-返回x的y次幂 | a ** b为10的20次方,输出结果100000000000000000000 |
// | 取整除-返回商的整数部分 | 9//2输出结果4,9.0//2.0输出结果4.0 |
比较运算符
运算符 | 描述 | 实例 |
---|---|---|
== | 等于—比较对象是否相等 | (a==b)返回False |
!= | 不等于—比较两个对象是否不相等 | (a!=b)返回true |
<> | 不等于—比较两个对象是否不相等 | (a<>b)返回true。这个运 算符类似!= |
> | 大于—返回x是否大于y | (a>b)返回False |
< | 小于—返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 | (a<b)返回true |
>= | 大于等于—返回x是否大于等于y。 | (a>=b)返回False |
<= | 小于等于—-返回x是否小于等于y。 | (a<=b)返回true |
注意:python3中不支持<>
赋值运算
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c=a+b将a+b的运算结果赋值为c |
+= | 加法赋值运算符 | c+=a等效于c=c + a |
-= | 减法赋值运算符 | c-=a等效于c=c – a |
* = | 乘法赋值运算符 | c*=a等效于c=c * a |
/= | 除法赋值运算符 | c/=a等效于c=c / a |
%= | 取模赋值运算符 | c%=a等效于c=c % a |
**= | 幂赋值运算符 | c**=a等效于c=c ** a |
//= | 取整除赋值运算符 | c//=a等效于c=c//a |
成员运算(是否包含)
算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的序列中找到值返回True,否则返回False. | x在y序列中,如果x在y序列中返回True. |
not in | 如果在指定的序列中没有找到值返回True,否则返回False | x不在y序列中,如果x不在y序列中返回True. |
逻辑运算符(且或非)
算符 | 描述 | 实例 |
---|---|---|
and | 布尔*与”—如果x为False,x and y返回False,否则它返回y的计算值 | (a and b)返回true |
or | 布尔”或”—如果x是True,它返回True,否则它返回y的计算值 | (a or b)返回true |
not | 布尔*非”—如果x为True,返回False。如果x为False,它返回True | not(a and b)返回false |
算数运算符优先级 大于 比较运算符
比较运算符优先级 大于 逻辑运算符
逻辑运算符内部三个优先级 not>and>or
总结:加减乘除>比较>not and or
位运算符
3.环境搭建
3.1.Python优点
语法简洁&适合小白
类库的强大。
开发效率高
3.2.Python解释器种类
CPython,底层是由C语言开发出来的Python解释器。3.9.0版本
Jython,是由Java语言开发出来的Python解释器,方便让Python和Java代码做集成。
IronPython,是基于C#语言开发出来的Python解释器,方便让Python和C#代码做集成。
RubyPython,…
PyPy,是对CPython的优化,他的执行效率提高了。引入编译器的功能,本质上将Python代码进行编译,再去执行编译后的代码。
3.3.Pycharm编辑器
提高写代码效率+用解释器运行代码
下载、安装、破解
4.数据类型
4.1.None
意味着这个值啥都不是或表示空。相当于其他语言中null作用一样。在一定程度上可以帮助我们去节省内存
例如:
v1=None
v2=None
4.2.整型int
- 定义:
十进制整数的统称,可哈希
- 独有功能:
bit_length()二进制有多少个位组成
- 公共功能:加减乘除
- 转换:
bool转int:int(True)、int(False)
str转int:int(“进制数”,base=),进制转换
float转int:小数转整型只保留整数部分
4.3.布尔类型bool
- 定义:
布尔值只有”真True”、”假False”,可哈希
- 转换:
整数0、空字符串、空列表、空元组、空字典转换为布尔值时均为False
其他均为True
做条件自动转换:
如果在if、while条件后面写一个值当做条件时,会默认转换为布尔类型,然后再做条件判断
4.4.浮点型float
- 定义:
一般在开发中用于表示小数
- 公共功能:加减乘除
- 转换:
在浮点型转换为整型时,会将小数部分去掉
想要保留小数点后N位,data=round(v1,N)
浮点型相加:直接相加,补码有坑
decimal.Decimal("0.1")+decimal.Decimal("0.2")
4.5.字符串str
- 定义:
用于表示文本信息,可哈希
字符串不可被修改
- 独有功能:
“XXX”.功能()或v1.功能()
"XXX".startswith(),判断字符串是否以XX开头?得到一个布尔值
"XXX".endswith(),判断字符串是否以XX结尾?得到一个布尔值
"XXX".isdecimal(),判断字符串是否为十进制数?得到一个布尔值
"XXX".strip(),去除字符串两边的空格、换行符、制表符、指定内容,得到一个新字符串
"XXX".lstrip(),去除字符串左边的空格、换行符、制表符、指定内容
"XXX".rstrip(),去除字符串右边的空格、换行符、制表符、指定内容
"XXX".upper(),字符串变大写,得到一个新字符串
"XXX".lower(),字符串变小写,得到一个新字符串
"XXX".replace("",""),字符串内容替换,得到一个新的字符串
"XXX".split("|"),根据特定字符将字符串切割,得到一个列表
"XXX".rsplit("|"),根据特定字符从右边将字符串切割,得到一个列表
"XXX".join(),字符串拼接,得到一个新的字符串
"XXX".format(),格式化字符串,得到新的字符串
"XXX".encode("utf-8"),字符串转换为字节类型
"XXX".center(),将字符串内容居中、居左、居右展示
"XXX".zfill(),帮助你填充0,处理二进制数据
- 公共功能:
相加:字符串+字符串
相乘:字符串*整数
长度:len()
索引:index[1],=获取字符串中的字符,可正取倒取
字符串中只能通过索引取值,无法修改值
切片:message[0:2]获取字符串中的子序列,可正取倒取
只能通过切片取值,无法修改值
步长:message[0:5:2]跳着去字符串的内容,可正取倒取
循环:while循环、for循环、range()、lens()、break、continue
- 转换:
一般情况下,只有整型转字符串才有意义
4.6.列表list
- 定义:
有序、可修改、容器,可存放多个不同类型的元素
- 独有功能:
基本上都是直接操作列表内部,不会创建新的一份数据
追加:data_list.append(),在原列表尾部追加值
批量追加list1.extend(list2),将一个列表中的元素逐一添加另外一个列表
插入data_list.insert(1,""),在原列表的指定索引位置插入值
删除data_list.remove(""),在原列表中根据值删除(从左到右找到第一个删除)
慎用,找不到会报错
索引剔除item=data_list.pop(1),
在原列表中根据索引位置为1的元素,并将删除值赋值给变量item
清空原列表data_list.clear()
根据值获取索引data_list.index("")(从左到右找到第一个删除)
慎用,找不到会报错
列表元素排序data_list.sort()
data_list.sort(reverse=True),让列表从大到小排序
排序原理,根据unicode编码大小排序
排序时内部元素无法进行比较时,程序会报错(尽量数据类型统一)
反转原列表data_list.reverse()
- 公共功能:
相加:两个列表相加获取生成一个新的列表
相乘:列表*整型,将列表中的元素再创建N份并生成一个新的列表
运算符in包含:通过in来判断元素是否在列表中
获取长度:len(data_list)
索引:data_list[1]
切片:data_list[0:2]、data_list[1:]、data_list[:-1],生成新的列表
步长:data_list[1:4:2]、data_list[0::2]、data_list[1::2]、data_list[4:1:-1]
while循环、for循环、range()、lens()、break、continue
- 转换:
int、bool无法转换成列表
str转换为列表将字符串中的元素拆开,意义不大
元组tuple、集合set转换为列表
嵌套:list、tuple、set
4.7.元组tuple
- 定义:
有序、不可修改、容器、可哈希
“我儿子不能换成是别人,但我儿子可以长大”
建议:在元组的最后多加一个逗号
- 独有功能:
无,不可修改
- 公共功能:
相加:两个元组相加获取生成一个新的元组
相乘:列表*整型,将元组中的元素再创建N份并生成一个新的元组
获取长度、索引、切片、步长
while循环、for循环、range()、lens()、break、continue
- 转换:tuple(其他)
字符串、列表可以转换为元组
嵌套:list、tuple、set
4.8.集合set
- 定义:
无序、可变、不允许数据重复的容器
无序,无法通过索引取值
可变,可以添加和删除元素
不允许数据重复
用途:维护一大堆不重复数据时
- 独有功能:
添加:data.add()
删除:data.discard()
交集:s1.intersection(s2)或s1&s2
并集:s1.union(s2)或s1|s2
差集:s1.difference(s2)或s1-s2
- 公共功能:
减/差集、&交集、|并集
长度、while循环、for循环
存储原理:查找速度特别快
第一步:利用哈希函数将”xxx”转换成一个数值
第二步:取余数(实际掩码做&运算)
第三步:将”XXX”放在哈希表的3索引位置
注意:元素必须是可哈希的值,即通过哈希函数把值转换成一个数字
支持嵌套
4.9.字典dict
- 定义:
无序、键不重复且元素只能是键值对的可变的个容器
元素只能是键值对
键不重复,重复则会被覆盖
无序:Python3.6之后字典是有序的
键:必须可哈希,int、bool、str、tuple
值:任意类型
用途:需要表示一组固定格式信息时,用字典可以更直观
- 独有功能:
获取值:info.get()
所有的键:info.keys()
所有的值:info.values()
所有的键值:info.items(),item是一个元组(键,值)
设置值:data.stedefault()
更新字典键值对:info.update()
移除制定键值对:data=info.pop(),移除的同时会将值赋值给data
按顺序移除:后进先出
- 公共功能:
减/差集、&交集、|并集
长度len、是否包含in(键是否存在)
索引:索引是键,获取的是值
根据键修改值和添加值、删除值
while循环、for循环(可通过循环其中的键、值、键值进行循环)
- 转换:
其他类型要满足形式[(“k1″,”v1”),(“k2″,”v2”)]
存储原理:查找速度特别快
第一步:利用哈希函数将”xxx”转换成一个数值
第二步:取余数(实际掩码做&运算)
第三步:将”XXX”放在哈希表的3索引位置
注意:元素必须是可哈希的值,即通过哈希函数把值转换成一个数字
支持嵌套:字典元素键的子子孙孙都必须是可哈希的,值可以是任意类型