字符串和函数基础day10

字符串和函数基础

字符串的相关方法

1.统计次数

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)

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(抛弃)

字符串.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)

3.字符串切割

字符串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

4.删除字符

字符串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***

5.字符串查找

字符串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)

6.拼接

字符串.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.格式占位符

语法:包含格式占位符的字符串 % (数据1,数据2,数据3...)
说明:a.数据的个数和前面占位符的个数保持一致
      b.格式占位符:
      %d - 整数
      %Nd/%-Nd - 整数填充字符串时宽度是N,不够的用空格在前边或后边占位
      %f - 小数
      %.Nf - .N表示保留N为小数
      %s - 字符串
注意:一般情况下占位符和数据的类型保持一致,只有%s可以用任意数据的类型

2.format

在字符串中通过{}来占位表示字符串中变化的部分
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.什么是函数

1)概念
函数就是对实现某一特定功能的代码段进行封装
2)分类(谁定义的)
系统函数 - 系统已经定义好的,可以直接使用的函数,比如:print,input,type,ord等等
自定义函数 - 自己定义使用的函数

2.函数的意义

语法:
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)

3.函数的调用(使用函数)

语法:
函数名(实参列表)
说明:
函数名 - 需要调用的函数的名字(必须是已经订好的函数的函数名)
() - 固定写法
实参列表 - 格式:数据1,数据2....(实参的个数与形参的个数保持一致)
           作用:用来给形参赋值的(真正传递到函数中使用的数据)
调用函数会执行函数的函数体

函数的参数

1.位置参数和关键字参数(实参分类)

1)位置参数
实参直接写,让实参和形参从位置上一一对应
2)关键字参数
以:形参名1 = 值1,形参名2 = 值2…的形式穿参
注意:要保证每个参数都有值
3)位置和关键字参数混合使用
要求;位置参数必须在关键字参数的前面

2.参数默认值(形参)

定义函数的时候可以以:形参名 = 值 的是形式给参数赋默认值,调用的时候有默认值可以不用传参
没有默认值的参数必须放在有默认值的前面

3.不定长参数

定义函数的时候参数的个数不确定就可以使用不定长参数
1)在形参前加 *
带一个的形参,本质就是一个元组,对应的实参作为元组中的元素
这种不定长参数的函只能用位置参数传参数
2)在形参前加 **
带两个
的形参,本质就是一个字典,对应的实参作为字典中的值
这种不定长参数的函只能用关键字参数传参数

你可能感兴趣的:(字符串和函数基础day10)