字符串和函数
一、格式字符串
1.格式字符串
语法:带有占位符的字符串%(数据1, 数据2, 数据3, …)
说明:
1.格式占位符 - 字符串不同类型的占位符号,固定的。
- %s - 字符串的格式占位符(人格类型的数据都可以赋值)
- %d - 整数的格式占位符
- %f - 浮点数的格式占位符
- %Nf - 浮点数的占位符,并且控制小数点有N为小数
- %c - 字符的格式占位符(c语言中)
2.%() - 固定写法
3.数据 - 最后给字符串中不确定内容赋值的数据;数据的个数和类型要和前面占位符的个数以及类型保持一致。
message = '%s 性别:%s,年龄:%d,今天考了%d分' % ('小明', '男', 18, 60)
print(message) # 小明 性别:男,年龄:18,今天考了60分
message2 = '金额:%f' % (12)
print(message2) # 金额:12.000000
message3 = '金额:%.2f' % (12)
print(message3) # 金额:12.00
2.format字符串(f-string)
format是带{}的字符串。
用法1:format(数据1, 数据2, 数据3, …)
message = '大家好,我是{},今年{}岁,我是一只{}。'.format('小白', '3', '银狐')
print(message) # 大家好,我是小白,今年3岁,我是一只银狐。
用法2:{下标}
message = '大家好,我是{0},我的名字是{0},今年{1}岁'.format('渣渣辉', 18)
print(message) # 大家好,我是渣渣辉,我的名字是渣渣辉,今年18岁
用法3:{key}
message = '大家好,我是{name},我的名字是{name},今年{age}岁'.format(name='渣渣辉', age=18)
print(message) # 大家好,我是渣渣辉,我的名字是渣渣辉,今年18岁
加参数:{:约束}/{下标:约束}/{key:约束}
- 约束小数位数 - {:.Nf}
message1 = 'a:{:.1f}, b:{:.2f}'.format(10, 20)
print(message1) # a:10.0, b:20.00
message1 = 'a:{0:.1f}, b:{1:.2f},a:{0:.1f}'.format(10, 20)
print(message1) # a:10.0, b:20.00,a:10.0
- 控制显示符号
print('a:{:+} b:{:+}'.format(10, -20)) # a:+10 b-20
- 控制数字的宽度:{;x>N}/{:x<N} - N表示数据最终的位数,x是填充数字,>表示填充在原数字左边,<填充在右边。
print('a:{:>5}, b:{:<5}'.format(10, 20)) # a: 10, b:20
print('a:{:0>5}, b:{:0<5}'.format(10, 20)) # a:00010, b:20000
print('a:{:x>5}, b:{:y<5}'.format(10, 20)) # a:xxx10, b:20yyy
- 大数字逗号隔开:{:,}
print('a:{:,}, b:{:,}'.format(100, 1000000000)) # a:100, b:1,000,000,000
- 显示百分比:{:.N%} - N控制百分比数小数点的位数
print('a:{:%}, b:{:%}'.format(0.12, 0.789)) # a:12.000000%, b:78.900000%
print('a:{:.2%}, b:{:.1%}'.format(0.12, 0.789)) # a:12.00%, b:78.9%
f-string的用法
name = '小辉辉'
age = 18
message = f'姓名:{name}, 年龄:{age:.1f}'
print(message) # 姓名:小辉辉, 年龄:18.0
二、字符串的常用方法
1.center\rjust\ljust
print('abc'.center(7, 'x')) # xxabcxx
print('abc'.rjust(7, 'x')) # xxxxabc
print('abc'.ljust(7, 'x')) # abcxxxx
- zfill == rjust填充字符是固定0
print('abc'.zfill(7)) # 0000abc
- count - 统计字符串中指定字符或者指定字符串出现的次数
message = 'how are you? i am file. and you?'
print(message.count('a')) # 3
print(message.count('a', 0, 10)) # 在下标0到9的范围内统计'a'的次数
- index/find - 查找字符串的位置
print(message.index('you')) # 8
print(message.find('you')) # 8
print(message.index('you+')) # 没有的时候,报错! ValueError: substring not found
print(message.find('you+')) # 没有的时候返回-1
- join
字符串.join.(序列) - 将序列中的元素用指定字符串拼接成一个新的字符串(序列中的元素必须都是字符串)
list1 = ['name', 'age', 'sex']
print(''.join(list1)) # nameagesex
print(' '.join(list1)) # name age sex
print('abc'.join(list1)) # nameabcageabcsex
print('='.join({'a': 10, 'b': 20})) # a=b
- lstrip/rstrip/strip - 删除空白
print('原字符串:', message, '--------', sep='')
print('lstrip:', message.lstrip(), '-------', sep='')
print('rstrip:', message.rstrip(), '-------', sep='')
print('strip:', message.strip(), '------', sep='')
print('=========')
原字符串:
abc 123 --------
lstrip:abc 123 -------
rstrip:
abc 123-------
strip:abc 123------
=========
- replace
字符串1.replace(字符串2, 字符串3) - 将字符串1中的字符串2全部替换成字符串3
message = 'how are you? i am file. and you?'
new_str2 = message.replace('you', 'me')
print(new_str2) # how are me? i am file. and me?
new_str2 = message.replace('you', 'me', 1) # 1是替换次数
print(new_str2) # how are me? i am file. and you?
- split
字符串1.split(字符串2) - 将字符串2作为切割点对字符串1进行分割
message = 'how are you? i am file. and you?'
print(message.split(' ')) # ['how', 'are', 'you?', 'i', 'am', 'file.', 'and', 'you?']
三、函数的定义
1.什么是函数
- 函数的概念(函数就是机器)
函数就是实现某一特定功能的代码的封装。 - 函数的分类
系统函数:系统已经定义好的函数,程序员根据需求直接使用。例如:print、input、type等(别人造好的机器)
2.定义函数(造机器)
语法:
def 函数名(形参列表):
函数说明文档
函数体
说明:
- def - 关键字;固定写法
- 函数名 - 程序员自己命名;
要求;标识符;不能是关键字。
规范:所有字母都小写,多个单词之间用下划线隔开;见名知义(看到函数名大概知道函数的功能);不能使用系统自带的函数名、模块名和类名。 - 形参列表 - 以:变量名1,变量名2,变量名3,…的形式存在(可以一个变量都没有);形参的作用是将函数外部的数据传递到函数的内部。定义函数的时候需不需要形参需要几个形参看实现函数的功能需不需要额外的数据, 需要几个。
- 函数说明文档 - 就是用""" “”"表示的说明性的文字(相当于机器的说明书)
- 函数体 - 和def保持一个缩进的一条或者多条语句;就是实现函数功能的一条或者多条语句。
注意:定义函数的时候不会执行函数体!!!调用函数的时候才会执行函数体。
3.初学者定义函数的步骤
第一步:确定函数的功能
第二步:根据函数的功能确定函数名字
第三步:确定函数的参数(看实现韩式的功能需不需要额外的数据,需要几个)
第四步:实现函数的功能
第五步:写函数的说明文档
练习1:定义一个函数求两个数的和。
def sum1(num1, num2):
"""
练习:求两个数的和(函数功能的说明)
:param num1: 需要求和的第一个数 (参数的说明)
:param num2: 需要求和的第二个数
:return: None(返回值说明)
"""
print(num1+num2)
练习2:定义一个函数求一个数的阶乘
def wj_factorial(n):
"""
求一个数的阶乘
:param n: 需要求阶乘的数
:return: None
"""
count = 1
for x in range(1, n+1):
count *= x
print(count)
执行函数的时候不会执行函数体
def func1():
list1 = [1, 2, 3]
print(list1[100]) # 没有报
4.调用函数
语法:
函数名(实参列表)
说明:
函数名 - 已经定义好的函数的函数名
实参列表 - 以 数据1, 数据2, 数据3, …的形式存在(也可以没有); 真正传递到函数中使用的数据。
sum1(10, 20) # 30
sum1(100, 300) # 400
wj_factorial(10) # 3628800