Python3基础知识整理

Python3 基础部分内容

数字,字符,列表,等。

数字

整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。

浮点型(floating point real values) - 浮点型由整数部分与小数部分组成。

复数(complex numbers) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。

#加减乘除取余
+-*/%

# 幂运算
print(2**5)
# 整除
print(10//3)
#返回浮点数x的四舍五入值
print(round(x))
# 绝对值
print(abs(-2))
# 获取商和余数,返回一个元组(3,1)
print(divmod(10,3))
# 舍去小数部分不论多大
print(int(2.8))

类型的转换:

int(x [,base ])
float(x )
# 创建一个复数
complex(real [,imag ])

#将对象 x 转换为表达式字符串 
repr(x )

#用来计算在字符串中的有效Python表达式,并返回一个对象  
eval(str )

str(x )
tuple(s ) 
list(s ) 

字符串

如果你不希望前置了 \ 的字符转义成特殊字符,可以使用 原始字符串方式,在引号前添加 r 即可

字符串字面值可以跨行连续输入。一种方式是用三重引号:"""..."""'''...'''。字符串中的回车换行会自动包含到字符串中,如果不想包含,在行尾添加一个 \ 即可,字符串可以用 + 进行连接(粘到一起),也可以用 * 进行重复。

#一些字符串方法
str1 = "abcd"
#全部小写
print(str1.lower())
#全部大写
print(str1.upper())
#返回a出现的次数
print(str1.count("a"))
#替换a为b
print(str1.replace("a","b"))
#让字符串以宽度10居中周围以~填充
print(str1.center(10,"~"))
#去掉左右包含abd中的字符,=> c
print(str1.strip("abd"))
#str1的长度
print(len(str1))

str2="a,b,c,d"
#返回列表,根据分隔为逗号
print(str2.split(","))
#为1234除了最后一个4以外每个元素增加一个逗号(可以是其他字符串)
#1,2,3,4
print(",".join("1234"))
#逆转字符串[M:N:K],以K为步长对字符取切片
print("\n"+str2[::-1])

输入和输出的一些格式化函数

#输入
input_str=input("请输入:")

#转换进制和编码

#整数的16进制小写形式
hex(10)
#8进制
oct(10)
#逗号起一个空格作用
print(hex(10),oct(10))
#将Unicode转为对应字符 
#python使用Unicode编码
print("Unicode 49:"+str(chr(49)))
#将1(单字符)的Unicode值
print("1 Unicode:"+str(ord("1")))

#输出格式化

#槽号+引导符号是冒号+填充2边的符号+<左对齐,右对齐>,^居中,+槽的宽度
print("format()的格式控制 {0:=^10}{1:*>10}".format("0号","1号"))
#逗号为数字的千位分隔符,点加精度限制浮点数或字符串的最大输出长度,还有输出类型
#(进制)类型有 b,c,d,o,x,X,///数字的表示类型e,E,f,%
print("{0:,}{1:.2f}{2:b}".format(123456789,2.2221,10))

实现一个12星座的字符输出:

#输出12星座的字符
for i in range(12):
    print(chr(9800+i),end=" ")

列表

列表是一种序列类型,创建后可以任意更改。

使用[] list()创建,逗号分隔

列表的赋值仅传递引用不创建一个新列表

myls=[]
#添加
for i in range(5):
    myls.append(i)

print(myls)
#反转列表
myls.reverse()
#生成一个新列表,赋值原列表中所有元素
myls_copy = myls.copy()
print(myls)
print(myls_copy)
#修改元素
myls[1]="1"
print(myls)

#删除一个元素
del myls[1]
print(myls)
#删除1到3下标的元素
del myls[1:4]
#del ls[0:3:2]#删除ls 0到3以步长为2的切片元素,就是对应的[0],[2]
print(myls)
print(0 in myls)
#将列表中出现的第一个元素0删除,
#如果没有该元素则ValueError异常,只删除第一个出现的
myls.remove(0)
#在lb中第0位置取出元素并删除该元素
myls.pop(0)

#插入,2是下标,在指定下标插入一个新元素,原本的元素后移
myls.insert(2,9)
print(myls)
#在后面添加新元素
myls.append(0)
print(myls)

#只能返回第一个出现的下标
print(myls.index(0))
#0出现的总次数
print(myls.count(0))
#长度
print(len(myls))
#最大值
print(max(myls))
#清空列表
myls.clear()
print(myls)

元组

区别于列表,元组创建后不能修改,没有什么特殊的操作。

使用()或者tuple()创建,可以使用()也可以不用,逗号分隔,元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组。

元组中只包含一个元素时,需要在元素后面添加逗号,防止被当作括号运算.

tuple1=()
#不使用()
mytuple=1,2,3,4,5
print(mytuple)
tuple1+=(1,2,3,4)
#元组套元组
mytuple_tuple=(1,2,3,mytuple)
print(mytuple_tuple)
#由于这个元组里的最后一个元素还是一个元组可以再使用[-1]读取他的最后一个元素
print(mytuple_tuple[-1][-1])

tuple2=(1,2,3,4,5)
#并不改变本来的元组,而是生成一个新的元组逆序
print(tuple2[::-1])
print(tuple1[1])

#删除整个元组
del tuple1
#最大
print(max(tuple2))
#统计次数
print(tuple2.count(1))
#长度
print(len(tuple2))
#下标
print(tuple2.index(3))
#转换
list1=[1,2,3,4,5]
#将列表转换为元组
tuple3=tuple(list1)
#用切片的方式更新元组,生成新的元组副本
#元组中只包含一个元素时,需要在元素后面添加逗号,防止被当作括号运算.
tuple3=tuple3[:2]+(8,)+tuple3[2:]
print(tuple3)

list2 = list(tuple3)
print(list2)

集合

S|T 返回一个新集合,包括在集合S和T中的所有元素 (并)

S-T 返回一个新集合,包括在集合S但不在T中的元素 (差)

S&T ···,包括同时在集合S和T中的元素 (交)

S^T ···,包括集合S和T中的非相同元素(补)

提供 S<=T,S<T,返回True或False 判断S T的子集关系

提供 S>=T,S>T,····,判断S T的包含关系

集合类型无相同元素,元素无序,元素不能被修改,要产生一个空集合必须用set()

A ={"p","y",123}
B =set("pypy123")#将其他变量类型变为集合类型,如这里字符串变为集合
print(B)
print(A-B)#在A中出现,但是B中不出现的
print(A&B)#A,B同时存在的元素
print(A|B)#A,B所有元素
print(A^B)#A,B除去同时存在的元素
try:
    A.add('t')#如果t不在A中,将t加入A
    C=A.copy()#返回一个A的副本
    print(C)
    print(len(A))#返回A的元素个数
    print('t' in A)#判断A中元素t,t在A则返回True ,否则False
    A.discard('t')#移出A中的t元素,如果t不在A中不报错
    print('t' not in A)#判断A中元素t,t不在A则返回True ,否则False
    A.remove('t')#移出A中的t元素,如果t不在A中,产生KeyError异常
except KeyError:
    print("KeyError")
try:
    while True:
        print(A.pop(),end="")#A中取出元素,元素为空时会产生一个异常
except:
    print("\n")
#数据去重主要
ls=[123,123,456,789]
st=set(ls)
ls=list(st)
print(ls)#利用列表转集合再集合转列表实现去重

字典

字典(映射类型,由用户为数据定义索引,而序列类型由0···n作为默认索引)

使用{}dict()创建,键值用 : 分隔,键值对之前用逗号分隔。

区别于集合的括号,大括号默认生成一个字典而不是集合。

mydict={
    1:"one",
    2:"two",
    3:"three"
}
#删除键1对应的数据值
del mydict[1]
print(mydict)
print(len(mydict))
#判断1是否在字典里
print(1 in mydict)
#返回所有的键信息
print(mydict.keys())
#返回所有的值信息,可以遍历但是不能当作list操作
print(mydict.values())
#返回所有键值对信息
print(mydict.items())
#键 1 存在则返回相应的值,否则返回 不存在<或者其他设置值>
print(mydict.get(1,"不存在"))
#键 2 存在则取出并删除,否则返回不存在
print(mydict.pop(2,"不存在"))
print(mydict)
#取出最后一个键值对返回并删除,以元组形式返回
print(mydict.popitem())
mydict.clear()#删除所有键值对
print(mydict)

文件操作

文件的打开-操作-关闭

文本文件&二进制文件,open(,)close()

文本内容的读取: .read(), .readline() .readlines()

数据的文件写入: .write() .writelines() .seek()

本质上文件都是2进制形式存储,形式上所有文件采用2种方式展示:文本文件,2进制文件(img等等)

r :只读模式,默认模式,不存在返回FileNotFoundError

w :覆盖写模式,文件不存在则创建,存在则完全覆盖

x :创建写模式,文件不存在则创建,存在返回FileExistError

a :追加写模式,文件不存在则创建,存在则在文件尾追加内容

b :2进制模式

t :文本文件模式(默认)

+:与r/w/x/a 一起使用,在原功能上增加同时读写功能 a+等等

#打开
open(file, 
     mode='r', 
     buffering=-1, 
     encoding=None, 
     errors=None, 
     newline=None, 
     closefd=True, 
     opener=None)

myfile=open(r"C:\Users\霁\Desktop\mytest\mypython\my_IO.txt",
            "w",
            encoding="utf-8")
#操作
#向文件写入一个字符串或字节流
myfile.write("123456789\n")
#关闭
myfile.close()

#再次打开
myfile=open(r"C:\Users\霁\Desktop\mytest\mypython\my_IO.txt",
            "a+",
            encoding="utf-8")
#读入一行内容,如果给出参数,读入该行前size长度
print(myfile.readline(size=-1))
myfile.read(size=-1)

#一次读入统一处理,遍历文本的第一种方法
str1=myfile.read()
#读入全部内容,如果给出参数,读入前size=3长度字符或2进制
print(str1)

ls=["中国","北京","上海"]
#a+从文件尾加入内容
#将一个元素全为字符串的列表写入文件,拼接后写入
myfile.writelines(ls)

#myfile.seek(offset) offset=0/1/2  
# 0为文件开头 1为当前位置 2为文件结尾

#写完回到文件头,这样下一行读出来的就不是空值了
myfile.seek(0)
#读入文件所有行,每行为元素形成列表返回,给出参数,读入前hint行
print(myfile.readlines())

myfile.close()

##方法2 按数量读入,逐步处理
# myfile2=open(r"C:\Users\霁\Desktop\mytest\mypython\my_IO.txt","r",encoding="utf-8")
# txt=myfile2.read(2)
# while txt !="":
#     <#对txt处理>
#     txt=myfile2.read(2)#按2个字符进行依次操作
# myfile2.close()


##方法3 逐行操作
# txt2=open("fname","r",encoding="utf-8")
# for line in txt2.readlines():  或者 for line in txt2:
#     print(line)                       #分行读入,逐行处理
# txt2.close()

函数

将逻辑独立出来,以达到一定的重用性。

包括匿名的函数声明。

匿名函数:

#lambda函数 定义匿名函数
#<函数名> =lambda <参数>:<表达式>等价于def <函数名>(<参数>):<函数体> return <返回值>
f=lambda x,y:x+y
print(f(1,2))

参数的定义和返回值:

#可选参数如m,要放在必选参数后面  
#计算  n!//m 
def mydef(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return s//m
print("不选参数m:{}".format(mydef(2)))
print("选择m:{}".format(mydef(2,2)))
#不确定参数
#计算 n! *其他参数
def mydef2(n,*b):
    s=1
    for i in range(1,n+1):
        s*=i
    for item in b:
        s*=item
    return s
print("b:{}".format(mydef2(2,2)))
print("b:{}".format(mydef2(3,1)))#3!*1
print("b:{}".format(mydef2(3,1,2)))#3!*1*2
print("b:{}".format(mydef2(3,1,2,3)))#3!*1*2*3
#函数可以直接用位置传参数,也可以直接使用参数赋值,如:mydef(m=10,n=5)==mydef(5,10)
#函数可以返回0个或者多个结果,可以有返回值也可以没有
def mydef3(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return s//m,n,m,s
a,b,c,d=mydef3(2)
print(mydef3(2))#元祖类型返回
print(a,b,c,d)#可以将多个返回值分别赋予abcd
#global 用于将局部变量声明成全局变量
#局部变量为组合数据类型且未创建,等同于全局变量 
ls=["1","2"]
def func(a):
    ls=[]#被创建后可以变成局部变量
    ls.append(a)#此处ls未被创建,等同于全局变量,所以是在1,2的基础上+上字符a
    return ls
print(ls,func("c"))#返回的全局和局部

运用以上内容实现一个统计单词出现次数:

# 哈姆雷特统计

# 获取文本内容
def getText():
    txt=open(
        r"C:\Users\霁\Desktop\mytest\mypython\Hamlet.txt",
        "r",
        encoding="utf-8").read()
    txt = txt.lower()
    # 替换特殊字符
    for ch in '!"@#$%&()+-*/,.:;<=>?[\\]^_‘{|}~':
        txt = txt.replace(ch," ")
    return txt

# 保存文本
hamletTxt = getText()
# 分隔出单词
words = hamletTxt.split()
counts = {}
for word in words:
    #是0则+1=1所以相当于加了一对键值对
    counts[word]=counts.get(word,0)+1
    
#一个元组对应的一个列表项
items=list(counts.items())

#使用匿名函数进行获取多元列表里的第二项
items.sort(key=lambda x:x[1],reverse=True)
#默认从小到大,使用reverse=True让其返回从大到小,
#前面的key=lambda x:x[1]则是让其排序使用count值进行排序,
#即选择多元列表里的第2个,如:[(li,2)]选取2

for i in range(10):
    #将排序好的列表项的键值对分别赋值打印
    word,count = items[i]
    print("{0:<20} {1:>5}".format(word,count))

总结

包括基本的数据类型和结构的处理。主要是数据结构的基本函数,对数据进行操作。

包括文件流才操作。暂时未包括一些类库的函数的使用。



奖励一下