day10-字符串和函数基础
一.字符串相关方法
字符串.xxx()
1.字符串.join(序列) - 将序列中的元素通过指定的字符串拼接成一个新的字符串
list = ["100", "200", "300"]
result = "+".join(list)
print(result)
练习:将nums中的元素用‘+’拼接
nums = [19, 23, 45, 67, 23, 90]
result1 = "+".join([str(x) for x in nums])
print(result1)
2.字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割的进行切割,返回一个列表
字符串1.split(字符串2,N) - 将字符串1中前N个字符串2作为切割的进行切割,返回一个列表
注意:切割点在字符串开头,字符串结尾,或者切割点连续出现,会切割出空串
str1 = '大撒大abc撒大撒abc大娃发abc生发的'
result3 = str1.split('abc')
print(result3) # ['大撒大', '撒大撒', '大娃发', '生发的']
练习:提取str2中所有的数字
str3 = '19+23+45+67+23+90'
result3 = str3.split('+')
print(([int(x) for x in result3]))
字符串1.replacve(字符串2,字符串3)-将1中2替换成3
字符串1.replacve(字符串2,字符串3,N)-将1中2前N个替换成3
str1 = '你好abc123abc哈哈哈abc呵呵呵abc==='
print(str1.replace('abc', '')) # 你好123哈哈哈呵呵呵===
4.字符串1.find(字符串2) - 查找字符串1中字符串2第一次出现的位置,若2不存在返回-1
字符串1.index(字符串2) - 查找字符串1中字符串2第一次出现的位置.若2不存在报错
stra = '你好abc123abc哈哈哈abc呵呵呵abc==='
print(stra.find('abc'))
print(stra.find('hellow')) # 报错
5.字符串1.count(字符串2) - 统计字符串1中字符串2中出现的次数
字符串1.count(字符串2,开始下标,结束下标)-统计字符串1中指定范围字符串2中出现的次数
strb = '你好abc123abc哈哈哈abc呵呵呵abc==='
print(strb.count('abc'))
print(strb.count('abc', -7))
print(strb.count('abc', 2))
print(strb.count('abc', 3, -7))
字符串.upper() - 将字符串中所有小写字母转换成大写
字符串.lower() - 将字符串中所有小写字母转换成大写
print('a123'.upper())
print('HDJD123'.lower())
str.maketrans(字符串1,字符串2) - 创建字符串1中所有字符串2中所有字符的对应关系表(字符串1和字符串2长度必须一样)
字符串.translate(对应关系表) - 将字符串中的字符按照对应关系表中的对应关系进行替换
table = str.maketrans('abc', '123')
print(table) # {97: 49, 98: 50, 99: 51}
str1 = 'how are you? and baby? come!'
result = str1.translate(table)
print(result) # how 1re you? 1nd 212y? 3ome!
message = '电话号码:156555544'
table1 = str.maketrans('0123456789', '零一二三四五六七八九')
result1 = message.translate(table1)
print(result1)
1)字符串.
1)字符串.isdecimal() -判断字符串是否是纯数字字符串(任何独立存在表示数值意义的字符)
2)字符串.isdecimal() -判断字符串是否是纯数字字符串(数字只表示阿拉伯数字)
3)字符串.isupper() -判断字符串是否是大写字母
4)字符串.islower() -判断字符串是否是小写字母
print('566565545'.isnumeric()) # True
print('566565545'.isdigit()) # True
print('5665一五八5'.isnumeric()) # True
print('5665一五八5'.isdigit()) # False
print('566Ⅱ5一五八5'.isnumeric()) # True
print('adascas'.islower()) # True
print('SFAFWA'.isupper()) # True
二.格式字符串
name = input('请输入姓名:')
age = int(input('请输入年龄'))
# 案列:’xxx今年xx岁!‘
# 1.字符串拼接
message = name + '今年' + str(age) + '岁!'
print(message)
2.字符串格式占位符
包含格式占位符的字符串%(数据1,数据2,数据3,…)——数据与占位符数量一致
常见的格式占位符:
%s - 可以给任何类型的数据占位
%d - 数字占位符,拼接的时候会将数字转为整型
%f - 数字占位符,拼接的时候数字会保留6位小数
%.Nf - 数字占位符,拼接的时候数字会保留N位小数
str1 = 'x:%s y:%d z:%f t:%.2f' % ([10, 20, 30], -199, 374, 234.54455)
print(str1)
3.f-string
在字符串最外加f,然后在字符串中通过{表达式}来提供字符串内容
message = '%s今年%d岁!' % (name, age)
print(message)
message = f'{name}今年{age}岁'
print(message)
# {}内可以写任何有结果的表达式
message1 = f'{name[0]}今年{age * 10}岁'
print(message1)
a = b = c = 100
str2 = f'a:{a - 3}, b:{b * 2 / 5},c:{300 + c}'
print(str2)
1)f-string可以在{}中添加参数:{提供数据表达式:参数}
1)控制小数位数的参数:{表达式:.Nf}
x = 3.51254
str3 = f'x:{x:.2f}'
print(str3)
2)百分比:{表达式:.N%} ——N控制小数位数
x = 0.67
str4 = f'1周就业率:{x:.1%}'
print(str4)
3)大数据逗号显示:{表达式:,}
x = 15488565525
str5 = f"余额为:{x:,}元" # 余额为:15,488,565,525元
print(str5)
# 结合使用
str6 = f"余额为:{x:,.2f}元" # 余额为:15,488,565,525.00元
print(str6)
4)控制填充长度{表达式:字符>长度} ,{表达式:字符<长度},{表达式:字符^长度}.字符不写的时候不够的自动用空格填
让无论输入什么长度一样 1-001 23 - 023 231 -231
x = 32
str7 = f'学号为:python2206{x:0>3}' # x长度为3.不够0来填.>为填前面 ^为填中间 #学号为:python2206032
print(str7)
str8 = f'学号为:python2206{x:0<3}' # 学号为:python2206320
print(str8)
str9 = f'学号为:python2206{x:0^5}' # 学号为:python220603200
print(str9)
stra = f'学号为:python2206{x:>3}' # 学号为:python2206 32
print(stra)
三.认识函数
# 相当于给函数打包.封装函数 def jiecheng(n):公式 - 求阶乘
def jiecheng(n):
sum1 = 1
for x in range(1,n+1):
sum1 *= x
print(sum1)
jiecheng(10)
jiecheng(8)
# 将操作保存在函数.操作修改也方便
def left():
print('-------左移--------')
print('打左转向灯')
print('观察后视镜')
print('左打方向盘')
print('踩油门')
print('回正方向盘')
def cai():
print('踩油门')
left()
left()
cai()
四.函数的定义和调用
函数就是实现某一特定功能的代码的封装(函数就是把实现某一个功能的所有代码打成一个包,以后再需要这段代码对应的功能的时候不需要再去写这个代码了,而是直接调用封装这段代码的函数)
2.函数的分类
根据函数是由谁创建的可以将函数分为:系统函数,自定义函数
1)系统函数 —— 由python(系统)创建的函数,列如:print(函数),input(函数),type(函数),min(函数),max(函数)…
2)自定义函数 —— 由程序员自己创建的函数
3.定义函数(创建函数)
语法:
def 函数名(形参列表)
函数说明
函数体
说明:
def — 关键字:固定写法
函数名 - 由程序员自己命名;
要求:是标识符号;不是关键字
规范:见名知意思(让别人看见函数名就大概知道这个函数的功能);所有字母都小写,多个单词之间用下划线隔开;
不使用系统函数名,类名,模块名
3)() —— 固定写法
4)形参列表 —— 以’变量名1,变量名2,变量名3…‘的形式存在(这儿变量名的数量可以是任意多个,也可以一个没有)
形参可以将函数外部的数据传递到函数内部
定义函数的时候需不需要形参,需要几个形参,就看实现函数的功能需不需要额外的数据,需要几个额外的数据.
5): - 固定写法
6): - 本质就是多行注释
7)函数体 - 结构上,和def保持一个缩进的一条或者多条语句(至少一条);
逻辑上,函数体就是实现函数功能的代码
4.调用函数
语法:
函数名(实参列表)
说明:
函数名 - 需要哪个函数的功能就调用哪个函数,就写哪个函数名
() - 固定写法
实参列表 - 以’数据1,数据2,数据3,…‘数据的个数由函数定义的时候的形参决定的
# 案列:定义一个函数可以求任意两个数的和
def sum2(num1, num2):
'''
(功能说明区)求两个数之和
:param num1: (参数说明)第一个数据
:param num2: (参数说明)第二个数据
:return: (返回值说明)None
'''
print(num1 + num2)
# 练习1:定义一个函数求:1+2+3+..+n
def a(n):
sum3 = 0
for x in range(1, n+1):
sum3 += x
print(sum3)
a(10)
a(20)
# 练习2:定义一个函数统计字符串中数字字符的个数
def count_num(w):
sum3 = len(w)
print(sum3)
def count_num1(str1):
count = 0
for x in str1:
if '0' <= x <= '9':
count += 1
print(count)
count_num1('dadasd5554')
# 练习3:定义一个函数删除列表中空元素(None、''、[])
def del1(l):
for x in l.copy():
if not x and x != 0:
l.remove(x)
print(l)
del1(['', 5, 6])
# 练习4:定义一个函数,将两个字符串交叉合并成一个新的字符串
# 'abcmjjjgh' '123' -> 'a1b2c3'
def merge_str(str1, str2):
len1 = len(str1)
len2 = len(str2)
count = min(len1, len2)
str3 = ''
for x in range(count):
str3 += str1[x] + str2[x]
str3 += str1[count:] + str2[count:]
print(str3)
merge_str('abc', '123hs')