python学习day7-函数02+函数应用作业
一、嵌套函数
嵌套函数:在函数内部定义的函数,一般用于封装-隐藏数据(外部无法访问“嵌套函数”),嵌套函数可以让我们子函数内部避免重复的代码。
操作:
1、嵌套函数的定义
#测试嵌套函数的定义
def outer():
print("outer running")
def inner():#inner函数体包含在outer函数体中,属于嵌套函数
print("inner running")
inner()
outer()
运行结果:
2、使用嵌套函数避免重复代码
#测试使用嵌套函数避免重复代码
def printChinsename(name,familyname):
print("{0}{1}".format(familyname,name))
def pritEngelishname(name,familyname):
print("{0}{1}".format(name,familyname,))
printChinsename("小五","赵")
pritEngelishname("six","seven")
#使用嵌套函数代替上面的两个函数
def printName(isChinese,name,familyname):
def inner_print(a,b):
print("{0}{1}".format(a,b))
if isChinese:#加入一个判断条件isChinese
inner_print(familyname,name)
else:
inner_print(name,familyname)
printName(True,"小五","赵")
printName(False,"six","seven")
运行结果:
二、nonlocal关键字
nonlocal 用来声明外层的局部变量,在被嵌套的函数内对外层变量进行修改需要用nonlocal 进行声明。
global 用来声明全局变量。在函数内改变全局变量的值,使用global 关键字进行声明。
操作:测试使用nonlocal和global 声明参数更改
#测试nonlocal、global关键字
a=100#全局变量
def outer():
b=200#外层局部变量
def inner():
nonlocal b#声明外部局部变量b
print("inner b:",b)
b=20
global a#声明全局变量a
a=300
inner()
print("outer b:",b)#对外部函数局部变量做出了修改
outer()
print("a:",a)
运行结果:
三、LEBG规则
python 在查找“名称”时,是按照LEBG规则进行查找的
Local—Enclosed—Global—Built in
Loca 指的是函数或者是类的方法内部
Enclosed 指的是嵌套函数(一个函数包含另一个函数,闭包)
Global 指的是模块中的全局变量
Built in 指的是python为自己保留的特殊名称。
操作:测试查找“名称”的LEBG规则
依次将几个“str"注释掉,观察打印输出的内容,可以体会LEBG的搜索顺序。
#测试LEBG,一次注释掉str,观察打印台的位置,可以体会到LEBG的搜索顺序
str="global"#第三次输出位置
def outer():
str="outer"#第二次输出的位置
def inner():
str="inner"#第一次输出位置
print(str)
inner()
outer()
最后一次运行结果是python为自己保留的特殊名称,如下:
四、实操作业
1、定义一个函数实现反向输出一个整数,比如:输入2345,输出5432.
分析:定义函数后,用str()内置函数将输入整数改为字符串格式,再利用切片的概念对输入的整数进行倒叙输出。
def f1(n):
a=str(n)
b=a[::-1]#字符串切片
print(a)
print(b)
f1(2345)
运行结果:
2、编写一个函数,计算下面的数列:m(n)=1/2+2/3+3/4+…n/n+1.
分析:可使用递归函数达到计算此项数列。
n=int(input("请输入一个整数:"))
def f1(n):
s=n/(n+1)
if n==0:
return 0
else:
return s+f1(n-1)#调用自己的函数成为递归函数
n=n-1
print(f1(n))
运算结果:
3、输入三角形三个顶点的坐标,若有效则计算三角形的面积;若无效则给出提示。
import math
def isvalid(a=0.0, b=0.0, c=0.0):
"""判断三条边长是否符合三角形的定义:任意两边之和大于第三边或者任意两边之差小于第三边"""
side = [a, b, c]
side.sort()
if side[0] + side[1] > side[2] or side[2] - side[1] < side[0]:
return True
else:
return False
def calculate_area():
"""获取三角形的三个顶点坐标并计算该三角形的面积"""
x1, y1 = map(int, input('请输入第一个顶点坐标:').split())
x2, y2 = map(int, input('请输入第一个顶点坐标:').split())
x3, y3 = map(int, input('请输入第一个顶点坐标:').split())
# 计算三条边长
side1 = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
side2 = math.sqrt((x1 - x3) ** 2 + (y1 - y3) ** 2)
side3 = math.sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2)
# 调用 isvalid() 函数,判断是否能够构成三角形
if isvalid(side1, side2, side3):
# 计算半周长
s = (side1 + side2 + side3) / 2
# 计算面积
area = (s * (s - side1) * (s - side2) * (s - side3)) ** 0.5
print('三角形的面积为:{:.2f}'.format(area))
else:
print('坐标无效,无法构成三角形')
if __name__ == '__main__':
calculate_area()
运行结果:
4、输入一个毫秒数,将该数换成小时数、分钟数,秒数。
ms=int(input("请输入一个毫秒数:"))
def Time():
s=ms/1000
m=s/60
h=m/60
print("{0}秒,{1}分钟,{2}小时".format(s,m,h))
Time()
运行结果:
python基础学习函数内容总结完成,学习python的第七天,加油!