1.函数
"""
掌握 函数
1. 概念:
函数 是用于对重复代码块的封装, 解决代码重复的问题
2. 语法:
def 函数名():
函数体(重复代码块)
备注:
1. 定义函数 不会执行函数体的代码
2. 必须调用函数的时候才会执行封装的代码块
调用语法: 函数名()
3. 函数必须先定义 再调用
"""
def cf99():
i = 1
while i <= 9:
j = 1
while j <= i:
print(f"{j}*{i}={j*i}", end="\t")
j += 1
print()
i += 1
cf99()
print("======")
print("********")
cf99()
2.函数的参数
"""
掌握 函数的参数的使用
1. 概念
我们将函数体中未知数据 定义为函数的参数(形式参数),简称形参
2. 语法
def 函数名([形式参数1,形式参数2...]):
函数体(使用形式参数 占位)
3. 如何调用带形参的函数
函数名(实际参数)
备注: 实际参数 即实际的数据(具体的值)
4. 以后如何确定是否有参数:
只要函数体中有 未知数 参与运算, 就将其定义为函数的形式参数
计算某城市的市内电话的月收费额y元
包含: 月租费用22元, 拨打电话x分钟的计时费按0. 1元/分钟收取
电信收费函数(公式):
y = 22 + 0.1 * x
分析: x 未知数 用于占位, 只有当传入具体的数据才能最后的结果
"""
def total(x):
y = 22 + 0.1 * x
print(y)
m = 10
total(m)
def sum(x, y):
print(x + y)
sum(10, 20)
3.函数的返回值
"""
掌握 函数的返回值
1. 概念: 函数中可以返回运算的结果 到函数的调用位置
备注:
1. 如何返回, 使用 return 数据
2. 返回的位置 是函数的调用位置
2. 为什么需要使用return返回数据
a. 函数内的所有的变量 当函数调用结束就会被释放, 节约内存资源
b. 如果后面的代码需要使用函数中的计算结果, 就使用return将计算结果返回
"""
def sum(x, y):
res = x + y
return res
result = sum(20, 30)
print(result)
print(result)
print(result)
print(result)
4.函数定义三部曲
"""
函数定义三部曲:
1. 确定函数名: 标识符 要求见名之意, 根据这个名字就能知道和理解函数的作用
2. 确定形式参数: 函数体中如果有未知数参与运算, 就将其定义为函数的形式参数
3. 确定返回值:
a. 如果在后面的代码需要使用函数中的运算结果,就需要返回(return)
b. 如果不明确是否需要返回,建议也返回
c. 如果题干要求 获取/得到 这些字眼, 说明要返回
d. 题干说明对数据 进行输出/处理后不返回 这些就不用返回
def 函数名([形式参数]):
函数体
return 返回值
"""
def add(a, b):
return a + b
result = add(10, 20)
print(result)
5.空语句
"""
掌握: pass 空语句
1. 为了保证语句的完整结构, 但是又不清楚具体些什么语句, 这个时候就使用pass (空语句) 占位
"""
if 3 > 2:
pass
def add(a,b):
pass
6.函数注释
"""
掌握 : 函数的注释
1. 概念: 函数注释就是用于对函数的进行解释说明
2. 语法
在函数名下面,缩进的里面, 使用 '''''' 对函数进行解释说明
def 函数名([形式参数]):
'''
函数注释
功能简介
参数说明
:param 参数名 作用
返回值说明
:return number 两个数的和
'''
pass
"""
def add(a,b):
"""
求两个数的和
:param a: 第一个数字
:param b: 第二个数字
:return: number 两个数的和 | None
"""
return a + b
7.了解匿名函数
"""
了解 匿名函数
1. 概念: 没有名字的函数就是匿名函数
特殊:
a. 通过 lambda 定义
b. 自动返回(自动返回运算结果,不需要写return)
c. 只能写简单表达式
语法: lambda 形式参数:函数体
"""
"""
定义一个函数: 传入三个参数:
x: 数字
y: 数字
op: 运算方式
"""
def fn(x, y, op):
"""
根据传入的具体运算方式进行运算
:param x: 数字1
:param y: 数字2
:param op: 运算方式
:return: 运算后的结果
"""
return op(x, y)
result = fn(10, 9, lambda x, y: x * y)
print(result)
8.参数加强
"""
了解 参数加强
1. 必须参数(必传)---对应位置顺序一一对应
def 函数名(形参1,形参2):
pass
2. 默认参数 --- 有默认值的参数,如果传值就不使用默认,如果不传值就使用默认值
def 函数名(形参1,形参2=默认值):
pass
备注:
1 有默认值的参数可传可不传
2 有默认值的参数跟在无默认值参数的后面
3. 关键字参数
在函数调用的时候,传递的实际参数可以给其命名(命名规定为形参名), 好处是可以交换实参的位置
例如:
def 函数名(形参1,形参2=默认值):
pass
函数名(形参1=实际参数1,形参2=实际参数2)
"""
def add(a,b=10):
print(a,b)
return a+b
add(b=20,a=10)
9.名片管理系统
自己利用学函数前的基础知识写的名片系统,保存在这里只为以后学了更多知识后完善修改!
print('''
*************************
欢迎使用名片管理系统!(V1.0)
*************************
''')
cards = [
{'name': '张飞', 'age': '20', 'sex': '男', 'job': '经理', 'company': '牛肉馆'},
{'name': '貂蝉', 'age': '18', 'sex': '女', 'job': '服务员', 'company': '羊肉馆'}
]
while True:
print('''
请录入数字开始对应的功能:
***************
* 1.查看列表 *
***************
* 2.添加名片 *
***************
* 3.修改名片 *
***************
* 4.删除名片 *
***************
* 5.查询名片 *
***************
* 0.退出系统 *
***************
''')
while True:
function_num = input('请输入功能号:')
if function_num == '1':
y_n=input("确定要进入查看列表功能(y/n):")
if y_n=='n':
break
elif y_n=='y':
print('进入查看名片列表功能')
print('名字\t年龄\t性别\t职位\t公司')
for card in cards:
print(f"{card['name']}\t{card['age']}\t\t{card['sex']}\t\t{card['job']}\t{card['company']}")
else:
print('请输入y或者n')
elif function_num == '2':
y_n = input("确定要进入添加名片功能(y/n):")
if y_n == 'n':
break
elif y_n == 'y':
print('进入添加名片功能!')
name = input('请输入姓名:')
age = input('请输入年龄:')
sex = input('请输入性别:')
job = input('请输入职务:')
company = input('请输入公司名:')
card = {'name': name, 'age': age, 'sex': sex, 'job': job, 'company': company}
cards.append(card)
break
else:
print('请输入y或者n')
elif function_num == '3':
y_n = input("确定要进入修改名片功能(y/n):")
if y_n == 'n':
break
elif y_n == 'y':
print('进入修改名片功能!')
old_name = input('请输入要修改的名片的名字:')
for card in cards:
if card['name'] == old_name:
name = input('请输入姓名:')
age = input('请输入年龄:')
sex = input('请输入性别:')
job = input('请输入职务:')
company = input('请输入公司名:')
card.update({'name': name, 'age': age, 'sex': sex, 'job': job, 'company': company})
print(f"更新{old_name}的名片成功!")
break
else:
print(f'名片夹中没有{old_name}的名片,无法修改!')
else:
print('请输入y或者n')
elif function_num == '4':
y_n = input("确定要进入删除名片功能(y/n):")
if y_n == 'n':
break
elif y_n == 'y':
print('进入删除名片功能!')
old_name = input('请输入要删除的名片的名字:')
for card in cards:
if card['name'] == old_name:
cards.remove(card)
print(f'删除{old_name}的名片成功!')
break
else:
print(f'名片夹中没有{old_name}的名片,无法删除!')
else:
print('请输入y或者n')
elif function_num == '5':
y_n = input("确定要进入查询名片功能(y/n):")
if y_n == 'n':
break
elif y_n == 'y':
print('进入查询名片功能!')
old_name = input('请输入要查询的名片的名字:')
for card in cards:
if card['name'] == old_name:
info = f'''
**********************************
{card['company']}
{card['name']}({card['job']})
年龄:{card['age']}
性别:{card['sex']}
**********************************
'''
print(info)
break
else:
print(f'没有{old_name}的名片信息!')
else:
print('请输入y或者n')
elif function_num == '0':
y_n = input("确定要退出名片管理系统(y/n):")
if y_n == 'n':
break
elif y_n == 'y':
quit('欢迎再次使用名片管理系统!')
else:
print('请输入y或者n')
else:
print('请输入正确的指令!')