python学习day7-函数02+作业

python学习day7-函数02+函数应用作业

一、嵌套函数

嵌套函数:在函数内部定义的函数,一般用于封装-隐藏数据(外部无法访问“嵌套函数”),嵌套函数可以让我们子函数内部避免重复的代码。
操作:
1、嵌套函数的定义

#测试嵌套函数的定义
def outer():
    print("outer running")

    def inner():#inner函数体包含在outer函数体中,属于嵌套函数
        print("inner running")

    inner()

outer()

运行结果:python学习day7-函数02+作业
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")

运行结果:
python学习day7-函数02+作业

二、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)

运行结果:python学习day7-函数02+作业

三、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为自己保留的特殊名称,如下:
python学习day7-函数02+作业
四、实操作业

1、定义一个函数实现反向输出一个整数,比如:输入2345,输出5432.
分析:定义函数后,用str()内置函数将输入整数改为字符串格式,再利用切片的概念对输入的整数进行倒叙输出。

def f1(n):
    a=str(n)
    b=a[::-1]#字符串切片
    print(a)
    print(b)
f1(2345)

运行结果:
python学习day7-函数02+作业
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))

运算结果:
python学习day7-函数02+作业
python学习day7-函数02+作业
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()

运行结果:python学习day7-函数02+作业
python学习day7-函数02+作业
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学习day7-函数02+作业
python基础学习函数内容总结完成,学习python的第七天,加油!

上一篇:项目冲刺——day7


下一篇:word里面的ctrl+z快捷键无效|ctrl+z 无效 最新解决方法