回顾
# 字符串(str)
# 不可变的(不支持增删改):有序(支持下标操作)
# 字符:' 普通字符和转义字符
# \b \t \' \" \\ \u4位的16进制数
# 阻止转义:R’ ‘ r’‘
# '字符编码 ord(字符) chr(数字)
# 字符串操作 查运算符 in not in len str
# 字符串相关方法 join split replace
总结
格式字符串
-
格式字符串:格式占位符
''' # 语法:包含格式占位符的字符串% (数据1,数据2,...)(前面有多少个占位符,后面就有多少个数字 # 说明:括号中数据的个数需要和格式占位符的个数保持一致 格式占位符: %S --任何类型数据 %d:--整数、(可以转化为整数的 %f:-- 浮点数 %.Nf -保留N位小数 %c %p(地址(c 语言 '''
-
%s 可以使用任意类型的数据填充(如果只有一个数据小括号可以省)
message = '%s 今年 %d 岁' % (23, 4) print(message) message = ' %d 岁' % 4 print(message) message = '名字:%s ' % ['网文','里欸'] print(message) #名字:['网文', '里欸'] message = '月薪:%.2f ' % 4 print(message) #月薪:4.00
-
格式化字符串: f - string (字符串.format)
f’包含{}的字符集’
{}里可以是任意的表达式
name = 1 age = 3 message = f'{name}今年{age}岁' print(message) message = f'a:{133+68}b:{44+45}' print(message) message = f'a:{[133,23,4]}b:{44+45}' print(message) #a:[133, 23, 4]b:89 message = f'a:{[133,23,4][0]}' print(message) #a:133
-
{表达式:.nf} - 控制保留N位小数
message = f'a:{13.3:.3f}' print(message) message = f'a:{1234.45:.3f}' print(message)
-
{表达式:,}
money = 2345004 message = f'金额:{money:,}' print(message) money = 10200010.433 message8 = f'金额:{money:,.2f}' print(message8) # 金额:10,200,010.43
-
{表达式:.n%}
num = 2.45 message = f'金额{num:.3%}' print(message) #金额245.000%
函数
- 什么式函数
- 函数就是实现某一功能的代码的封装
- 函数的分类(根据函数是由谁创造(定义)来分类
'''
系统函数(别人造好的机器) - python自带的函数,程序员只需要在需要的时候调用。例如:print input type max min、
自定义函数(自己造机器)-由程序员自己定义的函数
'''
- 函数的定义(自己造机器)
'''
语法:
def 函数名(形参列表):
函数说明文档
函数体
说明:
def - 关键字;固定写法
函数名- 程序员自己命名
要求:是标识符,不能是关键字
规范:见名知义、(看到函数名大概知道函数的功能)字母都小写,多个单词之间用下划线隔开、不使用系统名
(): - 固定写法
形参列表 - 以‘变量名1,变量名2,变量名3,...’的形式存在,变量也可以一个没有。 (这的一个变量就是一个形参)
形参的作用:将函数外部的数据传递到函数内部
一个函数需不需要形参,需要几个形参,就看实现这个函数的功能需不需要额外的数据,需要几个额外的数据。
函数说明文档 -本质就是文档注释(相当于机器的说明书)
函数体 -- 和def保持一个缩进的一条或者多条语句
函数体就是实现函数功能的代码段
初学者定义函数的步骤:
第一步:确定函数功能
第二步:根据函数功能确定函数名
第三步:确定形参(看实现这个函数功能需不需要额外的数据,需要几个额外的数据。)
第四步:实现函数功能,这个时候将形参当数据来用(写函数体)
第五步:写函数说明文档
'''
# 练习1:写函数,其功能是求任意两个数的和
def sum3(num1,num2):
'''
求任意两个数的和
:param num1: 第一个数
:param num2: 第二个数
:return: None
'''
print(num1 + num2)
sum3(3,4) #7
# 练习2:写一个函数提取指定字符串中中文的个数
def get_chinese1(str1):
'''
提取指定字符串中中文的个数
:param str1: 被提取的字符串
:return: None
'''
print(''.join( x for x in str1 if '\u4e00' <= x <= '\u9fa5'))
get_chinese1('24ggu中国') #中国
练习3:写一个函数将列表中的元素逆序
def resever_str1(str1):
'''
将列表中的元素逆序
:param str1: 需要被逆序的字符串
:return: None
'''
print(str1[::-1])
resever_str1('ggyfyu7') #7uyfygg
# 练习4:写一个函数判断指定的数是否是水仙花数。
# (三位数各个位上的数的立方和等于它本身)
def is_daffodil_num1(num):
'''
判断指定的数是否是水仙花数
:param num: 输入的三位数数字
:return: None
'''
str1 = str(num)
sum1 = 0
if len(str1) != 0:
print(False)
else:
for x in str1:
sum1 += x**3
if sum1 == num:
print(True)
else:
print(False)
is_daffodil_num1(456 #False
-
调用函数(使用机器)
''' 特点重要的结论:定义函数的时候不会执行函数体,调用函数才会执行函数体 语法: 函数名(实参列表) 说明: 函数名 - 必须是已经定义过的函数的函数名 ()--固定写法 实参列表 - 以’数据1,数据2,...‘的形式存在。这的每个数据就是一个实参,实参是用来给形参赋值的 函数调用过程(非常重要): 第一步:回到函数定义的位置 第二部:传参(用实参给形参赋值,传参的时候必须保证每个参数都有值 第三部:执行函数体 第四步:确定函数返回值 第五步:回到函数调用的位置,接着往后执行 ''' # def func(): # print('878') # print('ih') # 不执行 # print('jjh') #执行 执行 # 同一个函数可以调用多次 # sum1(23,45) # sum1(23,5)
作业
-
编写一个函数,交换指定字典的key和value。
例如:dict1={'a':1, 'b':2, 'c':3} --> dict1={1:'a', 2:'b', 3:'c'} def exchange_dict(dict1): ''' 交换指定字典的key和value :param dict1: 被交换的字典 :return: None ''' dict2 = {} for x in dict1: dict2[dict1[x]] = x print(dict2) exchange_dict({'a': 1, 'b': 2, 'c': 3})
-
编写一个函数,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串
例如: 传入'12a&bc12d-+' --> 'abcd' '12a&bc12d-+' --> 'abcd' def get_str1(str1): ''' 提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串 :param str1: 被提取的字符串 :return: None ''' print(''.join(x for x in str1 if 'a' <= x <= 'z' or 'A' <= x <= 'Z')) get_str1('szvbh7g[') #szvbhg
-
写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母
例如: 'abc' -> 'Abc' '12asd' --> '12asd' def fist_upper(str1): ''' 将指定字符串的首字母变成大写字母 :param str1: 被指定的字符串 :return: None ''' str2 = '' if 'a' <= str1[0] <= 'z': str2 += chr(ord(str1[0]) - 32) str2 += str1[1:] print(str2) else: print(str1) fist_upper('sdaf23jguy7') #Sdaf23jguy7
-
写一个自己的endswith函数,判断一个字符串是否已指定的字符串结束
例如: 字符串1:'abc231ab' 字符串2:'ab' 函数结果为: True 字符串1:'abc231ab' 字符串2:'ab1' 函数结果为: False def endswith1(str1,str2): ''' 判断一个字符串是否已指定的字符串结束 :param str1: 被判断字符串 :param str2: 结尾字符串 :return: None ''' if str1[-len(str2):] == str2: print(True) else: print(False) endswith1('adffg','ffg') #True
-
写一个自己的isdigit函数,判断一个字符串是否是纯数字字符串
例如: '1234921' 结果: True '23函数' 结果: False 'a2390' 结果: False def isdigit1(str1): ''' 判断一个字符串是否是纯数字字符串 :param str1: 被指定字符串 :return: None ''' for x in str1: if not ('0' <= x <= '9'): print(False) break else: print(True) isdigit1('67[;,') #False
-
写一个自己的upper函数,将一个字符串中所有的小写字母变成大写字母
例如: 'abH23好rp1' 结果: 'ABH23好RP1' def upper1(str1): ''' 将一个字符串中所有的小写字母变成大写字母 :param str1: 被指定字符串 :return: None ''' str2 = '' for x in str1: if 'a' <= x <= 'z': x = chr(ord(x) - 32) # str2 += x else: x str2 += x print(str2) upper1('hg3') # HG3
-
写一个自己的rjust函数,创建一个字符串的长度是指定长度,原字符串在新字符串中右对齐,剩下的部分用指定的字符填充
例如: 原字符:'abc' 宽度: 7 字符:'^' 结果: '^^^^abc' 原字符:'你好吗' 宽度: 5 字符:'0' 结果: '00你好吗' def rjust1(str1,num1,str2): ''' 创建一个字符串的长度是指定长度,原字符串在新字符串中右对齐,剩下的部分用指定的字符填充 :param str1: 原字符串 :param num1: 指定长度 :param str2: 新字符 :return:None ''' print(str2*(num1-len(str1)) + str1) rjust1('sfg',6,'9')
-
写一个自己的index函数,统计指定列表中指定元素的所有下标,如果列表中没有指定元素返回-1
例如: 列表: [1, 2, 45, 'abc', 1, '你好', 1, 0] 元素: 1 结果: 0,4,6 列表: ['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权'] 元素: '赵云' 结果: 0,4 列表: ['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权'] 元素: '关羽' 结果: -1 def index1(list1,x): ''' 统计指定列表中指定元素的所有下标,如果列表中没有指定元素返回-1 :param list1: 指定列表 :param x: 需要判断元素 :return: None ''' if x not in list1: print(-1) else: count = 0 list0 = '' for y in list1: count += 1 if y == x: list0 += str(count -1) print(','.join(list0)) index1([3,6,45,6,6,2,5,4],6) #1,3,4
-
写一个自己的len函数,统计指定序列中元素的个数
例如: 序列:[1, 3, 5, 6] 结果: 4 序列:(1, 34, 'a', 45, 'bbb') 结果: 5 序列:'hello w' 结果: 7 def len_list(list1): ''' 统计指定序列中元素的个数 :param str1: 指定序列 :return: None ''' count = 0 for x in list1: count += 1 print(count) len_list([12,34,5,6]) #4 len_list('hello w' ) #7
-
写一个自己的max函数,获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值
例如: 序列:[-7, -12, -1, -9] 结果: -1 序列:'abcdpzasdz' 结果: 'z' 序列:{'小明':90, '张三': 76, '路飞':30, '小花': 98} 结果: 98 def max1(list1): ''' # # 10写一个自己的max函数,获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值 :param list1: 指定序列 :return: None ''' if type(list1) == dict: max2 = 0 for x in list1: if list1[x] > max2: max2 =list1[x] print(max2) else: max3 = list1[0] for x in list1[1:]: if x > max3: max3 = x print(max3)
-
写一个函数实现自己in操作,判断指定序列中,指定的元素是否存在
例如: 序列: (12, 90, 'abc') 元素: '90' 结果: False 序列: [12, 90, 'abc'] 元素: 90 结果: True def in_list(list2,x): ''' 判断指定序列中,指定的元素是否存在 :param list2: 指定序列 :param x: 指定的元素 :return: None ''' for y in list2: if y == x: print(True) break else: print(False) # in_list([12, '90', 'abc'] ,90)
-
写一个自己的replace函数,将指定字符串中指定的旧字符串转换成指定的新字符串
例如: 原字符串: 'how are you? and you?' 旧字符串: 'you' 新字符串:'me' 结果: 'how are me? and me?' def replace_str(str1,str2,str3): ''' 将指定字符串中指定的旧字符串转换成指定的新字符串 :param str1: 指定字符串 :param str2: 指定字符串中指定的旧字符串 :param str3: 指定的新字符串 :return: None ''' str4 = '' for x in str1.split(str2): str4 = str4 + x + str3 print(str4) replace_str('sfdgfjhfigcfj','fj','sd') # sfdgsdhfigcsdsd