一、字符串相关函数
1.计算次数
1)count
语法:
字符串1,count(字符串2) - 统计1中2出现的次数
字符串1,count(字符串2,开始下标,结束下标) - 统计1中指定范围内2出现的次数**
2.替换内容
1)replace
语法:
字符串1.replace(字符串2, 字符串3) - 将字符串1中的字符串2全部替换成字符串3
字符串1.replace(字符串2, 字符串3, N) - 将字符串1中前 N 个字符串2替换成字符串3**
str1 = 'how are you? i am fine, Thank you! And you?'
print(str1.replace('you', 'me')) # how are me? i am fine, Thank me! And me?
print(str1.replace('you', 'me', 1)) # how are me? i am fine, Thank you! And you?
2)expandtabs
语法:
字符串.expendtabs() - 将字符串中的制表符替换成8个空格
字符串.expendtabs(N) - 将字符串中的制表符替换成N个空格
str1 = '\tab\tc123'
new_str = str1.expandtabs(4)
print(str1, len(new_str))
3、字符串切割
语法:
字符串1.split(字符串2) - 将字符串1按照字符串2为切割点进行切割
字符串1.split(字符串2,N) - 将字符串1按照字符串2为切割点进行切割N次
字符串1.rsplit(字符串2) - 将字符串1按照字符串2为切割点进行切割
字符串1.rsplit(字符串2,N) - 将字符串1按照字符串2为切割点进行切割N次,从后往前切
使用:
str1 = '487s54fafg4afg7g7a'
print(str1.split('a')) #['487s54f', 'fg4', 'fg7g7', '']
print(str1.split('a', 2)) #['487s54f', 'fg4', 'fg7g7a']
print(str1.rsplit('a')) #['487s54f', 'fg4', 'fg7g7', '']
print(str1.rsplit('a', 2))#['487s54fafg4', 'fg7g7', '']
4、删除字符
语法:
字符串1.strip() - 同时删除字符串中最右边和最左边的空白
字符串1.lstrip() - 删除字符串中最左边的空白
字符串1.rstrip() - 删除字符串中最右边的空白
字符串1.strip(字符串2) - 同时删除字符串中最右边和最左边的字符串2
字符串1.lstrip(字符串2) - 删除字符串中最左边的字符串2
字符串1.rstrip(字符串2) - 删除字符串中最右边的字符串2
注: 只能删最左或最右的字符串2
str3 = '\n\t abc 123\n 你好 \n'
print(str3)
print('=========================================')
print(str3.lstrip())
print('=========================================')
print(str3.rstrip())
print('=========================================')
print(str3.strip())
print('=========================================')
str4 = '***1**in**1854*4*njvds88**'
print(str4.strip('*'))
print(str4.lstrip('*'))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gcylamv2-1592830397643)(D:\2002\博客\day9\10-1.PNG)]
5、字符串查找
语法:
字符串1.find(字符串2) - 获取字符串2第一次在字符串1中出现的位置(用正的下标表示),如果找不到返回-1
字符串1.find(字符串2,开始下标,结束下标)
例:
str1 = 'how are you? i am fine, thank you!'
print(str1.find('you')) #8
6、拼接
语法:
字符串.join(容器) - 将容器中的元素用指定的字符串连接在一起(容器中的元素是字符串)
例:
list1 = ['czl', 'zbl', 'qhy', 'hy']
new_str = ','.join(list1)
print(new_str) #czl,zbl,qhy,hy
new_str2 = '+'.join('abc')
print(new_str2) #a+b+c
二、格式字符串
格式字符串的作用:
字符串中的某一部分或者多个部分不确定就可以用格式字符串来实现功能
1、格式占位符
语法:
包含格式占位符的字符串%(数据1,数据2,数据3,…)
说明:
a、数据的个数和占位符的个数保持一致
b、格式占位符:
%d - 整数
%s - 字符串
%f/%Nf - 小数,N表示保留N位小数
%Nd/%-Nd - N表示填充的空格数,正负表示空左还是空右
**注:**一般情况下占位符和数据类型需要保持一致,只有%s可以用任何数据填充
name = 'jj'
age = 60
message = '%s今年%s岁!' % (name, age)
print(message) #jj今年60岁!
print('%s今年%5d岁!' % (name, age)) #jj今年 60岁!
print('%s今年%-5d岁!' % (name, age)) #jj今年60 岁!
2、format
format的作用:
在字符串中通过{}来占位表示字符串中变化的部分
1) 数据的个数和{}的个数保持一致
例:
name = 'jj'
age = 60
message = '{}今年{}岁!'.format(name, age)
print(message) #jj今年60岁!
2) 列表形式的format
例:
name = 'jj'
age = 60
message = '你好我是{0}。{0}你好!'.format(name)
print(message) #你好我是jj。jj你好!
str1 = '{1}={0}={1}'.format(10, 20)
print(str1) #20=10=20
3) key形式的format:{key}
str3 = '{0}今年{1}岁,{0}的得分是{2}分!'.format('张三', 18, 78)
str3 = '{name}今年{age}岁,{name}的得分是{score}分!'.format(name='张三', age=18, score=78)
print(str3) #张三今年18岁,张三的得分是78分!
4) key形式的format的变形:
例:
a = 10
b = 20
message = f'{a}+{b}={a + b}'
print(message) #10+20=30
5) 数字格式化
语法:
:.Nf - 显示小数的小数点位数(N位)
冒号前面原来怎么写就怎么写,冒号后才是格式控制
:x>Nd - 数字占N位,不够用X填充(填在左边)
:x<Nd - 数字占N位,不够用X填充(填在右边)
:, - 用逗号将数据进行分隔(通用于银行数据显示)
:N% - 以百分比的形式显示数据,数据保留N位小数
例:
print('数字:{:.2f}'.format(3.1415926)) #数字:3.14
print('数字:{1:.2f}'.format(3.1415926, 1.55555555)) #数字:1.56
n1 = 3.1415926
print(f'数字{n1:.4f}') #数字3.1416
print('数字:{:0>5d}'.format(34)) #数字:00034
print('数字:{:0<5d}'.format(34)) #数字:34000
num = 195620056
print(f'{num:,}') # 195,620,056
num=0.45
print(f'{num:.2%}') #45.00%
三、函数基础
1、函数
1) 概念(最重要)
函数就是对实现某一特定功能的代码的封装
2) 分类(谁定义的)
系统函数 - 系统已经定义了,程序可以直接使用的函数,比如:print,input,type,ord,chr,bin,len,id等。(就像别人造好的机器)
自定义函数 - 程序员自己定义使用的函数。(就像自己造机器)
def jiecheng(num):
result = 1
if num == 1:
return 1
result = num * jiecheng(num - 1)
return result
print(jiecheng(int(input('输入:'))))
2、函数定义
语法:
def 函数名(形参列表):
函数说明文档
函数体
说明:
def - python定义的函数的关键字;固定写法
函数名 - 程序员自己命名
标识符,不是关键字(要求)
所有字母都小写,多个单词之间用下划线隔开;
不能用系统提供的函数名、类名
见名知义(看到函数名大概知道函数的功能是什么)
(): - 固定写法
形参列表 - 格式:变量名1,变量名2,变量名3,变量名4…(变量可以是内有定义过的变量)
形参的作用是将函数外面的数据传到函数里面
函数说明文档 - 和def保持一个缩进的三个双引号引起来的注释(说明书)
函数体 - 和def保持一个缩进的一条或者多条语句:实现函数功能的一条或者多条语句
定义函数的步骤:
第一步:
确定函数的功能
第二步:
根据函数的功能确定函数名
第三步:
确定函数的参数(看实现函数的功能需不需要额外的数据,需要几个)
第四步:
实现函数功能
(第五步:确定函数返回值)
第六步:
写函数说明文档
例:定义一个函数实现求两个数的和的功能
def sum(a,b):
return a+b
print(sum(4,9))
3、函数的调用(使用机器)
语法:
函数名(实参列表)
说明:
函数名 - 需要调用的函数名(函数名必须是已经定义过的函数的函数名)
() - 固定写法
实参列表 - 格式:数据1,数据2,数据3,…
作用:用来给形参赋值的。(真正传递到函数中使用的数据)
调用函数会执行函数的函数体
例:
start_time=time()
print(start_time)
print(fibonacci(8))
print(time()-start_time)
四、函数的参数
1、位置参数和关键字参数(实参分类)
1) 位置参数
实参直接写
def fun1(a, b, c):
print(f'a:{a},b:{b},c:{c}')
fun1(20, 30, 40)
2) 关键字参数
定义:形参名1=值1,形参名2=值2,…的形式传参
注:要保证每个参数都有值
**3)**位置参数和关键字参数混合使用
要求: 位置参数必须在关键字参数前面
例:
fun1(10, c=30, b=20)
fun1(10, 20, c=30)
2、参数默认值(形参)
定义函数的时候可以用:形参名=值 的形式给参数赋默认值。调用函数的时候有默认值的参数可以不用传参
有默认值的参数要放在没有默认值参数的后面
例:
# 所有参数都有默认值
def func2(x=10, y=20, z=30):
print(f'x={x},y={y},z={z}')
func2()
func2(y=40)
def func3(y, x=10, z=20):
print(f'x={x},y={y},z={z}')
func3(y=10)
3、不定长参数(定义)
定义函数的时候参数个数不确定就可以使用不定长参数
1) 在形参前加*
带一个*的形参,本质就是一个元组,对应的实参会作为这个元组的元素
这种不定长参数的函数只能用位置参数传参
2) 在形参前加**
带两个*的形参,本质就是一个字典,对应的实参会作为这个字典的值
这种不定长参数的函数只能用关键字参数传参
例:定义一个函数可以求多个数的和
def yt_sum(*num):
count = 0
for i in num:
count += i
print(count)
yt_sum(1, 2, 3, 4, 5, 6, 7, 8, 9)
def yt_sum2(**num):
print(num)
yt_sum2(num1=1,num2=2,num3=3)