01基本概念和基本数据类型
变量是编程语言中最基本的概念,和字面意思一样,指的就是他们的值可变,和我们以前学习的方程类似,变量可以代入任何值。
2数字类型:
整数:int
浮点数:float
布尔型:bool:(True,False)
数值类型计算
/ 除法
// 整除
% #取余
** #幂运算
在Python中bool型的True和False分别等同于 1 和 0, 也可以直接进行运算
3.字符串
isinstance()判断类型 #s=1 isinstance(s,str)返回False或True
字符串也可以进行加法和乘法的运算,但是都是进行字符串的拼接
字符串的拼接
1.’+’
2.join方法 ‘ ’.join([a,b,c,d,e,f])
3.‘%s%s%s’%(a,b,c) %s占位符
4.format方法 ‘{0}{1}{2}’.format(s,t,r)
5.format方法简写 f’{s}{t}{r}’
字符串格式化:
1.‘%6d’%123 #%d格式化整数,6表示字符串长度
输出’ 123’
2.‘%09.2f’%357.268 #%f格式化浮点数,0表示用0填充;2表示只保留2位小数,9表示输出字符串的长度
‘000357.27’
3.‘%c’ % 97 #格式化成ASCII码
‘a’
4.’%o’ % 8 #八进制输出
‘10’
5.’%x’ % 16 #十六进制输出
‘10’
6.’%e’%10000 #%e格式化输出科学计数法
‘1.000000e+04’
7.’%r’%’123’ # %r 对象原样输出
简写 r’123’
字符串的format方法
format同样也是字符串格式化输出方法,并且功能更加强大实用,推荐使用,并且在3.5之后的版本增加了f-string的用法,基本用法和format类似
整数:
b: 输出整数的二进制方式
C: 输出整数对应的unicode字符
d: 输出整数的十进制方式
o: 输出整数的八进制方式
x: 输出整数的十六进制方式
X: 输出整数的大写十六进制方式
浮点数:
e: 输出浮点数对应的小写字母e的指数形式
E:输出浮点数对应的大写字母E的指数形式
f :输出浮点数的标准浮点型形式
% :输出浮点数的百分比形式
字符串处理函数len(x)返回字符串x的长度或者是其他组合类型的元素个数
str(x)把任意类型转换为字符串形式
chr(x)返回Unicode编码对应的单字符
ord(x)返回单个字符对应的Unicode编码
hex(x)返回整数x对应的十六进制的小写形式
oct(x)返回整数x对应的八进制的小写形式
字符串处理方法
方法 描述
a=str.lower() 以小写的方式全部返回str的副本
A=str.upper() 以大写的方式全部返回str的副本
a=str.split(sep=None) 返回一个列表,以sep作为分隔点,sep默认为空格
a=str.count(sub) 返回sub子串出现的次数
a=str.replace(old,new) 返回字符串str的副本,所有old子串被替换为new
str.center(width,fillchar) 字符串居中函数,fillchar参数可选
str.strip(chars) 从字符串str中去掉在其左侧和右侧chars中列出的字符
str.join(iter) 将iter变量的每一个元素后面增加一个str字符串
转义字符
转义字符 描述含义
\b 退格,把光标移到前一列的位置
\f 换页符
\n 换行符
\r 回车
\t 水平制表符
\v 垂直制表符
类型转换函数
int(x):将x转换为整数
float(x):将x转换为浮点数
str(x):将x转换为字符串
4.常见数值模块
浮点数高精度计算
可以使用 decimal 模块来做浮点数的精确计算,使用时注意传入的是一个字符串
Import decimal
Decimal.Decimal(‘str’)
math模块
Math模块有常见的数学函数,有需要的可以在这个模块里面找找
Math.pi=3.1415926535
math.ceil(i)向上取整
Math.floor(i)向下取整
Math.fabs(i)取绝对值
Math.sqrt(i)开平方
Math.pow(x,y) x的y次方
重要:dir(math)查询math模块里的属性和方法
dir(对象)查询对象的属性和方法
Help(函数或方法)查询函数方法功能
02条件语句和while循环
if语句:
!= 不等于
== 等于
三目运算
True if a>5 else False
后面这种同样也是判断,但是要简洁很相当多,这样可以节省很多的代码,让代码看起来更加简洁,注意:只有简单if判断可以使用,过于复杂判断就不要使用了,那样会影响代码的可读性
逻辑运算
常见判断符
大于 小于 大于等于 小于等于 等于 不等于
与逻辑
当需要同时判断多个内容的时候,可以使用 与、或、非 等逻辑来同时判断多个条件
and
表示“并且”或者“和” 的意思,只有当 and 两边都是为真的时候,才会返回 真, 在其他语言中常用 & 来表示 and
或逻辑
or
表示“或者”的意思,只要两边存在真,就会返回真,都会假才会返回假, 在其他语言中常用 | 来表示 or
非逻辑
not
表示“取反”的意思,也就是真的会变成假的,假的会变成真的,在其他语言中常用 ! 来表示 not
逻辑短路(代码执行顺序从上到下,从左到右,and,or有逻辑短路,not没有逻辑短路
)
逻辑运算过程中,如果已经能够得到最后的值,则不会再进行后面的判断,这个称为逻辑短路
三者之间的优先级:not>and>or
Python底层会把连续判断转化成and 连接的形式
如:1>2>3 ------>1>2 and 2>3
注释快捷键:选中,Alt+3,
取消注释快捷键:选中,Alt+4
while循环
break提前终止程序,跳出当前循环,不执行else
continue跳出本次循环,开始下次循环,执行else语句
while 循环后面也可以接上else循环,当循环正常结束时,就会执行else 内的代码
while 后面也可以直接跟上True,但是内部就必须要使用break来终止循环
使用break终止的循环,是不会执行else的内容
While a<5:
Continue
Else:
Pass
快捷键ctrl+]统一向右缩进,ctrl+[统一向左缩进
print(a,end=’ ’)print 里面的 end 可以设置每个值打印之后输出的字符串,默认是换行
03循环语句和列表元组
for循环,循环的次数由可迭代对象的长度决定,可迭代对象(字符串,列表)
查看是否是可迭代对象的方法 dir(对象),有’iter’就是可迭代对象
for循环可以把字符串里面的每个元素都依次取出来,自动赋值给变量 i, 然后再执行循环体内的代码块
range 函数可以取到一个范围内的整数,相比 while 要方便很多
for i in range(10):
for 循环又称为计数循环,是因为 for 循环次数由可迭代对象来决定,我们学过的字符串就是可迭代对象,以及我们后面要学的列表、元组、字典、集合等都属于可迭代对象。 现在大家可以用for循环来判断对象是否是可迭代的。
for i in range(1,10,2)
for循环 和 while循环中都可以使用break 和 continue
同时后面也可以接上else,当循环被break终止时,else不会执行
列表推导表达式
Li=[] 定义空列表
Li.append(i)追加元素
列表推导表达式可以快速生成一个列表,并能筛选列表的值
[i for i in range(101) if i%2 == 0 ]#列表推导表达式
#列表推导式和三目运算混合使用
#li=[i100 if i%2==0 else i10 for i in range(10)]
range(开始值,结束值,步长)#左闭右开,默认从0开始
列表
列表就如同一个菜篮子,可以放菜,也可以放钱
因此列表里面既可以放字符串,也可以放数值类型数据
除此之外,列表里面可以几乎放python的任何对象
len()#查看长度
列表的索引(index)取值
列表中每个元素在列表中的位置称为索引(index),可以通过索引值来取对应位置上的值
注意:
#改 赋值语句
a[n]= **
li[0:3]=’abc’可迭代对象会自动遍历
#li[0:3]=[‘aa’,’xx’,’cc’]可迭代对象会自动遍历,替换数量不需要相同
#a=li.count(i)统计元素出现的次数
#a=sorted(li)临时排序,不改变原列表
#a=sorted(li,reverse=True)临时反向排序
#元组 tuple 元组不能修改
#元组可以索引取值
#元组也能切片
#元组不能替换元素
#index()根据元素查找对应元素索引
#tu=(1,)元组只有一个元素,也要加上逗号
#元组拆包,(字符串,列表也可以,字典为键值)
#tu=(1,2,3,4,56,8,79,8,7)
#a,b,c=tu按顺序接收元组的元素值,c为列表
#多余的给带号的变量接收,并放在列表里面,带号的是不定长参数
#*号只能给一个变量,也就是只能存在一个不定长参数
04字符串和散列类型
##str1 = ‘hello world’
#字符串方法
##s = ’ hello world ’
str2 = ‘hello world this is python’
##print(‘hello\tworld’)
##print(‘hello\0world’)
##print(‘hello\nworld’)
##print(r’\nab\acd\0e\t’)
##str1 = ‘安言’
##str2 = str1.encode(encoding=‘utf-8’)
##str2 = str1.encode(‘utf-8’)
##str2 = str1.encode() # b’\xe5\xae\x89\xe8\xa8\x80’
##str3 = str2.decode # ‘安言’
#数字是一个整体,不属于序列类型和散列类型
##li1 = [‘name’,‘age’,‘city’]
##li2 = [‘安言’,18,‘changsha’]
##print(‘安言今年’,li2[li1.index(‘age’)])
##dic = {‘name’:‘安言’,‘age’:18 ,‘city’:‘changsha’}
##dic1 = {} # 1.空字典,a={}是定义空字典不是空集合
##dic2 = {‘a’:1,‘b’:2} # 2.常规定义
##dic3 = dict(a=1,b=2,c=3) # 3.使用dict函数定义字典
dic = {‘name’:‘安言’,‘age’:18 ,‘city’:‘changsha’}
##set1 = {1,2,3,4,1,2,3,4}
##set1 = {1,‘a’,‘b’,2,3}
##set1 = {1,2,3,4,5,7}
##set2 = {1,3,5,7}
##set3 = {‘a’,‘b’}
##print(set1 & set2)
##print(set1 | set3)
##print(set1 - set2)
##set1 = {1,3,5,7}
##set1 = {1,2,3,4,5,6}
##set2 = {4,5,6}
##set3 = {3,4,5}
#a = 100
#b = 100
#a is b True
#a=300
#b=300
#a is b False
##li = [1,2,3,4] # 1 in li # 6 not in li
#深浅复制,只在嵌套列表当中存在
#li.copy()浅复制
##li = [1,2,3,[4,5,6]]
#深复制
#import copy
#li = [1,2,3,[4,5,6]]
#li1 = copy.deepcopy(li)
第五节课–函数
函数的定义和调用
自定义函数
def是定义函数的关键词
函数调用:函数名(自定义)
返回值 return
当不存在返回值时,默认返回None
当存在返回值时,返回具体的数据
返回值之后的代码不会执行
Example:return x,y,z
func函数名,代表函数体,也就是函数本身
func(1,2),代表函数调用,也就是函数执行之后的结果
##函数的参数,参数没有数据类型的限制
#顺序:先必备,再默认,最后不定长参数(定义函数时),
#在输入实参调用函数时,可以按顺序执行,当没有或不输入不定长参数1时,可以用x=1的形式,这时可以不考虑顺序
#1.必备参数(x),定义了几个必备参数,函数调用就需要传几个参数值,一个也不能多,一个也不能少
#2.默认参数(y),y=值,当不给默认值的时候,会把默认值给默认参数接收,当传值,就是我们传进去的值
#3.不定长参数(*args,**kwargs)
#args是不定长参数,数据放在元组里
#kwargs是不定长参数,数据放在字典里面,键只能是字符串类型
#args和kwargs都不是规定写法,但是这是规范写法
例子:def func(x,y=2,*args,**kwargs) -> str:
#help(func) 可以返回函数或方法简介
#拆包
return 1,2,3
对于函数来说,当返回多个数据时,是以元祖的形式返回的,可以拆包
#函数的作用域
在函数里定义的变量为局部变量,函数内不能直接使用函数外变量,函数外不能直接使用函数内变量
global x #声明全局变量
nonlocal x #声明局部变量,即声明当前函数外的变量
#闭包(外层函数返回内层函数的函数体,这就是闭包)
如:
def func():
lv = 5
#增加血量
def func1():
nonlocal lv
lv+= 1
print(lv)
def func2():
nonlocal lv
lv -= 1
print(lv)
return func1,func2
#递归函数:自身调用自身
##def func(n):
##a = lambda x:x+1
##def a(x):
##li = [2,4,6,8,10]
##def func(x):
##print(list(filter(func,li)))
##print(list(filter(lambda x:x>5,li)))
##li = [2,4,6,8,10]
##print(list(map(lambda x:x-1,li)))
##tu = (‘a’,‘b’,‘c’)
##li = [2,4,6]
####print(dict(zip(tu,li)))
##print(list(zip(tu,li)))
##def func1(f):
##def func2():
##func1(func2)在这里插入代码片