第四章 函数
使用函数的目的:
- 分解问题,降低编程难度
- 代码的重复利用
4.1 函数的定义和调用
例 4.1 编写一个函数,实现机器人自动问好的功能
def hello():
print("Hello!")
print("I am Robot A. ")
print("Nice to meet you!")
hello()
例 4.2 编写一个函数,实现机器人自动问候的功能,并能够指出问候的对象
def hello(name):
print("Hello!{}!".format(name))
print("I am Robot A. ")
print("Nice to meet you!")
hello("Jack")
知识点:
-
函数的定义格式
def <函数名>(<参数列表>):
<函数名>
return <返回值列表> -
函数的调用
<函数名>(<参数列表>)
-
形参和实参
定义函数时参数列表里的是形式参数
调用时是实际参数
4.2 函数的参数传递
例 4.3 编写一个函数进行数学运算,要求有三个形参且形参中有默认值
def jisuan(x, y, z=8):
print(x*y)
print(x+y+z)
print(6*'*')
jisuan(3, 2)
jisuan(1, 2, 3)
运行结果:
6
13
******
2
6
******
例 4.4 编写一个带默认值的函数,在函数中运算后将结果用 return 语句返回
def jisuan(x, y, z=2):
return (x+y+z)
s = jisuan(3, 4)
print(s)
print(jisuan(3, 8, 3))
运行结果:
9
14
4.3 变量的作用域
例 4.5 分析下面程序中同名变量的不同作用
number = 0
def add(num1, num2):
number = num1+num2
print("函数内变量number: ", number)
return number
add(1, 2)
print("函数外变量number: ", number)
例 4.6 编写程序,使得函数内部可以操作全局变量
number = 0
def add(num1, num2):
global number
number = num1+num2
print("函数内变量number: ", number)
return number
add(1, 2)
print("函数外变量number: ", number)
知识点:
- 局部变量:函数内部定义的变量,只能在声明的函数内部访问
- 全局变量:在函数外部定义的变量,在程序全过程都有效,如果要在函数内部使用要先使用保留字 global 声明
4.4 函数模块化编程
例 4.7 将第 3 章中的例 3.8 改写,将每一种类型的操作改写成一个可被调用的函数
def add_student():
new_score = input("按学号、姓名和成绩的顺序输入一条信息(逗号隔开):\n").strip(" ")
new_score = new_score.strip(" ").split(",")
new_score[0] = int(new_score[0])
new_score[2] = int(new_score[2])
return score.append(new_score)
def del_student():
num = int(input("请输入要删除的学号:").strip(" "))
count = len(score)
for item in score:
count = count-1
if item[0] == num:
score.remove(item)
print("删除成功!")
break
def average():
sum = 0
for item in score:
sum += item[2]
if sum == 0:
print("学生数据为空!")
else:
average = sum/len(score)
print(average)
def top3(line):
line = sorted(line, key=(lambda item: item[2]), reverse=True)
print(line[0:3])
score = [[1901, '张三', 80], [1902, '李四', 69], [
1903, '王二', 70], [1904, '赵六', 68], [1905, '孙七', 58]]
for item in score:
print(item)
print("******><><******")
while(1):
print("1.增加一条学生成绩")
print("2.按照学号删除成绩")
print("3.全部学生成绩平均值")
print("4.输出成绩的前三名")
print("0.Exit")
try:
choice = int(input("请输入你的选择:").strip(" "))
if choice == 0:
break
elif choice == 1:
add_student()
elif choice == 2:
del_student()
elif choice == 3:
average()
elif choice == 4:
top3(score)
else:
print("输入编号错误!")
except:
print("请输入数字!")
知识点:
- 函数的定义与调用
- 异常处理:Python 中的错误有语法错误,逻辑错误,运行错误三种。
异常名 | 异常含义 |
---|---|
Exception | 常规异常基类,可以捕获任意异常 |
NameError | 未声明或未初始化的变量被引用 |
SytaxError | 语法错误 |
ZeroDivisionError | 除数为 0 |
IndexError | 索引超出范围 |
FileNotFoundError | 要打开的文件不存在 |
AttributeError | 对象的属性不存在 |
- try....except
- try....except...else
- try....except...finally
4.5 应用实例
将 3.5 应用实例中的添加信息,删除信息,查询信息,统计人数和显示信息 5 个功能分别用 5 个函数实现
import sys
flag = 1
data_end = []
def insert(data):
person = []
info = input("请输入姓名,电话,工作地点(中文逗号分隔)")
person = info.strip(" ").split(",")
data.append(person)
return data
def delete(data):
flag = 0
if(len(data) == 0):
print("通讯录为空!")
else:
name = input("请输入要删除的姓名:").strip(" ")
for line in data:
if(line[0] == name):
flag = 1
data.remove(line)
break
if(flag == 0):
print("没有找到{}的信息".format(name))
return data
def search(data):
flag = 0
if(len(data) == 0):
print("通讯录为空!")
else:
name = input("请输入要查找的姓名:").strip(" ")
for line in data:
if(line[0] == name):
flag = 1
print("查询结果为:")
print(line[0], line[1], line[2])
break
if(flag == 0):
print("没有找到{}的信息".format(name))
def count(data):
if(len(data) > 0):
p_dict = {}
for line in data:
p_dict[line[2]] = p_dict.get(line[2], 0)+1
print("统计结果为:")
for key, value in p_dict.items():
print(key, value, "人")
else:
print("通讯录为空!")
def show(data):
if len(data) > 0:
for line in data:
for item in line:
print(item, end=' ')
print("\n")
else:
print("通讯录为空!")
while(1):
print("***************")
print(" 1、添加信息")
print(" 2、删除信息")
print(" 3、查找信息")
print(" 4、统计人数")
print(" 5、显示信息")
print(" 0、退出")
print("***************")
try:
ch = int(input("请输入功能编号:"))
if ch == 0:
sys.exit(0)
elif ch == 1:
data_end = insert(data_end)
elif ch == 2:
data_end = delete(data_end)
elif ch == 3:
search(data_end)
elif ch == 4:
count(data_end)
elif ch == 5:
show(data_end)
else:
print("功能编号错误!")
except:
print("输入的不是数字!")
Comments | 0 条评论