总结
1.格式字符串
-
格式化字符串: 格式占位符
- 语法: 包含格式占位符的字符串 % (数据1, 数据2, 数据3, …)
- 说明: 括号中数据的个数需要和格式占位符的个数保持一致
-
格式占位符
- %s - 字符串(任何类型的数据); %s可以使用任何意义类型的数据填充(如果只有一个数据,()可以省略)
- %d - 整数
- %f - 浮点数; %.Nf - 保留N位小数
name = '囧囧' age = 21 message = name + '今年' + str(age) + '岁' print(message) message = '%s今年%d岁' % (name, age) message = '名字:%s' % ['张三', '李四'] print(message) # 名字:['张三', '李四'] message = '月薪:%.2f' % 13001.5781 print(message) # 月薪:13001.58
-
格式化字符串: f-string(字符串.format())
f’包含{}的字符集’
message = f'{name}今年{age}岁' print(message) message = f'a:{100 + 200}, b:{10 * 20}' print(message) # a:300, b:200
- {表达式:.Nf} - 空值保留N位小数
message = f'a:{1.234:.2f}' print(message) # a:1.23
- {表达式:,}
money = 1020001201 message = f'金额:{money:,}' print(message) # 金额:1,020,001,201 money = 10000000.1421 message = f'金额:{money:,.2f}' print(message) # 金额:10,000,000.14
- {表达式:.N%}
num = 0.56 message = f'毛利率:{num:.2%}' print(message) # 毛利率:56.00%
2. 函数基础
-
什么是函数
函数就是实现某一特定功能的代码的封装
-
函数的分类(根据函数是由谁创造(定义)的来分类的)
- 系统函数(别人造好的机器) - python自带的函数, 程序员只需要在需要的时候调用
- 自定义函数(自己造机器) - 由程序员自己创造(定义)的函数
-
定义函数(自己造机器)
语法:
def 函数名(形参列表):
函数说明文档
函数体
说明:
def - 关键字, 固定写法
函数名 - 程序员自己命名
要求: 是标识符, 不能是关键字
关键字: 见名知义(看到函数名大概直到函数的功能), 字母都小写, 多个单词用下划线隔开, 不使用系统名字
(): - 固定写法
形参列表 - 以’变量名1, '变量名2, 变量名3, …'的形式存在,变量也可以一个都没有.(这儿的一个变量就是一个形参)
形参的作用: 将函数外部的数据传递到函数内部
一个函数需不要需要形参, 需要几个形参, 就看实现函数的功能需不需要额外的数据, 需要及格额外的数据
函数说明文档 - 本质就是文档注释(相当于机器的说明书)
函数体 - 和def保持一个缩进的一条或者多条语句
函数体就是实现函数功能的代码段
初学者定义的步骤:
第一步: 确定函数功能
第二步: 根据函数功能确定函数名
第三步: 确定形参(看实现这个函数的功能需不需要额外的数据,需要几个额外的数据)
第四步: 实现函数功能(写函数体)
第五步: 写函数说明文档练习1: 写一个函数, 其功能是求任意两个数的和
def sum2(num1, num2): """ 求两个数的和(功能说明) :param num1: int或者float, 第一个数(参数说明) :param num2: 第二个数 :return: None(返回值) """ print(num1 + num2)
练习2: 写一个函数提取指定字符串中中文的个数
def get_chinese(str1): """ 提取字符串中中文 :param str1: 被提取的字符串 :return: None """ print(''.join(x for x in str1 if '\u4e00' <= x <= '\u9fa5'))
练习3: 写一个函数将列表中的元素逆序
def reverse_list(list1): """ 将列表中的元素逆序 :param list1: 被逆序的列表 :return: None """ print(list1[::-1])
练习4: 写一个函数判断指定的数是否是水仙花数.(三位数各个位上的数的立方和等于它本身)
def is_daffodil_num(num): """ 判断一个数是否是水仙花数 :param num: 被判断的数 :return: None """ num_str = str(num) if len(num_str) != 3: print(False) else: sum1 = 0 for x in num_str: sum1 += int(x)**3 if sum1 == num: print(True) else: print(False)
-
调用函数(使用机器)
特别重要的结论: 定义函数的时候不会执行函数体,调用函数才会执行函数体
同一个函数可以多次调用
语法:
函数名(实参列表)
说明:
函数名 - 必须是已经定义过的函数的函数名
() - 固定写法
实参列表 - 以’数据1, 数据2, 数据3, …'的形式存在, 这儿的每个数据就是一个实参,实参是用来给形参赋值的
-
函数调用过程
第一步: 回到函数定义的位置
第二步: 传参(用实参给形参赋值, 传参的时候必须保证每个参数都由值)
第三步: 执行函数体
第四步: 确定函数返回值
第五步: 回到函数调用的位置, 接着往后执行
作业
-
编写一个函数,交换指定字典的key和value。 例如:dict1={‘a’:1, ‘b’:2, ‘c’:3}–> dict1={1:‘a’, 2:‘b’, 3:‘c’}
def change_key_value(dict1): """ 交换字典的key和value :param dict1: 被交换key和value的字典 :return:None """ print({dict1[x]: x for x in dict1})
-
编写一个函数,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串.例如: 传入’12a&bc12d-+’ --> ‘abcd’
def get_letter(str1): """ 提取字符串中所有的字母 :param str1: 被提取的字符串 :return: None """ print(''.join(x for x in str1 if 'a' <= x <= 'z' or 'A' <= x <= 'Z'))
-
写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母.例如: ‘abc’ -> ‘Abc’ ‘12asd’ --> ‘12asd’
def first_capital(str1): """ 将字符串的首字母变成大写字母 :param str1:首字母被变成大写字母的字符串 :return:None """ print(chr(ord(str1[0]) - 32) + str1[1:])
-
写一个自己的endswith函数,判断一个字符串是否已指定的字符串结束.
例如: 字符串1:‘abc231ab’ 字符串2:‘ab’ 函数结果为: True
字符串1:‘abc231ab’ 字符串2:‘ab1’ 函数结果为: False
def str_end(str1, str2): """ 判断一个字符串是否已指定的字符串结束 :param str1:被判断是否指定的字符串结束 :param str2:指定的结尾的字符串 :return:None """ if len(str1.split(str2)[-1]) == 0: print(True) else: print(False)
-
写一个自己的isdigit函数,判断一个字符串是否是纯数字字符串.
例如: ‘1234921’ 结果: True
‘23函数’ 结果: False
‘a2390’ 结果: False
def only_num(str1): """ 判断一个字符串是否是纯数字字符串 :param str1:被判断的字符串 :return:None """ for x in str1: if '0' <= x <= '9': pass else: print(False) break else: print(True)
-
写一个自己的upper函数,将一个字符串中所有的小写字母变成大写字母.
例如: ‘abH23好rp1’ 结果: ‘ABH23好RP1’
def new_upper(str1): """ 将字符串中所有的小写字母变成大写字母 :param str1:被改变的字符串 :return:None """ print(''.join(chr(ord(x) - 32) if x.islower() else x for x in str1))
-
写一个自己的rjust函数,创建一个字符串的长度是指定长度,原字符串在新字符串中右对齐,剩下的部分用指定的字符填充
例如: 原字符:‘abc’ 宽度: 7 字符:’^’ 结果: ‘^^^^abc’
原字符:‘你好吗’ 宽度: 5 字符:‘0’ 结果: ‘00你好吗’
def new_just(str1, num, str2): """ 字符串向由对齐,剩下部分用指定的字符填充 :param str1:原字符串 :param num:指定长度 :param str2:填充字符 :return:None """ str3 = '' for x in range(num - len(str1)): str3 += str2 print(str3 + str1)
-
写一个自己的index函数,统计指定列表中指定元素的所有下标,如果列表中没有指定元素返回-1.
例如: 列表: [1, 2, 45, ‘abc’, 1, ‘你好’, 1, 0] 元素: 1 结果: 0,4,6
列表: [‘赵云’, ‘郭嘉’, ‘诸葛亮’, ‘曹操’, ‘赵云’, ‘孙权’] 元素: ‘赵云’ 结果: 0,4
列表: [‘赵云’, ‘郭嘉’, ‘诸葛亮’, ‘曹操’, ‘赵云’, ‘孙权’] 元素: ‘关羽’ 结果: -1 -
写一个自己的len函数,统计指定序列中元素的个数
例如: 序列:[1, 3, 5, 6] 结果: 4
序列:(1, 34, ‘a’, 45, ‘bbb’) 结果: 5
序列:‘hello w’ 结果: 7def new_len(list1): """ 统计序列中元素的个数 :param sep1:被统计的序列 :return:None """ conut = 0 for x in list1: conut += 1 print(conut)
-
写一个自己的max函数,获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值
例如: 序列:[-7, -12, -1, -9] 结果: -1
序列:‘abcdpzasdz’ 结果: ‘z’
序列:{‘小明’:90, ‘张三’: 76, ‘路飞’:30, ‘小花’: 98} 结果: 98def new_max(list1): """ 求最大值 :param list1:获取最大值的列表 :return:None """ max1 = list1[0] for x in list1[1:]: if x > max1: max1 = x print(max1)
-
写一个函数实现自己in操作,判断指定序列中,指定的元素是否存在
例如: 序列: (12, 90, ‘abc’) 元素: ‘90’ 结果: False
序列: [12, 90, ‘abc’] 元素: 90 结果: Truedef new_in(seq, ele): """ 判断指定的元素是否存在 :param list1:被判断的序列 :param ele:被判断的元素 :return:None """ for x in seq1: if x == ele: print(True) break else: print(False)
-
写一个自己的replace函数,将指定字符串中指定的旧字符串转换成指定的新字符串
例如: 原字符串: ‘how are you? and you?’ 旧字符串: ‘you’ 新字符串:‘me’ 结果: ‘how are me? and me?’