美文网首页
20210619 py函数 (复习)

20210619 py函数 (复习)

作者: DZhhho | 来源:发表于2021-06-21 12:51 被阅读0次

    20210619 start

    接下来

    找一个合适的小白辅助教材

    复习内容

    牛客网

    函数

    定义函数

    def 函数名():

    具体干啥

    def 函数名(): ————带返回值的函数

    具体干啥

    return 返回值——注意这里返回值是没有括号的,而且是缩进了。

    案例 输出一个计算式(-8+22)×a-10+c÷2的结果,a=40,c=212 比如

    思路20210618 复习到定义函数 突然想起来 这其实是个函数调用题

    代码

    def jisuan(a,c):

        s=(-8+22)*a-10+c/2

        return int(s)

    s=jisuan(40,212)

    print(s)

    思路 以前——想直接用print 打出结果,但是不知道print复杂语法

    网友代码

    a=40

    c=212

    print(eval('(-8+22)*a-10+c//2') )——eval里是否加括号和''?

    收获

    print( eval(' 计算式'))

    变量作用域问题

    全局变量

    代码1

    def test():

        print (string)

    string = '小象学院'

    test()

    结果1

    小象学院

    代码2

    def test():

        print (string)

    test()

    string = '小象学院'

    结果2

    报错 NameError: name 'string' is not defined

    代码3

    string = '小象学院'

    def test():

        print (string)

    test()

    结果3

    小象学院

    初步结论

    在函数外定义的变量,只要在函数最终调用前 定义,都能被函数调用。——

    但是 如果不小心定义了和函数里一样的 变量名,那岂不是很糟糕?

    ——因为不是说函数 会封装好吗? 那外部的变量名 和函数里的名称 碰巧一样,不是冲突了吗

    初步结论的解决——调用的时候,如果全局变量和内部变量名称冲突,还是优先内部变量(或者说内部变量的优先级高>于全局变量,内部函数调用还是先看内部赋值)

    代码4

    string='外部全局'

    def t():

        string='函数内部变量'

        print(string)

    t()

    print(string)

    结果4—— 也就是调用的时候,如果全局变量和内部变量名称冲突,还是优先内部变量

    函数内部变量

    外部全局

    !!外部全局变量 global 变量名

    代码5

    string='外部全局'

    def t():

        string='函数内部变量'

        print(string)

    t()

    print(string)

    def pt():

        global string————————声明了global变量之后,前面的全局变量才失效

        string='lize test'

        print(string)

    pt()

    print(string)

    结果5

    函数内部变量

    外部全局

    lize test

    lize test

    py自带函数——内建函数(官网)https://docs.python.org/zh-cn/3/library/functions.html

    sorted()      ——list2=sorted(list1)——从低到高

    max()

    min()

    都是有返回值的这几个

    函数练习

    case1 累加和——到某个end为止

    很久以前的思路—— for自带自动+1

    def calculate_sum(number):

        a = 0

        for i in range(number+1):

            a = a + i

        return a

    # 补充以下四行代码,分别求100以内的累加和和200以内的累加和,并分别打印出。

    print(calculate_sum(100))

    print(calculate_sum(200))

    20210619思路——while 配合计数器

    def sumjia(a):

        s=0

        i=1

        while i <=a:

            s=s+i

            i=i+1

        return s

    end=int(input('end num is\n'))

    print(sumjia(end))

    case2 low到high几位数,没有重复的3位数

    20210619思路——三层(因为三位数)循环遍历——注意跳出

    def thr(low,high):

        for i in range(low,high+1):

            for j in range(low,high+1):

                for k in range(low,high+1):

                    while i!=j and i!=k and j!=k:

                        print(i*100+j*10+k)

                        break——break跳出很重要,continue还不行?为啥,不是特别懂

    thr(2,5)

    case3 在范围内猜数字

    20210617思路——不断逼近——break用法强化理解

    def guess(right,a,b):

        while True:

            print('num is {} to {}'.format(a,b))

            youinp=int(input('now guess\n'))

            if youinp==right:

                print('bingo!!!')

                break—— break这里直接从while True跳出去了

            elif youinp<right:

                a=youinp

    break——这里就不能break,条件到这就直接退出if判断(else那同理)

            else:

                b=youinp

    guess(9,1,100)

    case4 打印n*n 乘法表

    20210619思路——两层循环,难点在于 空格和换行(怎么纵向一直对齐呢?)end='\t'

    def cheng(n):

        for i in range(1,n+1):

            for j in range(i,n+1):

                print('{}*{}={}'.format(i,j,i*j),end=' ')  ——end='\t' 一个占位符大概4个空格

            print('\n')

    cheng(int(input('num\n')))

    case5 任意区间内素数

    思路20210619——除了本身及1外,若可整除,计数器+1,计数器=2的数才是素数,打印,否则略过且计数器清零

    代码

    def sushu(low,high):

        c=0

        global b

        b=0 #用来计有几个素数

        for i in range(low,high+1):

            for j in range(1,i+1):

                if i%j==0:

                    c=c+1

            if c==2:

                print(i)

                c=0

                b=b+1

            else:  ——否则计数器清零也非常重要

                c=0

        return b

    sushu(3,100)

    print('有{}个素数'.format(b)) ——b变成 全局变量才能print,不然无法调用——但没有利用函数返回值,其实是利用 全局变量

    sushu(5,299)

    print('有{}个素数'.format(b))

    hanshujieguo=sushu(3,100)

    print('有{}个素数'.format(hanshujieguo)) #利用函数返回值输出

    参考答案思路——也很巧妙——通过改flag状态(比我的节约资源)

    代码

    def find(low,high):

        for i in range(low,high+1):

            flag='yes'

            for j in range(2,i):

                if i%j==0:

                    flag='no'

                    break

            if flag=='yes':

                print(i)

    find(1,100)

    案例——输入用户名&密码,符合条件才存储密码

    思路20210619——用三个函数,分别检查空用户名、检查密码尺寸、检查是否存储

    代码——用到了global 声明全局函数,不然最后的save函数存储不了局部——不是的——不做global全局声明也可以,写在要使用的函数前面即可。

    函数定义内的 局部函数,以局部优先。

    具体代码

    global a  ——可省略

    a=input('username\n')

    global b——可省略

    b=input('pw\n')

    def uncheck(a):

        #global a

        if a=="":

            return False

        else:

            return True

    def namecheck(b):

        #global b

        if len(b)<6:

            return False

        else:

            return True

    def save(c,d):

        #c=namecheck(a)

        #d=uncheck(b)

        dict={}

        if c and d:

            print('okd')

            dict[a]=b

        else:

            print('bukeyide')

        print(dict)

    cinput=uncheck(a)

    dinput=namecheck(b)

    save(cinput,dinput)

    参考答案思路——在最后save函数中 调用前面函数(在局部函数中可以调用其他局部函数咯?)

    代码

    # 检测用户名是否符合要求的函数

    def uncheck(username):

        if len(username) == 0:

            return False

        else:       

            return True

    # 检测密码是否符合要求的函数

    def pwcheck(password):

        if len(password) >= 6:

            return True

        else:

            return False

    # 第三步 保存函数

    def save(username, password):

        # 用户名和密码都通过检测

        if uncheck(username) == True and pwcheck(password) == True: ——调用其他两个函数

            accounts[username] = password

            print("账号创建成功!")

        # 用户名或密码未通过检测

        else:

            print("账号创建失败。")

    # 创建一个空字典用来保存用户名和密码

    accounts = {}

    # 现在试着保存三个账户名和密码

    for i in range(3):

        username = input("请输入用户名:")

        password = input("请输入密码:")

        save(username, password)  ——调用其他两个函数

    20210619 end

    今日收获

    后面健身去了没有继续

    又对 变量(全局、局部、global)有了深刻的认识

    代码撰写感觉比以前更加轻松了,也对案例有了更多自己的理解和思路。写起代码来也有点轻车熟路了,很多之前不太明白的内容,现在理解稍微深一些了。

    常学常新

    接下来

    挑一挑入门书——20号看了豆瓣上的一些推荐

    《python的入门到实战》这本基本和小象学院讲的这套一致,所以倒也不必买了。

    《笨方法学python》是obe的教学思路,都是题,如果有钱还可以再买来巩固。——也可以牛客网等现成网站上刷一刷题。

    以前觉得小象学院的内容讲得浅,但现在回过头来看一下就也还好。比较全了,其实跳出来看也比较成体系了。巩固几遍理论上说是可以去做实战项目了,可能库这块还不多?不知道是不是我还没涉及(目前只看到异常处理这)

    刚才打完字右手中指在不自觉地抖动,观察了一会。看来还是要保护一下颈椎和腰椎,学习的路还很长,身体是革命的本钱。

    既然没有更好的推荐,小象学院的课继续往下看下去吧~

    相关文章

      网友评论

          本文标题:20210619 py函数 (复习)

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