zoukankan      html  css  js  c++  java
  • 函数

    函数的作用:方便我们重复使用相同的一段程序。

    将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。

    def square_sum(a,b):
        c = a**2 + b**2
        return c
    
    square_sum(3,4)
    函数格式

    定义函数:

    这个函数的功能是求两个数的平方和。

    
    

    关键字:def  后面跟上函数名:square_sum

    这个关键字通知python:我在定义一个名叫square_sum函数。

    
    

    括号中的a, b是函数的参数,是对函数的输入。参数可以有多个,也可以完全没有(但括号要保留)。

    c = a**2 + b**2        # 这一句是函数内部进行的运算

    
    

    return c               # 返回c的值,也就是输出的功能。Python的函数允许不返回值,也就是不用return。

    
    

    return可以返回多个值,以逗号分隔。相当于返回一个tuple(定值表)。

    
    

    return a,b,c          # 相当于 return (a,b,c)

    return并不是必须的,当没有return, 或者return后面没有返回值时,函数将自动返回None。None是Python中的一个特别的数据类型,用来表示什么都没有

     

    调用函数与传参:

    定义过函数后,就可以在后面程序中使用这一函数

     

    案例1:求两个数的最大公约数

    首先来看看笨方法

    def maxCommon(a, b):
        for i in range(1, b + 1):  # 两数的最大公因数最大为较小的数,所以我们遍历从1到较小的数(为什么b+1:掐头去尾)
    
            if a % i == 0 and b % i == 0:  # 如果a和b除以i余数都为0,那么i就是a和b的公因数
                mx = i
                # 将i赋值给变量mx,因为i会从1到b,所以只要满足条件的i,都会对mx赋值
                # 新值会替代旧值,所以最后返回的是最大公因数
        return mx
    
    print(maxCommon(36, 21))  # 输出结果为:3
    笨方法

     

    这种笨方法我们称之为“穷举法”,既然有笨办法,那就有聪明的办法!

    接下来我们就来看聪名的办法:欧几里得算法碾转相除法),叫欧几里得算法显得高大上,碾转相除法贴切的多。

    def modUntil(a, b):
        while b:
            a, b = b, a % b   # 循环,序列赋值
        return a
    
    print(modUntil(36, 21))  # 3
    欧几里得算法

     

    这是什么鬼?代码怎么可以这么简洁?怎么就循环一直除一直除就可以得到最大公因数了?还除的是余数?

    容老夫给你娓娓道来。

    假设x,y有一最大公因数z,x和y都可以被z整除,那么对任意整数m和n,mx+ny也可以被z整除。

    现在有x / y = q 余数为 w,那么x = qy + w,可知 x -qy = w,结合上一行可知 w 可以被z整除,也就是说,x除以y的余数可以被他俩的最大公因数整除。

    循环到最后,a的值为上一循环时的余数,b的值为0。

     

    是不是涨见识了?在欧几里得算法的基础上,有没有受到启发,有没有想到其它算法?

    我们再来看下一种算法:尼考曼彻斯法碾转相减法、更相减损术),如果你想到的也是这种算法,那么恭喜你,你的思维可以和尼考曼彻斯比肩了。

    def deUntil(a, b):
        while a != b:
            if a > b:
                a = a - b
            else:
                b = b - a
        return b
    print(deUntil(36,21))
    尼考曼彻斯法

     

    不会又一脸懵逼了吧?碾转相除的道理还记得吗?两者一个道理,既然能除就能减,多减几次,剩下的等同于余数

    最大公约数的算法会了,那么最小公倍数就简单了

     

    案例2:求两个数的最小公倍数

    将两个数相乘再除以最大公约数就是最小公倍数,方法很简单:

     

    def maxCommon(a, b):
        for i in range(1, b + 1):  # 两数的最大公因数最大为较小的数,所以我们遍历从1到较小的数(为什么b+1:掐头去尾)
    
            if a % i == 0 and b % i == 0:  # 如果a和b除以i余数都为0,那么i就是a和b的公因数
                mx = i
                # 将i赋值给变量mx,因为i会从1到b,所以只要满足条件的i,都会对mx赋值
                # 新值会替代旧值,所以最后返回的是最大公因数
        return mx
    
    def lcm(a, b):
        return a * b / maxCommon(a, b)
    
    
    print(maxCommon(36, 21))  # 输出结果为:3
    print(lcm(4,6))
    最小公倍数

     

    递归调用:

      在函数内部调用函数本身

    经典案例:

    def test(num):
        if num == 1:
            return 1
    
        temp = test(num - 1)
        return num + temp
    print(test(num))
    递归求和

     

     

    总结:

    def function_name(a,b,c):
        statement
        return something  # return不是必须的

    函数的目的: 提高程序的重复可用性。

    return     None

    通过位置,传递参数。

    基本数据类型的参数:值传递

    表作为参数:指针传递

    练习:

    写一个判断闰年的函数,参数为年、月、日。若是是闰年,返回True

  • 相关阅读:
    Half Nice Years Gym
    LCM from 1 to n
    Educational Codeforces Round 70 (Rated for Div. 2)
    Rating(概率DP) HDU
    Josephina and RPG(概率DP) ZOJ
    数据结构实验之串二:字符串匹配(字符串哈希)
    点分治——入门学习笔记
    使用ASP.NET Core 3.x 构建 RESTful API P15 处理故障
    使用ASP.NET Core 3.x 构建 RESTful API P13 P14 获取父子关系的资源
    使用ASP.NET Core 3.x 构建 RESTful API P11 P12 ActionResult of T 以及 AutoMapper
  • 原文地址:https://www.cnblogs.com/shudu/p/11524503.html
Copyright © 2011-2022 走看看