zoukankan      html  css  js  c++  java
  • 第017讲:函数 python的乐高积木(课后测试题及答案 )

    函数

    1.函数的定义 def

    def MyFirstFunction():
        print('我创建的第一个函数!')
        print('继续加油!')

    函数的调用:

    >>> MyFirstFunction()
    我创建的第一个函数!
    继续加油!
    >>> 

    注:没有定义的函数,无法调用。

    2.函数的参数

    >>> def MySecondFunction(name):
        print(name + 'i love you')
        
    >>> MySecondFunction('Jay ') #参数可变了
    Jay i love you
    >>> 
    >>> def AddFunction(num1,num2):
        result = num1 + num2
        print(result)
    
        
    >>> AddFunction(4,5)
    9
    >>> 

    3.函数的返回值 return

    >>> def AddFunction2(num1,num2):
        return (num1 + num2)
    
    >>> AddFunction(4,5)
    9
    >>> 

    练习题:

    0. 你有听说过DRY吗?

    DRY是程序员们公认的指导原则:Don't Repeat Yourself.
    快快武装你的思维吧,拿起函数,不要再去重复拷贝一段代码了!


    1. 都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢?
        函数方便使用 :

    0) 可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N倍代码)
    1) 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)
    2) 使称序更容易阅读(没有人会希望看到一个程序重复一万行“I love FishC.com”


    2. 函数可以有多个参数吗?
        可以可以的,理论上你想要有多少个就可以有多少个,只不过如果函数的参数过多,在调用的时候出错的机率就会大大提高,因而写这个函数的程序员也会被相应的问候祖宗,所以,尽量精简吧,在Python的世界里,精简才是王道!


    3. 创建函数使用什么关键字,要注意什么?
         def 要注意函数名后边要加上小括号“()”,然后小括号后边是冒号“:”,然后缩进部分均属于函数体的内容
    4. 请问这个函数有多少个参数?

        def MyFun((x, y), (a, b)):
              return x * y - a * b
       

    答:没有参数

    由于小括号表示元组,而函数定义时括号里需要的是变量,元组最大的特点就是不可改变,所以该函数定义错误

    正确的表示方法;

    >>> def MyFunction(x,y):
        return (x[0] * x[1] - y[0] * y[1])
    >>> MyFunction((3,4),(5,6))
    -18
    >>> 
    >>> def test(x,y):
        return (x[0]*x[1]-y[0]*y[1])
    
    >>> test((3,4,5,6),(1,2,3,4))
    10
    >>> 

    5. 请问调用以下这个函数会打印什么内容?

        >>> def hello():

                     print('Hello World!')

                     return

                     print('Welcome To FishC.com!')

    答:
        Hello World!
        
        Welcome To FishC.com!

    错误,当Python执行到return语句的时候,Python认为函数到此结束,需要返回了(尽管没有任何返回值)
                      所以,正确打印的是 Hello World!

    >>> def hello():
    
        print('Hello World!')
    
        return
    
        print('Welcome To FishC.com!')
    
        
    >>> hello()
    Hello World!
    >>> 


    动动手:
    0. 编写一个函数power()模拟内建函数pow(),即power(x, y)为计算并返回x的y次幂的值。

    # pov(x,y)=x**y

    >>> def power(x,y):
        return (x**y)
    
    >>> power(3,2)
    9
    >>>


    1. 编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如gcd(x, y)返回值为参数x和参数y的最大公约数。

    欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。

    假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里德算法,是这样进行的:
    1997 / 615 = 3 (余 152)
    615 / 152 = 4(余7)
    152 / 7 = 21(余5)
    7 / 5 = 1 (余2)
    5 / 2 = 2 (余1)
    2 / 1 = 2 (余0)
    至此,最大公约数为1

    以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。

    >>> def gcd(x,y):
        while y:
            t = x % y
            x = y
            y = t
            return x
    
        
    >>> print(gcd(6,2))
    2

    因为辗转相除过程中,被除数为上一步除数,除数为上一步余数,而在最开始时,除数也不能为0,故可以将余数为零的条件变成下一步除数为零

    2. 编写一个将十进制转换为二进制的函数,要求采用“除2取余”(脑补链接)的方式,结果与调用bin()一样返回字符串形式。   

    Decimal :十进制

    Binary:二进制 

    >>> def Dec2Bin(dec):
        temp = []
        result = ''
        while dec:
            quo = dec % 2
            dec = dec // 2
            temp.append(quo)
        while temp:
            result += str(temp.pop())
        return result
    
    >>> print(Dec2Bin(2))
    10
    >>> 

    3. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
           

       

  • 相关阅读:
    UVALive 7141 BombX
    CodeForces 722D Generating Sets
    CodeForces 722C Destroying Array
    CodeForces 721D Maxim and Array
    CodeForces 721C Journey
    CodeForces 415D Mashmokh and ACM
    CodeForces 718C Sasha and Array
    CodeForces 635C XOR Equation
    CodeForces 631D Messenger
    田忌赛马问题
  • 原文地址:https://www.cnblogs.com/ananmy/p/12272525.html
Copyright © 2011-2022 走看看