字符串:r语法、相关方法、函数开头(2021-9-27)
一、r语法
在字符串的最前面加r或者R,可以让字符串中所有的转义字符的功能消失(每个符号都会变成普通字符)
str1 = r'C:\users\name\test\demo.py'
print(str1)
二、字符串格式化
name = '小明'
age = 18
message = 'xxx今年xx岁!'
message = name + '今年' + str(age) + '岁!'
print(message) # 小明今年18岁!
方法二:格式字符串
message = '%s今年%d岁!' % (name, age)
print(message) # 小明今年18岁!
方法三:f - string
message = f'{name}今年{age}岁!'
print(message) # 小明今年18岁!
1、格式字符串
语法:包含格式占位符字符串%(数据1, 数据2, …)
格式占位符:
%s - 字符串占位符
%d - 整数占位符
%f - 浮点数占位符(保留六位小数)
%.Nf - 浮点数保留N位小数
1)%s可以给任何类型的数据占位
str1 = '%sfnejwknf' % ('你好')
print(str1) # 你好fnejwknf
str1 = '%sxxx' % ([10, 20])
print(str1) # [10, 20]xxx
2)%d可以给任何能转换成整数的数字数据占位
str1 = '%dxxxx' % 23
print(str1) # 23xxxx
3)%f可以给任何能转换成浮点数的数字数据占位
str1 = '%fxxxx' % 3.43
print(str1) # 3.430000xxxx
str1 = '余额:%.2f' % 34325
print(str1) # 余额:34325.00
str1 = '%s今年%d岁,月薪:%.2f' % ('牛牛', 24, 10000)
print(str1) # 牛牛今年24岁,月薪:10000.00
2、f-string
1)基本用法
语法:f’{任何有结果的表达式}’
2)加参数
语法:f’{任何有结果的表达式:.Nf}’
参数:
.Nf - 控制小数位数
, - 逗号分隔银行金额的格式
.N% - 将数据转换成百分比,比值保留N位小数
X > N - 将数据转换成长度为N的字符串,不够在前面用X对应的字符来填充
X < N - 将数据转换成长度为N的字符串,不够在后面用X对应的字符来填充
1、基本用法
str1 = f'你好'
print(str1) # 你好
str1 = f'姓名:{name}\t年龄:{age}'
print(str1) # 姓名:小明 年龄:18
2、参数
a、.Nf
money = 2445
str1 = f'金额:{money:.2f}'
print(str1) # 金额:2445.00
b、,
money = 4355352
str1 = f'余额:{money:,}'
print(str1) # 余额:4,355,352
c、%
rate = 0.5
str1 = f'市场占有率:{rate:.2%}'
print(str1) # 市场占有率:50.00%
d、X > N X < N
X - 填充字符
X - 目标长度
num = 5
str1 = f'Python2106{num:0>3}'
print(str1)
str1 = f'Python2106{num:好<2}'
print(str1)
三、字符串相关方法
1、center、rjust、ljust、zfill
字符串.center(长度,填充字符)
字符串.rjust(长度,填充字符)
字符串.ljust(长度,填充字符)
字符串.zfill(长度) == 字符串.rjust(长度, ‘0’)
print('abc'.center(7, 's')) # ssabcss
print('abc'.rjust(7, 's')) # ssssabc
print('abc'.ljust(7, 's')) # abcssss
print('abc'.zfill(7)) # 0000abc
2、count
字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
字符串1.count(字符串2, 开始下标, 结束下标) - 在开始下标到结束下标(取不到,开区间)对应的范围内统计的字符串2出现的次数
str1 = 'abcdefjabdghal'
print(str1.count('a')) # 3
print(str1.count('a', 0, 9)) # 2
3、find、index、rfind、rindex
字符串1.find(字符串2) - 获取字符串1中字符串2第一次出现的位置,返回0开始的下标值,如果字符串2不存在返回-1
字符串1.index(字符串2) - 获取字符串1中字符串2第一次出现的位置,返回0开始的下标值,如果字符串2不存在报错
字符串1.find
str1 = 'abcdefjabdghal'
print(str1.find('g')) # 10
print(str1.index('g')) # 10
print(str1.find('g1')) # -1
print(str1.index('g1')) # 报错
print(str1.find('g', 0, 8)) # -1
print(str1.index('g', 0, 11)) # # 10
print(str1.rfind('g')) # 10
print(str1.rindex('g')) # 10
4、isdigit、isnumeric
字符串.isdigit() - 判断是否是纯数字字符串(数字指0~9的数字字符)
字符串.isnumeric() - 判断是否是纯数字字符串(数字指具有数字意义的字符)
print('3141515'.isdigit()) # True
print('1241415'.isnumeric()) # True
print('3141515一'.isdigit()) # False
print('3141515一百'.isnumeric()) # True
5、islower、isupper
字符串1.islower() - 判断字符串是否是纯小写字母字符串
字符.islower() - 判断是否是小写字母
字符串1.isupper() - 判断字符串是否是纯大写字母字符串
字符.isupper() - 判断是否是大写字母
print('safaf'.islower()) # True
print('FSSFA'.isupper()) # True
6、join
字符串.join(序列) - 将序列中的元素用指定的字符串拼接成一个新的字符串
注意:序列中的元素必须是字符串
result = '+'.join('abc')
print(result) # a+b+c
result = '+'.join(['小明', '牛牛', '瓦塔'])
print(result) # 小明+牛牛+瓦塔
result = '+'.join([2, 4]) # 报错
练习、将列表中的元素合并成一个字符串
['abc', 100, 12.5, True, 'hello'] -> 'abc10012.5Truehello'
list1 = ['abc', 100, 12.5, True, 'hello']
result = ''.join((str(x) for x in list1))
print(result)
练习2:已经一个列表保存多个学生的分数,提取所有学生的姓名,以一个字符串的形式返回
[{‘name’:‘张三’, ‘age’: 18}, {‘name’:‘小明’, ‘age’: 20}, {‘name’:‘小花’, ‘age’: 30}] -> ‘张三,小明,小花’
students = [{'name':'张三', 'age': 18}, {'name':'小明', 'age': 20}, {'name':'小花', 'age': 30}]
result = ','.join(x['name'] for x in students)
print(result)
7、strip、lstrip、rtrip
字符串.strip() - 去掉字符串两端的空白字符
字符串.lstrip() - 去掉字符串前面的空白
字符串.rstrip() - 去掉字符串后面的空白
str1 = ' \tabc 123 \n'
result = str1.strip()
print('==', result, '==', sep='') # ==abc 123==
result = str1.lstrip()
print('==', result, '==', sep='') # ==abc 123
# ==
result = str1.rstrip()
print('==', result, '==', sep='') # == abc 123==
8、replace
字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2替换成字符串3
字符串1.replace(字符串2, 字符串3, N) - 替换前N个
str1 = 'abcdefjabdghal'
result = str1.replace('a','u')
print(result) # ubcdefjubdghul
result = str1.replace('a','u',2)
print(result) # ubcdefjubdghal
9、maketrans、translate
str.maketrans(字符串1, 字符串2) - 创建一张字符串1和字符串2的字符对应表
字符串.translate(表)
table = str.maketrans('abc', '你好吗')
str1 = 'abcdefjabdghal'
result = str1.translate(table)
print(result) # 你好吗defj你好dgh你l
练习:将字符串中所有的阿拉伯数字都替换成对应的中文数字
'123木头人, 88' -> '一二三木头人, 八八'
table = str.maketrans('0123456789', '零一二三四五六七八九')
str1 = '123木头人, 88'
result = str1.translate(table)
print(result)
10、split
字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割
str1 = 'abcdefjabdghal'
result = str1.split('a')
print(result) # ['', 'bcdefj', 'bdgh', 'l']
注意:如果切割点在最前面或者最后或者出现连续的切割点,结果会出现空串
四、认识函数和定义函数
1、认识函数
1)概念:函数就是对实现某以特定功能的代码的封装
2)函数的分类:
a、系统函数(系统造好的机器) - 有Python创建好的函数,例如:print、input、type、max …
b、自定义函数(自己造机器) - 由程序员自己创建的函数
2、定义函数(创建函数)
语法:
def 函数名(形参列表):
函数说明文档
函数体
说明:
a、def - 关键字;固定写法
b、函数名 - 由程序员自己命名
要求:是标识符;不能是关键字
规范:见名知义(看到函数名大概指定这个函数的功能是什么);
所有字母都小写,多个单词之间用下划线隔开;
不能使用系统函数名、类别、模块名。
c、() - 固定写法
d、形参列表 - 以’变量名1, 变量名2, 变量名3,…'格式存在,这的每个变量就是一个形参,如果不需要形参,括号里什么都不用写
形参是用来将函数外部的数据传递到函数内部。(可以理解成连接函数外部和函数内部的通道)
需不需要形参就看实现函数的功能需不需要额外的数据
e、: - 固定写法
f、函数说明文档 - 本质就是文档注释
g、函数体 - 和def保持一个缩进的一条或者多条语句;
函数体就是实现函数功能的代码
练习1:定义一个函数,求任意两个数的和
def sum1(num1, num2):
print(num1 + num2)
练习2:定义一个函数,求N的阶乘
def factorial(n):
result = 1
for x in range(1, n + 1):
result *= x
print(result)