count
字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
字符串1.count(字符串2, 开始下标=0, 结束下标=字符串1的长度) - 在字符串1中指定范围内统计字符串2出现的次数
str1 = 'how are you? i am fine, Thank you! And you?'
print(str1.count('you')) # 3
num = str1.count('you', 0, 11) # 1
print(num)
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(抛弃)
字符串.expandtabs() - 将字符串中的制表符替换成 8 个空格(只针对下标是0的制表符有效,后面是 8 - 3)
字符串.expandtabs(N) - 将字符串中的制表符替换成 N 个空格 (只针对下标是0的制表符有效,后面是 - 3)
str2 = 'Naa\tabc\t123'
new_str2 = str2.expandtabs(2)
print(str2, len(str2))
print(new_str2, len(new_str2))
将制表符替换成8个空格
new_str2 = str2.replace('\t', ' '*8)
print(new_str2)
字符串1.split(字符串2) - 将字符串1按照字符串2为切割点进行切割
字符串1.split(字符串2, N) - 将字符串1按照字符串2为切割点进行切割,切 N 次
字符串1.rsplit(字符串2, N) - 将字符串1按照字符串2为切割点进行切割,切 N 次, 从后往前切
str1 = 'how are you? i am fine, Thank you! And you?'
print(str1.split(' ')) # ['how', 'are', 'you?', 'i', 'am', 'fine,', 'Thank', 'you!', 'And', 'you?']
print(str1.split(' ', 2)) # ['how', 'are', 'you? i am fine, Thank you! And you?']
print(str1.rsplit(' ', 2)) # ['how are you? i am fine, Thank you!', 'And', 'you?']
# 'you' -> 'You'
# 'yOU' -> 'You
字符串1.strip() - 同时删除字符串最左边和最右边的空白
字符串1.lstrip() - 删除字符串中最左边的所有空白
字符串1.rstrip() - 删除字符串中最右边的所有空白
字符串1.strip(字符串2) - 同时删除字符串最左边和最右边的字符串2
字符串1.lstrip(字符串2) - 删除字符串中最左边的所有字符串2
字符串1.rstrip(字符串2) - 删除字符串中最右边的所有字符串2
str3 = '\n\t abc 123\n 你好 \n'
print('============================')
print(str3)
print('============================')
print(str3.lstrip())
print('============================')
print(str3.rstrip())
print('============================')
print(str3.strip())
print('============================')
str4 = '**1**abc123***'
print(str4.strip('*')) # 1**abc123
print(str4.rstrip('*')) # **1**abc123
print(str4.lstrip('*')) # 1**abc123***
字符串1.find(字符串2) - 获取字符串2第一次在字符串1中出现的位置(用正的下标值表示),如果找不到返回 -1
字符串1.find(字符串2, 开始下标, 结束下标)
# 练习1:写代码实现查找字符串str1中所有的 'you'出现的位置
start_index = 0
indexs = []
while True:
index = str1.find('you', start_index)
if index == -1:
break
start_index = index + 3
indexs.append(index)
print(indexs)
字符串.join(容器) - 将容器中元素用指定字符串连接在一起(容器中的元素是字符串)
list1 = ['周杰伦', '陈冠希', '林俊杰']
new_str = ' and '.join(list1)
print(new_str)
new_str2 = '+'.join('abc')
print(new_str2)
# 练习2:用列表推导式实现将任意容器中的元素用join进行连接
nums = [10, 20, '30', True]
# print('+'.join(nums)) # TypeError: sequence item 0: expected str instance, int found
nums = {'name': '张三', 'age': 18, 'sex': '男'}
new_str3 = ' '.join([str(x) for x in nums.values()])
print(new_str3)
字符串中某一个或多个部分不确定就可以用格式字符串来实现
语法:包含格式占位符的字符串 % (数据1,数据2,数据3...)
说明:a.数据的个数和前面占位符的个数保持一致
b.格式占位符:
%d - 整数
%Nd/%-Nd - 整数填充字符串时宽度是N,不够的用空格在前边或后边占位
%f - 小数
%.Nf - .N表示保留N为小数
%s - 字符串
注意:一般情况下占位符和数据的类型保持一致,只有%s可以用任意数据的类型
在字符串中通过{}来占位表示字符串中变化的部分
1)一般用法: str1 = '{}今年{}多少岁'.format(name,age) 数据的个数和{}的个数保持一致
2)列表形式的format:{下标}
str2 = '你好我是{0}。 {0}你好'.format(name) name相当于列表中下标是0的元素
3)key的形式format:{key}
str3 = '{name}今年{age}岁,{name}的得分是{score}'.format{name='张三',age=18,score=78}
4)key形式的变形:f'{表达式}'
a, b = 10, 20
str3 = f'a = {a},b = {b}'
print(str3) a = 10,b = 20
5)数字格式化
:.Nf - 显示小数的小数点后的N位
print('数字:{:.2f}.format(3.1231231)') 3.12
print('数字:{1:.2f}.format(3.1234,2.1222)') 2.12
:x>Nd - 数字占N位,不够的用x填充(填在左边)
:x<Nd - 数字占N位,不够的用x填充(填在右边)
::, - 用逗号将数据进行分隔(适用于银行数据显示)
:.N% - 以百分比的形式显示数据,保留N位小数
没有函数的问题
1.同样的功能同样的代码需要多少次就要写多少遍(冗余,重复)
2.如果功能发生改变,所有使用过这个功能的位置都需要修改
解决办法:使用函数
1)概念
函数就是对实现某一特定功能的代码段进行封装
2)分类(谁定义的)
系统函数 - 系统已经定义好的,可以直接使用的函数,比如:print,input,type,ord等等
自定义函数 - 自己定义使用的函数
语法:
def 函数名(形参列表):
函数说明文档
函数体
说明:
def - Python定义函数的关键字,固定写法
函数名 - 程序员自己命名
要求:标识符,不是关键字
规范:所有的字母都小写,多个单词用下划线隔开;不能用系统提供的函数名;见名知义(功能)
(): - 固定写法
形参列表 - 格式:变量名1,变量名2,变量名3.....(变量可以是没有定义过的变量)
形参的作用是将函数外面的数据传递到函数里面
函数说明文档 - 和def保持一个缩进的三个双引号引起来的注释
函数体 - 和def保持一个缩进的一条或者多条语句,就是实现功能的代码
注意:函数定义的时候不会执行函数体
'''
# 初学者定义函数的步骤
'''
1)确定函数功能
2)根据功能确定函数名
3)确定函数的参数(看实现函数的功能需不需要额外的数据,需要几个)
4)实现函数的功能
5)确定函数返回值
6)写函数说明文档
'''
# 定义一个函数,打印指定字符串中大写字母的个数
def dx_count(str1):
"""
统计字符串大写字母个数
:param str1: 需要统计的字符串
:return: None
"""
count = 0
for x in str1:
if 'A' <= x <= 'Z':
count += 1
print(count)
语法:
函数名(实参列表)
说明:
函数名 - 需要调用的函数的名字(必须是已经订好的函数的函数名)
() - 固定写法
实参列表 - 格式:数据1,数据2....(实参的个数与形参的个数保持一致)
作用:用来给形参赋值的(真正传递到函数中使用的数据)
调用函数会执行函数的函数体
1)位置参数
实参直接写,让实参和形参从位置上一一对应
2)关键字参数
以:形参名1 = 值1,形参名2 = 值2…的形式穿参
注意:要保证每个参数都有值
3)位置和关键字参数混合使用
要求;位置参数必须在关键字参数的前面
定义函数的时候可以以:形参名 = 值 的是形式给参数赋默认值,调用的时候有默认值可以不用传参
没有默认值的参数必须放在有默认值的前面
定义函数的时候参数的个数不确定就可以使用不定长参数
1)在形参前加 *
带一个的形参,本质就是一个元组,对应的实参作为元组中的元素
这种不定长参数的函只能用位置参数传参数
2)在形参前加 **
带两个的形参,本质就是一个字典,对应的实参作为字典中的值
这种不定长参数的函只能用关键字参数传参数