#Python基础
1.变量
2.数据类型
3.函数
4.面向对象
5.异常处理
#网络编程
#并发编程
#mysql数据库
#前端
#djiango框架
ansible里面的paramiko模块有ssh的功能
参考博客
参考博客
python官网
计算机硬件
#五大组成部分
1.控制器
类似于大脑,用来控制计算器硬件
2.运算器
数学运算
逻辑运算(if)
控制器+运算器=CPU(中央处理器)
3.存储器
内存,基于电工作,速度快,断电数据丢失
外存,硬盘,磁带,磁盘,永久保存数据
4.输入设备
鼠标键盘
5.输出设备
屏幕,打印机
#三大核心硬件
1.CPU
2.内存
3.硬件
下载的软件,最开始存在于硬盘,如果想要运行的话,硬盘加载到内存,CPU再去内存取地址执行(32/64),显卡,输出
#操作系统
windows 用户体验
linux 服务
ubuntu 体验,图形化界面
如果想要计算机工作,要控制计算器各个硬件的运作
操作系统就是用来帮助我们控制计算机硬件的代码
#计算机三层架构
1.应用程序
2.操作系统
3.计算机硬件
编程语言python
主流编程语言
编程语言:
人与计算机交流的媒介
编程:
人将自己的思维逻辑和想法用计算机能够听懂的语言表达出来的过程
#程序在未运行前跟普通文件无异,只有在程序运行时,文件内所写的字符才有指定的语法意义
Python解释器
#如果服务正常的运行,那就不要去升级
版本:
2.x
最高的只有2.7,不再更新。不建议使用
3.x
推荐3.6
#官网
Python解释器
add python to path(添加环境变量)
#多版本共存演示
注意:在安装目录下找到python.exe,拷贝一份,命名为python2.exe或python3.exe,一定要保留原版,因为pip工具会调用它。
#强调:
python解释器执行程序是解释执行,即打开文件读内容,因此文件的后缀名没有硬性限制,但通常定义为.py结尾
Python IDE
1.vscode
2.pycharm
在下载pycharm,下载专业版,不要下载社区版,收费,
有破解版
1.在淘宝购买激活码
2.百度
3.实时获取激活码的网站(idea.medeming.com/jets)
注释
1.单行注释(ctrl +?)(ctrl+/)
#
2.多行注释
'''
'''
"""
"""
变量与常量
变量即变化的量
程序的运行就是一系列数据的变化,变量的变化过程
变量:
username = ''
age = 18
变量名 赋值符号 变量值
在内存中申请一块内存空间将Jason存储进去,之后将Jason绑定一个变量名username,后期如果想要访问内存里面的Jason,那么,只需要通过username即可
#要想访问到内存里面的数据,就必须借助于变量名
内存溢出,系统自动杀进程
#变量的命名
1.数字 字母 下划线
2.数字不能开头
3.见名知意
4.不能用关键字(容易和命令混淆)
#风格
1.下划线(Python推荐)
user_name = ''
2.大驼峰(js推荐)
User_name = ''
3.小驼峰(js推荐)
user_Name = ''
#常量(不能修改的量)
在Python中没有真正意义的常量
在Python中一般全大写的变量名即为常量(HOST PORT),print(HOST)
'在js中有真正意义的常量'
浏览器可以直接使用js代码,变量的定义不能随便修改
const pi=123
undefined
pi=999
VM156:1 Uncaught TypeError: Assignment to constant variable.
at <anonymous>:1:3
print
打印数据
print ('username')
username
打印变量
username='aa'
print (username)
aa
查看数据类型
username='aa'
print (type(username))
<class 'str'>
数据类型的转化,数据的意义发生改变
1.
username='1'
print (type(username))
<class 'str'>
print (int(username))
1
print (type(int(username)))
<class 'int'>
2.
score = (int(input('score>>>: ')))
print(name_list) #打印数据
print(name_list[0]) #数据0,数据1,数据2
print(name_list[0:3]) #打印出第0 1 2个数据
数据跳动
print(name_list[0:3:2]) #隔n-1个打印一个
#print后面的空格可以省略
#object数据,对象
#python中一切皆对象
#jeson翻译官
#ctrl+D 复制粘贴光标所在行
#鼠标点击一下两下三下,插入 选中字符串 选中行
#seting---editor---general---mouse contule 鼠标滚轮
#code---reformat code 规整
数据类型
参考
'不同的数据'应该有对应'不同的数据类型'来'存储和处理'(.txt .pdf .mp4)
#查看数据类型
type(变量名/数据)
整型 int 整数,age=18,用(age)表示
age=18
print(type(age))
<class 'int'>
print(age)
18
浮点型 float 小数,heigth=111.1,用(height)表示
height=177.8
print(type(height))
<class 'float'>
字符串 str 带有描述性质的信息,姓名,地址(不好取数据),用('username')表示
uaername= '' #单引号
uaername= "" #双引号
info= '''aa''' #三引号
info= """bb"""
username='''syy'''
print(type(username))
<class 'str'>
print(info1,info2)
aa bb
1.索引取值,索引都是从0开始的
username='''sy is shuaige'''
print(username[0])
s
print(username[1])
y
print(username[2])
' '
2.切片操作,顾头不顾尾
username='''sy is shuaige'''
print(username[0:1])
s
3.步长,'2'隔一个取一个,'3'隔两个取一个
username='''sy is shuaige'''
print(username[0:10:2])
s ssu
4.切割 文件名.split('分隔符')
res='syy|123|abc'
pr=res.split('|')
print(pr)
['syy', '123', 'abc']
res='syy|123|abc'
pr=res.split('a')
print(pr)
['syy|123|', 'bc']
5.替换 文件名.replace('原来的','现在的',替换个数)
res = 'frank is NB and age is 18 frank frank frank heiheihei'
pr=res.replace('frank','syy')
print(pr)
syy is NB and age is 18 syy syy syy heiheihei
res = 'frank is NB and age is 18 frank frank frank heiheihei'
pr=res.replace('frank','syy',2)
print(pr)
syy is NB and age is 18 syy frank frank heiheihei
列表 数据类型是list,数据是有序的,可以使用索引取值(索引就是数据之间的规则)
能够'存储多个数据',数据与数据之间使用'逗号'隔开,数据类型可以是'任意类型',以字符串为'单位'(#在[]内用逗号分隔,可以存放n个任意类型的值)
name_list = ['aa','bb',12,11.2]
print(type(name_list))
<class 'list'>
1.索引取值
name_list = [ 'aa','bb',12,11.2]
print(name_list[0])
print(name_list[0:3])
print(name_list[0:3:2])
print(name_list[5]) #超出数据个数报错
2.尾部追加值append
name_list = [ 'aa','bb',12,11.2]
name_list.append('cc')
print(name_list)
['aa', 'bb', 12, 11.2, 'cc']
name_list = [ 'aa','bb',12,11.2]
name_list.append(1)
print(name_list)
3.指定位置插入
name_list = [ 'aa','bb',12,11.2]
name_list.insert(1,'xxoo')
print(name_list)
['aa', 'xxoo', 'bb', 12, 11.2]
4.扩展列表(合并列表)
name_list = [ 'aa','bb',12,11.2]
name_list.extend(['tony','tom','jerry','kevin'])
print(name_list)
['aa', 'bb', 12, 11.2, 'tony', 'tom', 'jerry', 'kevin']
字典
字典在构造数据的时候是按照key:value的形式
key 描述性信息,描述值(字典的key一般情况下都是'字符串类型')
value 真正的数据(字典的value数据类型可以是Python'任意数据类型')
字典内部的'kv是无序的',也就是说没有办法使用'索引取值',但是可以按照'key取值'(无法直接取value),不推荐使用该方法取值(因为字典的key不存在的时候回报错)
#在{}内,使用:分割名值对,用逗号分隔不同的名值对,可以存放多个key:value的值
定义字典
info={
'username':'syy',
'password':123,
'hobby':['student','read','run']
}
print(info)
{'username': 'syy', 'password': 123, 'hobby': ['student', 'read', 'run']}
1.key取值
print(info['username'])
key不存在的话就会报错
print(info['username2'])
Traceback (most recent call last):
2.key取值与.get取值的对比
info={
'username':'syy',
'password':123,
'hobby':['student','read','run']
}
info1=info.get('usernamexx') #
print(info['username'])
print(info1)
syy
None #没有报错
3. .get可以添加title
info={
'username':'syy',
'password':123,
'hobby':['student','read','run']
}
info1=info.get('usernamexx','你要找的这个key不存在')
print(info1)
你要找的这个key不存在
#在字典中添加名值对
info={
'username':'syy',
'password':123,
'hobby':['student','read','run']
}
info['gender']='nan'
print(info)
{'username': 'syy', 'password': 123, 'hobby': ['student', 'read', 'run'], 'gender': 'nan'}
#修改字典中的值,info['username']='jeson'username存在即修改,不存在为添加
info={
'username':'syy',
'password':123,
'hobby':['student','read','run']
}
info['username']='jeson'
print(info)
{'username': 'jeson', 'password': 123, 'hobby': ['student', 'read', 'run']}
# .items() 直接获取,字典里面所有的键值对,组织成列表的形式
info={
'username':'syy',
'password':123,
'hobby':['student','read','run']
}
print(info.items())
dict_items([('username', 'syy'), ('password', 123), ('hobby', ['student', 'read', 'run'])])
# .keys() 直接获取字典里面所有的key
info={
'username':'syy',
'password':123,
'hobby':['student','read','run']
}
print(info.keys())
dict_keys(['username', 'password', 'hobby'])
# .values() 直接获取字典里面所有的value
info={
'username':'syy',
'password':123,
'hobby':['student','read','run']
}
print(info.values())
dict_values(['syy', 123, ['student', 'read', 'run']])
布尔值 True False 作用:用来判断事务的对错
用于逻辑判断中,流程控制
#布尔值默认是False的有None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False,其余均为真
#1.可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典
#2. 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)
元组 tuple t=(111,222,333)
一个不可变,不可修改的列表
元组也可以存放多个数据,数据与数据之间用逗号隔开,列表中的元素可以修改,但是元组里面的不可以
#定义一个元组
t = (1,2,3)
print(t[0])
print(t[0:3])
print(t[0:3:2])
1
(1, 2, 3)
(1, 3)
t = (1,2,3,3,3,3,3,3,3,3,3,3,3)
print(type(t))
<class 'tuple'>
#元组的值不可修改
t = (1,2,3)
t[0]=666
TypeError: 'tuple' object does not support item assignment
#统计元组中元素出现的个数(count模块)
t = (1,2,3,3,3,3,3,3,3,3,3,3,3)
co=t.count(3)
print(co)
11
#统计列表中元素出现的个数
t = [1,2,3,3,3,3,3,3,3,3,3,3,3]
co=t.count(3)
print(co)
11
#获取元组元素的索引值
t = (1,2,3,3,3,3,3,3,3,3,3,3,3)
co=t.index(3)
print(co)
2
#获取列表元素的索引值
t = [1,2,3,3,3,3,3,3,3,3,3,3,3]
co=t.index(3)
print(co)
2
集合(set),集合内不可能出现相同的元素
1.去重
2.关系运算(产品:共同好友,共同关注)
#定义一个集合
t = {1,2,3}
print(type(t))
<class 'set'>
#去重
t = {1,2,3,3,3,3,3,3,3,3,3,3,3}
print(t)
{1, 2, 3}
#共同好友(交集)
f1={'jeson','egon','tony','jerry'}
f2={'jeson','frank','oscar','tony'}
res=f1 & f2
print(res)
{'tony', 'jeson'}
#f1独有好友
f1={'jeson','egon','tony','jerry'}
f2={'jeson','frank','oscar','tony'}
res=f1 - f2
print(res)
{'egon', 'jerry'}
#f1 f2各自独有的好友
f1={'jeson','egon','tony','jerry'}
f2={'jeson','frank','oscar','tony'}
res=f1 ^ f2
print(res)
{'egon', 'frank', 'jerry', 'oscar'}
#判断2个集合之间的父集子集关系
f1={'jeson','egon','tony','jerry'}
f2={'jeson','frank','oscar','tony'}
res=f1 > f2
print(res)
False
#变量 a='1,2,3'
#列表 a=['1','2','3']
#字典 a={a:1,b:2,c:3}
#元组 a=(1,2,3)
#交互 input() print()
#文件类型转化 type(int(name))
格式化输出(python与用户交互)
1.输入,input,获取到的用户输入都是字符串类型
#查看input输入的字符的类型
username=input('请输入你的用户名>>>: ')
print(username,type(username))
1 <class 'str'>
input('请输入你的用户名>>>: ')
input('请输入你的用户密码>>>: ')
2.输出,print
格式化输出,%s占位符
#%s字符串占位符:可以接收字符串,也可接收数字
res='亲爱的%s,拿的话费是%s,余额%s'
print(res%('syy',50,1000000))
#%d数字占位符:只能接收数字
res='亲爱的%s,拿的话费是%d,余额%d'
print(res%('syy',50,1000000))
#接收用户输入,打印成指定格式
name=input('you name: ')
age=(int(input('you age: ')))
print('my name is %s,my age is %d' %(name,age))
you name: syy
you age 18
my name is syy,my age is 18
#注意:
#print('My name is %s,my age is %d' %(name,age)) #age为字符串类型,无法传给%d,所以要进行文件类型的转化
# s% %()
运算符
1.数学运算
+—*/ % **乘方 //
2.逻辑运算
与 and & #同时成立
或 or | #只要有一个条件成立
非 not ! #条件不成立
三者混用情况下,会有优先级的问题,写程序的时候,人为的区分优先级(#想要先执行,就用括号扩住)
增量赋值
x=1
x=x+2
print(x)
3
#加
x=1
x+=2
print(x)
3
#减
x=1
x-=2
print(x)
-1
#乘
x=1
x*=2
print(x)
2
#除
x=1
x/=2
print(x)
0.5
#乘方
x=3
x**=2
print(x)
9
解压赋值 *_
name_list=['jason','egon','frank','haoda']
#定义变量
jason_name=name_list[0]
egon_name=name_list[1]
frank_name=name_list[2]
haoda_name=name_list[3]
#定义变量
a,b,c,d=name_list
print(a,b,c,d)
jason egon frank haoda
#左边元素少,错
a,b,c=name_list
#左边元素多,错
a,b,c,d,e=name_list
#解压赋值
#*_在中间只能取 第一个值和最后一个值
name_list=['jason','egon','frank','haoda']
a,*_,b=name_list
print(a,b)
jason haoda
a,*_,b=name_list
print(a,b,_)
jason haoda ['egon', 'frank']
a,b,*_=name_list
print(a)
jason
a,*_=name_list
print(a)
jason
# *_在前面,只能取最后一个值
*_,c=name_list
print(c)
haoda
*_,d=name_list
print(d)
haoda
#*_在后面可以取多个值
a,b,c,*_=name_list
print(a,b,c)
jason egon frank
#可以少取
a,b,c,*_=name_list
print(a,b)
jason egon
#不可以多取
a,b*_=name_list
print(a,b,c)
SyntaxError: can't assign to operator
流程控制
流程控制主要分为3类
1.顺序结构
从上往下的顺序依次执行
2.分支结构
根据条件做出不同的响应
if else elif ,一次流程只能走一个
python是利用'代码的缩进'来表示代码的从属关系
缩进量一般 推荐4个空格
多行子代码'属于一个关键字'的时候,他们必须保持'相同的缩进量'
产品:登录功能
1).
age=(int(input('age: ')))
if age < 25:
print('小姐姐加个微信?')
else:
print('不好意思,认错人了')
2).
score = (int(input('score>>>: ')))
if score > 90:
print('优秀')
elif score > 80:
print('良好')
elif score > 70:
print('一般')
elif score > 60:
print('及格')
else:
print('挂科')
3).
username = input('username>>>: ') #前端页面
password = input('password: ')
if username == 'syy' and password == '123': #连接数据库
print('来宾三位')
else:
print('登录错误')
3.循环结构
'重复'的做/执行代码(条件成立一直执行)
while True: while恒成立
break 只能结束上方离他最近的while,#注意缩进
continue 结束本次循环,进行下一次
while 条件:
代码块1
代码块2
代码块3
1.需要先判断条件是否成立,如果成立则执行代码块1,2,3
2.代码块执行完毕之后,会再次回到while的开头再次判断条件是否成立
如果成立继续执行代码1,2,3
3.一旦条件不成立,就会结束循环体的执行
#例1
while True:
username = input('username>>>: ')
password = input('password>>>: ')
if username == 'syy' and password == '123':
print('登录成功')
while True:
cmd = input('请输入您的命令>>>: ')
print('登录成功,正在执行您的命令%s' %cmd)
else:
print('用户名或密码错误')
#例2
while True:
username = input('username>>>: ')
password = input('password>>>: ') #好看的前端页面
if username == 'syy' and password == '123': #连接数据库查询
print('登录成功')
while True:
cmd = input('请输入您的命令>>>: ')
if cmd == 'quit':
break
print('正在执行您的命令%s' %cmd)
break #while+break 结束上方离他最近的while,#注意缩进
else: #while+if+else,当while循环没有被break主动打断的情况下,正常的结束了才会走else
print('用户名或密码错误')
#例3
用while循环打印11,22,33,44,55,77,88,99,100
l = [11,22,33,44,55,77,88,99,100]
# print(len(l))
# 设置索引
count=0
while count < len(l):
if l[count] == 66:
count += 1
#continue结束/跳过本次循环,直接开始下一次循环
continue
print(l[count])
count += 1
#打印指定数字,continue跳过本次循环
count = 0
while count < 11:
print(count)
count += 1
while count < 10:
if count == 6:
count += 1
continue
print(count)
count += 1
else:
print('while循环结束')
#for循环可以做的事情while都能做,但是语法更加简单
for循环不需要给出结束的条件,取完值自动结束
将字符串里面的一个个字符去除,复制给for后面的变量名
for +break #停止上面的while
for +contunue #跳过本次循环
for +else #while循环没有被break打断,if条件不成立
规律跟while一致
#打印指定数(range顾头不顾尾)
#数组for循环
for i in range(1,11):
print(i)
#字符串for循环
s = 'syy is NB'
for i in s:
print(i)
s
y
y
i
s
N
B
#列表for循环
s = [111,222,333,444]
for i in s:
print(i)
111
222
333
444
#字典for循环
字典暴露在外界的只有key,for循环也只能获取到key
d = {'username': 'jason','password':123,'hobby':[111,222,333]}
for i in d:
print(i)
username
password
hobby
文件处理
文件是:操作系统暴露给我们'操作硬盘'的快捷方式(软链接)
文件处理:通过操作python代码,操作文件
#文件操作
1.
cs = open('a.txt',mode='r',encoding='utf-8') #打开文件
res = cs.read() #读取文件
print(res)
cs.close() #关闭文件,不然会占用内存
你好啊
我是Jason
外号大帅比
hello world
2.
with open('a.txt',mode='r',encoding='utf-8') as bl:
print(bl.read())
bl.close()
你好啊
我是Jason
外号大帅比
hello world
打开普通文件的三种模式
mode参数
r 只读,文件不存在直接报错(#使用mode模块r模式打开的文件,只能读不能写)
with open('a.txt',mode='r',encoding='utf-8') as bl:
print(bl.read()) #只读
bl.close()
w 只写,'危险',文件不存在自动创建,文件存在的话清空(先清空后创建)\n
with open('b.txt',mode='w',encoding='utf-8') as bl:
pass #只为了补全语法,没有意义(不写的haul会报语法错误)
bl.close()
with open('b.txt',mode='w',encoding='utf-8') as bl:
bl.write('是不是很刺激')
bl.close()
是不是很刺激
with open('b.txt',mode='w',encoding='utf-8') as bl:
bl.write('是不是很刺激\n')
bl.write('是不是很刺激\n')
bl.write('是不是很刺激\n')
bl.close()
是不是很刺激
是不是很刺激
是不是很刺激
a 只追加写,文件不存在直接创建,文件存在的话不会清空内容,追加写 \n
with open('c.txt',mode='a',encoding='utf-8') as bl:
pass
bl.close()
with open('c.txt',mode='a',encoding='utf-8') as bl:
bl.write('\n今天是周一了\n')
bl.write('今天是周一了\n')
bl.close()
文件的操作模式--b
mode,text文本(rwa不写的话系统默认加t,只能打开普通的TXT文件)
rt
wt
at
rb 以二进制的模式打开文件,速度快
with open('a.txt','rb') as lb: #open打开的文件是二进制的
print(lb.read())
bl.close()
b'\xe4\xbd\xa0\ 在python中有一个数据类型bytes类型(b),你直接把他看成是二进制数即可
with open('a.txt','rb') as lb:
data = lb.read()
print(data.decode('utf-8')) #decode字符类型的解码
lb.close()
with open('b.txt','wb') as lb:
lb.write('我顶不住了'.encode('utf-8'))
lb.close()
with open('b.txt','ab') as lb:
lb.write('\n我顶不住了\n'.encode('utf-8')) #encode字符类型的编码
lb.close()
#快捷转换(字母 数字)
with open('b.txt','wb') as lb:
lb.write(b'\nhello word 666\n')
lb.close()
with open('b.txt','ab') as lb:
lb.write(b'\nhello word 666\n')
lb.close()
hello word 666
计算机基于电工作,电信号只有高低电平,计算机值识别二进制数
encoding='utf-8'
bytes 二进制
编码:encode,将人类能够识别的字符按照指定的编码,编码成二进制数据
解码:decode,将二进制数据按照指定的字符集解码
利用b拷贝图片
1.先拷贝源
2.创建一个新文件,将文件内容写入
#查看图片类型
with open(r'1.png','rb') as bl: #r:取消转义,rb:模式
data = bl.read()
print(data)
b'\x89PNG\r\n\'
#拷贝原理(ctrl+c ctrl+v cp)
with open(r'1.png','rb') as bl:
data = bl.read()
with open(r'2.png','wb') as bl:
bl.write(data)
你好啊
我是Jason
外号大帅比
hello world
控制文件内光标的移动--多次打印
#验证光标的移动(到文件末尾),read只能读取光标后的内容
with open(r'a.txt','r',encoding='utf-8') as bl:
print(bl.read())
print(bl.read())
print(bl.read())
# .seek(offset,whence)
whence 位置
0:相对于文件开头,可以在任意模式使用
1:相对于当前位置,'只能在b模式下使用'
2:相对于文件末尾,'只能在b模式下使用'
offset 偏移量(以字节为单位bytes)
1bytes = 8bit
1024bytes = 1kb
1024kb = 1mb
utf-8默认用3bytes表示一个中文,1bytes表示一个英文/数字
1.
with open(r'a.txt','r',encoding='utf-8') as bl:
print(bl.read())
bl.seek(0,0)
print(bl.read())
你好啊
我是Jason
外号大帅比
hello world
你好啊
我是Jason
外号大帅比
hello world
2.
with open(r'a.txt','r',encoding='utf-8') as bl:
print(bl.read())
bl.seek(3,0)
print(bl.read())
你好啊
我是Jason
外号大帅比
hello world
好啊 #少了你
我是Jason
外号大帅比
hello world
3.
with open(r'a.txt','r',encoding='utf-8') as bl:
print(bl.read())
bl.seek(1,0)
print(bl.read())
h你好啊
我是Jason
外号大帅比
hello world
你好啊 #少了h
我是Jason
外号大帅比
hello world
with open(r'a.txt','r',encoding='utf-8') as bl:
print(bl.read())
bl.seek(4,0)
print(bl.read())
h你好啊
我是Jason
外号大帅比
hello world
好啊 #少了h你
我是Jason
外号大帅比
hello world
文件内容的修改
1.覆盖写,打开--修改--打开--写入
with open(r'a.txt','r',encoding='utf-8') as bl:
data = bl.read()
data = data.replace('jason','syy')
with open(r'a.txt','w',encoding='utf-8') as bl:
bl.write(data)
#小心写入出错就会清空文件
#文件过大,可能会导致内存溢出
for循环,避免内存溢出
with open(r'a.txt','r',encoding='utf-8') as f:
for line in f:
print(line)
syy
s
y
j
n
mk
2.先创建一个'新创建临时文件将修改的文件内容写入',之后将源文件'删除','将新文件重命名',打开--修改--删除,重命名
import os
with open(r'a.txt','r',encoding='utf-8') as f1,open(r'a.backend.txt','w',encoding='utf-8') as f2:
for line in f1:
f2.write(line.replace('syy','jason'))
os.remove(r'a.txt')
os.rename(r'a.backend.txt',r'a.txt')
jason
s
y
j
n
mk