美文网首页学Python
学Python的010天

学Python的010天

作者: XIAO油菜花 | 来源:发表于2019-10-15 22:14 被阅读0次

    原创:XIAO油菜花
    学习进度记录:
    《零基础入门学习Python》P19:函数:灵活即强大
    《Python开发入门与爬虫项目实战》:Python中的函数:递归查找

    课后思考

    • 0.你有听说过DRY吗?
    • 1.都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢?
    • 2.函数可以有多个参数吗?
    • 3.创建函数使用什么关键字,要注意什么?
    • 4.请问这个函数有多少个参数?
    def MyFun((x, y), (a, b)):
        return x * y - a * b
    
    • 5.请问调用以下这个函数会打印什么内容?
    >>> def hello():
            print('Hello World!')
            return
            print('I Love XIAO油菜花!')
    
    • 6.请问以下哪个是形参哪个是实参?
    def MyFun(x):
        return x ** 3
    
    y = 3
    print(MyFun(y))
    
    • 7.函数文档和直接用“#”为函数写注释有什么不同?
    • 8.使用关键字参数,可以有效避免什么问题的出现呢?
    • 9.默认参数和关键字参数表面最大的区别是什么?

    答案

    • 0.DRY是程序员们公认的指导原则:Don't Repeat Yourself.
      快快武装你的思维吧,拿起函数,不要再去重复拷贝一段代码了!
    • 1.使用函数:
    • 可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N倍代码)
    • 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)
    • 使程序更容易阅读
    • 2.Python中函数可以有多个参数,理论上你想要有多少个就可以有多少个,但是建议不要设计太多参数,以免违背函数简单实用的初衷。
    • 3.使用‘def’关键字,注意函数名后面应该接一对小括号,小括号后面有冒号,然后缩进部分均属于函数体的内容。
    • 4.如果你回答两个,那么恭喜你错啦,答案是0,因为这样的写法是错误的!函数的参数需要的是变量,而这里你试图用只读的“元祖”的形式来传递是不可行的。你应该是要表达这么个意思:
    >>> def MyFun(x, y):
            return x[0] * x[1] - y[0] * y[1]
    
    >>> MyFun((3, 4), (1, 2))
    10
    
    • 5.会返回:Hello World! 因为当Python执行到return语句的时候,Python认为函数到此结束,需要返回了(尽管返回值是空)。
    • 6.x是形式参数(形参),y是实际参数(实参)。
    • 7.给函数写文档是为了让别人可以更好的理解你的函数,在函数开头写下的字符串Ta是不会打印出来的,但Ta会作为函数的一部分存储起来,这个我们称之为函数文档字符串,Ta的功能跟注释是一样的。
    • 8.避免忘记参数位置时导致的BUG出现。
    • 9.关键字参数是在函数调用的时候,通过参数名制定需要赋值的参数,这样做可以避免搞不清参数的顺序而导致函数调用出错。而默认参数是在参数定义的过程中,为形参赋初始值,当函数调用的时候,没有传递相应的实参则默认使用形参的初始值代替。

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

    def power(x, y):
        result = 1
    
        for i in range(y):
            result *= x
    
        print(str(x)+'的'+str(y)+'次幂是:'+str(result))
    

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

    def gcd(x,y):
        while y:
            t = x % y
            x = y
            y = t
    
        return x
    

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

    def my_bin(x):
        temp = []
        result = ''
        
        while x:
            #取余
            y = x % 2
            #地板除法
            x = x // 2
            #用append()在列表的最后添加一个元素
            temp.append(y)
    
        while temp:
            #用pop()移除列表中的最后一个元素,并且返回该元素的值
            result += str(temp.pop())
        
        return result
    

    3.编写一个符合以下要求的函数:

    • a.计算打印所有参数的和乘以基数(base=3)的结果
    • b.如果参数中最后一个参数为(base=5),则设定基数为5,基数不参与求和计算。
    def base(*value):
        base = 3
        
        if value[-1] == 5:
            base = 5
            h = sum(value[0:(len(value)-1)])
            result = h*base
        else:
            h = sum(value)
            result = h*base
    
        return result
    
    #参考答案
    def mFun(*param, base=3):
        result = 0
        for each in param:
            result += each
    
        result *= base
        
        print('结果是:', result)
    
    mFun(1, 2, 3, 4, 5, base=5)
    

    4.寻找水仙花数: 如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如153 = 13+53+3^3,因此153是一个水仙花数。编写一个程序,找出所有的水仙花数。

    def flower():
        for x in range(100,1000):
            if x == (x//100)**3 + (x%100//10)**3 + (x%10)**3:
                print(x, end = ' ')
    
    #参考答案:
    def Narcissus():
        for each in range(100, 1000):
            temp = each
            sum = 0
            while temp:
                sum = sum + (temp%10) ** 3
                temp = temp // 10  # 注意这里用地板除
    
            if sum == each:
                print(each, end='\t')
    
    print("所有的水仙花数分别是:", end='')
    Narcissus()
    

    5.编写一个函数 findstr(),该函数统计一个长度为 2 的子字符串在另一个字符串中出现的次数。例如:假定输入的字符串为“You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.”,子字符串为“im”,函数执行后打印“子字母串在目标字符串中共出现 3 次”。程序执行效果:


    def findStr(desStr, subStr):
        count = 0
        length = len(desStr)
        if subStr not in desStr:
            print('在目标字符串中未找到字符串!')
        else:
            for each1 in range(length-1):      
                if desStr[each1] == subStr[0]:
                    if desStr[each1+1] == subStr[1]:
                        count += 1
                        
            print('子字符串在目标字符串中共出现 %d 次' % count)
    
    desStr = input('请输入目标字符串:')
    subStr = input('请输入想要查找的子字符串(两个字符):')
    findStr(desStr, subStr)
    

    如果你关注了我,希望你监督我,鼓励我,与我一起学习,一起成长!❤

    相关文章

      网友评论

        本文标题:学Python的010天

        本文链接:https://www.haomeiwen.com/subject/qucemctx.html