千锋教育Python第十天课后总结
一、字符串格式化
1.字符串内容不确定的解决方案
实例1:已知 name = ’小明‘ age = 18 money = 23891.23
#求xxx今年xx岁,月薪:xxxx元
做法方案一:字符串拼接
message = name + '今年' + str(age) + '岁,月薪:' + str(money) + '元'
print(message)
做法方案二:字符串格式占位符
message = '%s今年%d岁,月薪:%.2f元' % (name, age, money)
print(message)
做法方案三:f-string
message = f'{name}今年{age}岁,月薪:{money}元'
print(message)
以上三种写法返回的结果均是:小明今年18岁,月薪:23891.23元
2.字符串格式占位符
其语法是:带有格式占位符的字符串 % (数据1, 数据2, …)
值得注意的是:a.数据的个数和占位符的位置和个数要对应 b.当只有一个数据的时候()可以省略
各种语法的解释:
(1)%s ——字符串占位符,可以对应任何能转换成字符串的数据
(2)%d——整数占位符, 可以对应任何数字数据(如果是浮点数,拼接的时候只拼接整数部分)
(3)%f——浮点数占位符,%.Nf(保留N位小数), 可以对应任何数字数据
(4)%c——字符占位符, 可以对应任何字符或者字符编码值
举例:
print('x: %s y:%d z:%.1f %c' % ([10, 20], 23, 20, 97)) #x: [10, 20] y:23 z:20.0 a
print('name:%s' % name) #name:小明
3.补充语法:r语法
Python可以在字符串的最前面加r或者R,来让字符串中所有的转义字符的功能消失。
str1 = r'\tabc\n123:\'你好\''
print(str1) #\tabc\n123:\'你好\'
path = R'C:\user\name\test\names\all.txt'
print(path) #C:\user\name\test\names\all.txt
4.语法:f-string
作用1).直接提供数据:{提供数据的表达式}
语法:在字符串的最前面加f或者F,就可以在字符串中通过{}来提供数据,{}中可以是任何有结果的表达式
例如:
name = '小明'
str1 = f'x:{name},y: {100}, z:{100 * 2 + 3}, m:{name * 2}, n:{name.replace("小", "xiao")}'
print(str1) #x:小明,y: 100, z:203, m:小明小明, n:xiao明
作用2).添加参数:{提供数据的表达式:参数}
常用参数:
a. .Nf - 保留N位小数
money = 19234
str1 = f'月薪:{money:.2f}'
print(str1) # 月薪:19234.00
b. , - 用逗号将数据三位三位分开
num = 190000000
print(f'数量为:{num:,}') # 数量为:190,000,000
c. ,.Nf - 使用逗号的同时保留N位小数
num = 190000000
print(f'数量为:{num:,.2f}') # 数量为:190,000,000.00
d. .N% - 将小数转换成百分比,百分数保留N位小数
rate = 0.78 # 78%
print(f'运动鞋的占比:{rate:.1%}'
e. X>N或者X<N - X是填充字符(如果没有X表示用空格填充),N是长度。> - 填前面; < - 填后面
num = 1
print(f'学号: python2106{num:0>3}') # 学号: python2106001
print(f'学号: python2106{num:0<3}') # 学号: python2106100
stu1 = '小明'
stu2 = '王小花'
print(f'姓名:{stu1:<8} 年龄:18')
print(f'姓名:{stu2:<8} 年龄:18')
#姓名:张三 年龄:18
#姓名:张晓三 年龄:19
二、字典推导式
语法格式:
{键值对 for 变量 in 序列}
{键值对 for 变量 in 序列 if 条件语句}
dict(有且只有两个元素的小序列 for x in 序列)
dict(有且只有两个元素的小序列 for x in 序列 if 条件语句)
例如:
dict1 = {x: x*2 for x in 'abc'}
print(dict1) # {'a': 'aa', 'b': 'bb', 'c': 'cc'}
#知识点:交换字典的键和值
dict2 = {'a': 10, 'b': 20, 'c': 30}
# {10: 'a', 20: 'b', 30: c}
方法一:
new_dict2 = {dict2[x]: x for x in dict2}
print(new_dict2)
方法二:
new_dict2 = dict((dict2[x], x) for x in dict2)
print(new_dict2)
四、函数的作用
1.认识函数 —— 机器
函数的概念:函数就是实现某一特定功能的代码的封装
2.函数的分类(按照函数由谁创建的)
分为系统函数(别人造好的机器):Python自带的函数,程序员只需要在需要它们的功能的时候调用对应的函数,例如:print、input、type、max、min、sorted、sum、id、chr、ord等;二是自定义函数(自己造的机器):由程序员自己创建的函数。’
3.定义函数(创造函数) —— 造机器
1).语法:
def 函数名(形参列表):
函数说明文档
函数体
2).说明
def - 关键字;固定写法
函数名 - 由程序员自己命名
要求:是标识符;不能是关键字
规范:见名知义(根据函数名大概知道函数的功能是什么);字母都小写,多个单词用下划线隔开;不使用系统函数名、类名或者模块名
(): - 固定写法
形参列表 - 以 '变量名1, 变量名2, 变量名3, ...' 的形式存在,其中每一个变量就是一个形参。
形参可以有多个,也可以一个都没有。
形参的作用:将函数外部的数据传递到函数的内部。
初学者怎么确定函数的形参:看实现函数的功能需不需要额外的数据,需要几个。
函数说明文档 - 本质就是多行注释
函数体 - 和def保持一个缩进的一条或者多条语句(至少一条语句);
函数体就是现实函数功能的代码段
举例:
#定义一个函数,求两个数的和:
def sum2(num1, num2):
"""
功能说明区 - 描述函数的基本功能
:param num1: 参数说明区 - 描述每个形参传递的数据的功能或者意义
:param num2:
:return: 返回值说明区 - 功能的产物
"""
pass
#定义一个函数,获取一个字符串中中文的个数:
# 正确写法:
def count_Chinese_char1(str1):
"""获取字符串中中文的个数"""
count = 0
for x in str1:
if '\u4e00' <= x <= '\u9fa5':
count += 1
print(f'中文个数:{count}')
count_Chinese_char1('海上世界2342')
count_Chinese_char1('sjh23---')
# 错误的写法:
def count_Chinese_char2():
str1 = 'ssjshf是否会23数据是'
count = 0
for x in str1:
if '\u4e00' <= x <= '\u9fa5':
count += 1
print(f'中文个数:{count}')
count_Chinese_char2()
#定义一个函数,求10的阶乘:
# def factorial():
# pass
# 练习1:定义一个函数计算一个数的阶乘
# 5! = 1 * 2 * 3 * 4 * 5
def factorial(num):
"""
求指定数的阶乘
:param num: 要求阶乘的具体的数字
:return: None
"""
sum1 = 1
for x in range(1, num+1):
sum1 *= x
print(sum1)
# 练习2:定义一个函数,将两个字符串合并成一个字符串,合并方式如下:
# 'abc' 和 '123' -> 'a1b2c3'
# 'abc' 和 '123456' -> 'a1b2c3456'
# 'abcde' 和 '123' -> 'a1b2c3de'
def merge_str(str1, str2):
# 先获取两个字符串较短的字符串的长度
length = min(len(str1), len(str2))
new_str = ''
# 获取能对齐的部分交叉拼接
for index in range(length):
new_str += str1[index] + str2[index]
# 获取并且拼多出来的部分
new_str += str1[length:] + str2[length:]
print(new_str)
merge_str('abcdef', '123')
# 练习3:定义一个函数判断一个列表是否是数字列表(列表中的元素是否全是数字)
def is_number_list(list1):
for x in list1:
if type(x) not in (int, float):
print(False)
break
else:
print(True)
is_number_list([10, 20, 30, 'abc'])
五、函数的调用
1.调用函数 - 使用机器
定义函数的时候不会执行函数体,调用函数的时候才会执行函数体
语法:
函数名(实参列表)
说明:
函数名 - 需要哪个函数的功能就写哪个函数的名字。必须是已经定义好的函数的函数名
() - 固定写法
实参列表 - 实参就是通过形参真正传递到函数内部的数据。
以 ‘数据1, 数据2, 数据3,…’ 的形式存在。
函数调用过程:
第一步:回到函数定义的位置, 传参(用实参给形参赋值)
第二步:执行函数体
第三步:确定函数返回值
第四步:回到函数调用的位置,接着往后执行
语法如下:
def func1():
# list1 = [10, 20]
# print(list1[10])
print('======')
print('++++++')
func1()
实例:
def sum2(num1, num2):
# num1 = 10, num2 = 20; num1=110, num2 = 220; num1 = x = 10, num2 = y // 10 = 200 // 10 = 20
print(num1 + num2) # print(10+20); print(110 + 220); print(10 + 20)
print('开始')
sum2(10, 20)
sum2(110, 220)
x = 10
y = 200
sum2(x, y // 10)
print('结束')
六、函数返回值
1).返回值的意义:返回值就是从函数内部传递到函数外部的数据
python中每个函数都有且只有一个返回值(只有一个出口), 通过这个出口传递的数据才是真正意义上的返回值
2).什么时候需要返回值
初学者:如果实现函数的功能产生了新的数据,就把新的数据通过返回值返回
3).怎么将函数内部的数据传递函数外部(怎么返回)
将需要传递到函数外部的数据放在return关键字的后面 (return后面的值就是函数的返回值,也就是通过出口传递到外部的数据)
4).怎么在函数外部获取函数的返回值 - 获取函数返回值
获取函数调用表达式的值就是获取函数的返回值。(函数返回值能做的事情,函数调用表达式都可以做)
语法格式:
def sum2(num1, num2):
return num1 + num2
实例一:
def sum2(num1, num2):
return num1 + num2
print(f'函数调用表达式:{sum2(10, 20)}')
print(f'函数调用表达式:{sum2(100, 20)}')
sum2(10, 20) # 30
练习2:定义一个函数,将两个字符串合并成一个字符串,合并方式如下:
‘abc’ 和 ‘123’ -> ‘a1b2c3’
‘abc’ 和 ‘123456’ -> ‘a1b2c3456’
‘abcde’ 和 ‘123’ -> ‘a1b2c3de’
写法如下:
def merge_str(str1, str2):
length = min(len(str1), len(str2))
new_str = ''
for index in range(length):
new_str += str1[index] + str2[index]
new_str += str1[length:] + str2[length:]
return new_str
merge_str('abc', '123')
print(merge_str('abc', '123')) # 'a1b2c3'
拓展:还可以将返回的字符串中的小写a换成大写A。
print(merge_str('abc', '123').replace('a', 'A'))