python 基础知识

数据类型的获取type()函数、isinstance()函数

join 连接字符串 方法"_".join("要加的字符串");
ljust 内容左对齐,右侧填充
lower 把字符串变小写
lstrip 移除右边的空格
rstrip 移除右边的空格
strip 移除所有的空格
replace 替换s.replace("al","bb",1);
rfind 从右向左边找
rsplit() 把字符串分割
swapcase 大写变小写,小写变大写
startwith 以....为开头
upper() 变大写 验证码可以用到

列表
name_list=["a",'b','c']
#索引
print(name_list[0])
#切片
print(name_list[0:2])
#len
print(name_list[0:len(name_list)])
for i in name_list
print(i)

#列表内部提供的其他功能

append追加
name_list.append('senven')即最后加一个串
name_list.count(‘senver’)查找个数
#iterable 可迭代的
name_list.extend() 把一个列表传到另外一个列表中,即批量处理
name_list.insert(1,'SB'); 在位置1插入
name_list.remove('seven') 把第一个seven移除掉
nem_list.reverse() 倒置列表
name_list.sort() 进行排序

元组不可修改

字典


user_info={
"name":"alex",
"age":72,
"gender":'M'
}

每一个值都有一个key和一个value
#字典的索引
print(user_info['name']) 即name为索引
由于字典的key值为任意定义的,所以没有切片
#循环
for i in user_info:
print(i)
#获取所有的key
print(user_info.keys())
#获取所有的值
print(user_info.values())
#获取所有的键值对
print(user_info.items())
print(user_info.clear()) 清空字典
val=user_info.get('age','123') 根据key值,如果key值不存在,可以指定一个默认值,所以建议用get而不用索引


检查agf在不在字典中的key中
ret='agf' in user_info.keys()
print(ret)#输出的bool值
一个字典可以用update把一个字典的内容更新到另外一个字典中
del user_info['name'] 删除指定索引的键值对

New 看的

索引#只能找一个s[1]
切片#可以找多个s1[1:4]
以UTF-8编码,一个汉字,3个字节
bytes可以将字符转换成字节
bin()方法输出二进制表示

i="郭振东"
for b in i:
print(b)
bytes_list=bytes(b,encoding='utf-8')
#print(bytes_list)
for c in bytes_list:
print(c,bin(c))

#将自己的名字用二进制表示出来
#insert 给指定位置插入指定元素


#假如有一个字典dic={'k1':'v1'}
dic.update({'k2':123})
dic['k2']=123

整理:
一般字符串,执行一个功能,生成一个新内容,原来的内容不变
list,tuple,dic,执行一个功能,自身进行变化
enumerate(li)#枚举列表或字符串的功能

#set 不允许重复的集合 可以理解为不允许重复的列表
1、 创建
s=set()
s={11,12,31}
2、转换
s=set(列表名)
3、set提供的方法
se={11,122,33}
print(se)
se.add(44)#添加
print(se)
#se.clear()#清空
print(se)

be={11,66}
t=se.difference(be)#查找se存在的元素而be中不存在的元素,并赋值给t
print(t)
se.difference_update(be)#查找se存在的而be不存在的元素,并且更新自己
print(se)

#三目运算,三元运算

#例如C语言中的 name=if 条件?值1:值2
#在python中 name=值1 if 条件 else 值2 值1是条件成立的取值,值2是不成立的取值
name="cc" if 1==1 else "dd"
print(name)


#发送邮件的实例
def email(p):
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
try:
msg = MIMEText("这是个", 'plain', 'utf-8')
msg['From'] = formataddr("武沛齐", '[email protected]')
msg['To'] = formataddr(["走人", "[email protected]"])
msg['Subject'] = '主题'
server = smtplib.SMTP("smtp.126.com", 25)
server.login("[email protected]", '372930gzd')
server.sendmail('[email protected]', [p, ], msg.as_string())
server.quit()
return True
except:
return False

rr=email('[email protected]')
if rr:
print("发送成功")
else:
print("发送失败")

#--------结束


#函数的默认取值定义形式
def drive(name="郭振东")
##如果没有传参,默认郭振东,并且含有默认值的参数必须放在没有默认参数的后边
def drive(*args,**kwargs)
*,元组,元祖的元素
**,字典

为动态参数传入 列表,元组,字典
*args *列表
*kwargs **字典

#深浅拷贝
1、数字、字符串
深浅都一样
2、其他
浅拷贝:只拷贝第一层
深拷贝:不拷贝最后一层
#set集合
无序、不重复,不能用索引找
求交集、并集、差集
函数
def
函数名
执行函数
全局变量在使用时加一个gloable


#python的内置函数

bin(11)#输出二进制
oct(11)#输出八进制
hex(11)#输出十六进制
callable(名字)是否可执行

li=[]
print(dir(li))
help(list)

divmod()#分页的时候用到*******


a="1+3"
print(a)
ret=eval(a)#把字符串转换成表达式直接运算出结果
print(ret)

****#随机数
import random
for i in range(6):
ra=random.randrange(1,123)
print(ra)


#验证码
import random
temp=""
for i in range(6):
li=random.randrange(0,4)
if li==2 or li==4:
ra2=random.randrange(0,10)
temp+=str(ra2)
else:
ra = random.randrange(65, 91)
c1 = chr(ra)
temp+=c1
print(temp)


********
# f=open("haha","a")
# data=f.write(bytes("中国",encoding="utf-8"))
# f.close()
#文件的写入

#文件的读取操作
f=open("haha","r",encoding="utf-8")
data=f.read()
f.close()
print(data)
**************************************总结*****
函数名可以当做参数传递
函数名()==》执行函数
函数名==》代指函数

内置函数==》截图
all()所有的元素为真才为真
any()只要有一个元素为真就为真
bin()10-->2
hex()10-->16
int()所有的转化为10
oct() 10->8十进制转化为八进制
bool() 空字符串,0,None,空元组,空字典,空列表
bytes() 字符串转化为字节
chr()数字转化为字节
ord()和chr()相反
dir()快速找到功能
enumerate() ????
eval() 又返回值


**********************总结结束*****************


实际项目*************************************************
split("$") 以$符号分割字符串

def login(name,pwd):
"""

:param name:
:param pwd:
:return:
"""
f = open("db", "r", encoding="utf-8")
for line in f:
line = line.strip()
line_list = line.split("$")
if name == line_list[0] and pwd == line_list[1]:
return True
return False

def register(name,password):
"""
注册用户
1、打开文件a
2\用户名$密码
:param name:
:param password:
:return:
"""
with open("db","a",encoding="utf-8") as f:
temp="\n"+name+"$"+pwd
f.write(temp)
return True

def user_exist(user):
#验证用户是否存在
with open("db","r",encoding="utf-8") as f:
for line in f:
line = line.strip();
line_list=line.split("$")
if line_list[0]==user:
return True
return False


def main():
print("Wellcom XXX系统")
inp = input("1:登陆;2:注册")
if inp == "1":
name = input("input name")
pwd = input("input pwd")
if login(name, pwd):
print("success")
else:
print("fail")
elif inp == "2":
name = input("input name")
pwd = input("input pwd")
if user_exist(name):
print("用户存在,无法注册")
else:
if register(name, pwd):
print("注册成功")

main()


****************************实际项目登陆篇结束******************
*
*
*
*
基本算法篇************************

#冒泡排序

li=[11,12,54,4,6,78]
for i in range(len(li)-1):
for j in range(i+1,len(li)):
if(li[i]<li[j]):
t=li[i]
li[i]=li[j]
li[j]=t

print(li)

#斐波那契数列

def fun(i):
if i==1:
return 1
elif i==2:
return 1
else:
return fun(i-1)+fun(i-2)


i=int(input("input:"))
print(fun(i))
****************结束******************

*
*

#python 装饰器主题*********************************************

在函数执行之前或者在执行之后执行某种功能,不改变函数功能内容的前提之下
def outer(func):
#func=原来的f1函数
def inner():
print("hello")
print("hello")
print("hello")
r=func()
print("end")
print("end")
print("end")
return r

return inner


@outer
#只要执行到这句,就执行outer函数,并将其下面的函数名,当做参数则f1=func
#2将Outer的返回值重新赋值给f1=outer的返回值
def f1():
print("guozhendong")

f1()

1\定义装饰器
2、应用装饰器@装饰器名字


************************************************************结束

*************正则表达式篇******
字符匹配(普通字符,元字符)
12个元字符 . ^ $ * + ? {} [] | () \
re.findall('alex.w','aaaaalexaw') #.代表占位符
import re
>>> re.findall('^alex','alexajdkfj')

###尖角符表示查询的字符串只能在开头才可以查到
re.findall('alex$','adfkjalex')
#### $符表示查询的字符串只能在结尾才能查到
re.findall('alex*','adfkjalex')
## *号表示对最后一个字符的匹配可以没有最后一个x,也可以有多个x,都可以查询的到 0到多个

re.findall('alex+','adfkjalex')
## *号表示对最后一个字符的匹配只可以有多个x,都可以查询的到1到多个
而?号的话只能匹配0个或者1个


re.findall('alex{11}','adfkjalexxx')
{}可以查找固定个数的字符串,xxx可以也可以写成{3,5}


字符集:
re.findall('a[bc]d','abd')
这种形式可以查到abd和acd这两种情况

re.findall('a[.]d',"wwadd")
此时的.将失去意义只有字符串中含有a.d才可以查找到
re.findall('a[a-z]d',"wwadd")#查找任意的小写字母,所以上列是可以查找的到的,也可以改成[1-9]
re.findall('[^1-9]','wwwed5f54') 这个例子会将非数字的全部输出,故尖角符的作用是 非 的意思


\的功能是使元字符的功能失去,如果后边是普通字符,将会实现特殊功能\n即换行
re.findall('\d','www.3wddf0') 输出3 0
re.findall('\w','www.3wddf0') 会将所有的字符全部输出
re.findall('\s','www .3wddf0') 会将空格输出

re.search("(ab)*","aba").group()只能匹配查到到一个
re.match("alex","abalexksdalex")只匹配开头是否有字符串

re.search(r"a(\d+)","a4564").group()
re.search(r"a(\d+?)","a4564").group()
re.search(r"a(\d+*)","a4564").group()
******************结束*********


复习文件操作******总结
open 文件操作
open()
1、文件路径
2、基本操作
r,只读
w,只写(先清空,再进行写的操作)
x,如果文件不存在,先进行创建,如果存在,报错:只写
a,追加,只写
二进制
rb
wb
xb
ab
+ #加号表示在原有的功能基础上增加新功能
r+ ,读写
读,0开始读取
写,指针的位置开始写
先读,最后追加
主动seek,写从当前指针向后写
w+,读写
x+,读写
a+,读写

文件操作*****
trancate,截取前面
read
write
str :无,字符串
bytes:有,字节
readline :只读取一行
readlines["第一行","第二行"]
flush 强行刷入硬盘
close
tell() 获取指针位置
seek() 跳转到某个位置
with open(xx) as f1,open(xx) as f2:

#####装饰器代码总结学习
def xxx(args):
def sb():
print("sb")
r=args()
print("end")
return r
return sb
@xxx
def num():
print("num")
return "num"
s=num()
print(s)

猜你喜欢

转载自www.cnblogs.com/guozhendong/p/8969307.html