美文网首页python学习笔记
【笔记】《python语言程序设计》——程序设计方法学

【笔记】《python语言程序设计》——程序设计方法学

作者: Hobbit的理查德 | 来源:发表于2020-03-20 18:01 被阅读0次

    一、前言

    学习就是一个不断的自下而上,自上而下的过程。

    前段时间,学着用python实现网站的数据爬取,隐约get到python的一些语法和用法,感觉就是语法不难,关键在于解决问题的思维。

    这是需求驱动后的学习。接下来,就需要对python进行系统地了解。

    很早之前搜知乎的时候,就搜到MOOC上的一门《python语言程序设计》课程,讲得很好,而且,我还下载了课件,溜了一遍,感觉就挺有趣的。

    趁着有了实战经验,就把这门入门课刷了一遍。果然是门好课!很适合小白入门,并系统学习,整个教学过程循序渐进,深入浅出,提纲挈领,很有意思!

    课程是北京理工大学嵩天老师的《python语言程序设计》课程,现在已经开了11次课了。课程每个小视频短则几分钟,最长也不超过20分钟,不容易劝退。每章讲解有复习回顾及小结,在[平台python123]上有每章的练习和测试,直接反馈结果,激发继续学下去的兴趣。

    个人感觉,老师说话速度慢了些,调成了2倍速播放,然后,花了大约3天的时间,把所有的视频,课件,练习和测试都刷了一遍,感觉对python的了解更系统了!

    趁热打铁,把每章的知识点和练习、测试再进行整理回顾一下。

    以下内容均来自课程:[《python语言程序设计》]及[平台python123],感兴趣的看课程视频,亲自练习,效果更好~

    二、知识点

    1.实例13:体育竞技分析

    比赛规则:
    双人击球比赛:A&B,回合制,5局3胜
    开始时一方先发球,直至判分,接下来胜者发球
    球员只能在发球局得分,15分胜一局

    自顶向下.png
    import random
    
    def printIntro():
        print('这个程序模拟两个选手A和B的某种竞技比赛')
        print('程序运行需要A和B的能力值(以0到1之间的小数表示)')
    
    def getInputs():
        a=eval(input('请输入选手A的能力值(0-1):'))
        b=eval(input('请输入选手B的能力值(0-1):'))
        n=eval(input('模拟比赛的场次:'))
        return a,b,n
    
    def printSummary(winsA,winsB):
        n=winsA+winsB
        print('竞技分析开始,共模拟{}场比赛'.format(n))
        print('选手A获胜{}比赛,占比{:0.1%}'.format(winsA,winsA/n))
        print('选手B获胜{}比赛,占比{:0.1%}'.format(winsB,winsB/n))
    
    def simNGames(n,probA,probB):
        winsA,winsB=0,0
        for i in range(n):
            scoreA,scoreB=simOneGame(probA,probB)
            if scoreA>scoreB:
                winsA+=1
            else:
                winsB+=1
        return winsA,winsB
    
    def simOneGame(probA,probB):
        scoreA,scoreB=0,0
        serving='A'
        while not gameOver(scoreA,scoreB):
            if serving=='A':
                if random.random()<probA:
                    scoreA+=1
                else:
                    serving='B'
            else:
                if random.random()<probB:
                    scoreB+=1
                else:
                    serving='A'
        return scoreA,scoreB
    
    def gameOver(a,b):
        return a==15 or b==15
    
    def main():
        printIntro()
        probA,probB,n=getInputs()
        winsA,winsB=simNGames(n,probA,probB)
        printSummary(winsA,winsB)
    
    main()
    

    结果:

    这个程序模拟两个选手A和B的某种竞技比赛
    程序运行需要A和B的能力值(以0到1之间的小数表示)
    请输入选手A的能力值(0-1):0.45
    请输入选手B的能力值(0-1):0.50
    模拟比赛的场次:1000
    竞技分析开始,共模拟1000场比赛
    选手A获胜360比赛,占比36.0%
    选手B获胜640比赛,占比64.0%

    2.Python程序设计思维

    1. 计算思维与程序设计

      ①第3种人类思维特征:逻辑思维(推理和演绎,数学为代表)->实证思维(实验和验证,物理为代表)->计算思维(设计和构造,计算机为代表)

      ②基于计算机的思维方式:抽象和自动化;

    2. 计算生态与Python语言

      ①计算生态:以开源项目为组织形式,充分利用“共识原则”和“社会利他”组织人员,在竞争发展,相互依存迅速更迭中完成信息技术的更新换代,形成了技术的自我演化路径。

      ②Python语言提供15万+个第三方库;同一个功能,Python语言提供2个以上第三方库;Python库之间广泛练习,逐级封装;AlphaGo深度学习算法采用Python语言开源;

      ③优质的计算生态:python123.io

    3. 用户体验与软件产品

      ①实现功能 -> 关注体验:编程只是手段,不是目的,程序最终为人类服务;

      ②提高用户体验的方法:(1)进度展示;(2)异常处理;(3)其他类方法:打印输出、日志文件、帮助信息;

      ③软件程序 -> 软件产品:用户体验是程序到产品的关键环节;

    4. 基本的程序设计模式

      ①从IPO开始;

      ②自顶向下设计;

      ③模块化设计;

      ④配置化设计:程序引擎+配置文件;

      ⑤从应用需求到软件产品:(1)产品定义;(2)系统架构;(3)设计与实现;(4)用户体验;

    3. Python第三方库安装

    1. 看见更大的python世界:13万+个第三方库(pypi.org)

    2. 第三方库的pip安装方法(主要方式):适用win、mac和linus等操作系统;适合99%以上情况,需要联网安装;

      windows下,win键+R ——输入cmd,键入如下命令:

      常用的pip命令:

      安装指定的第三方库
      pip install <第三方库名>
      
      使用-U标签更新已安装的指定第三方库
      pip install -U <第三方库名>
      
      卸载指定的第三方库
      pip uninstall <第三方库名>
      
      下载但不安装指定的第三方库
      pip download <第三方库名>
      
      列出某个指定第三方库的详细信息
      pip show <第三方库名>
      
      根据关键词在名称和介绍中搜索第三方库
      pip search <关键词>
      
      列出当前系统已经安装的第三方库
      pip list
      
      
    3. 第三方库的集成安装方法:结合特定Python开发工具的批量安装

      • Anaconda(continuum.io):支持近800个第三方库;包含多个主流工具;适合数据计算领域开发;
    4. 第三方库的文件安装方法:

      ①为什么有些第三方库用pip可以下载,但无法安装?

      • 某些第三方库pip下载后,需要编译再安装;
      • 如果操作系统没有编译环境,则能下载但不能安装;
      • 可以直接下载编译后的版本用于安装

      ②UCI页面(lfd.uci.edu/~gohlke/pythonlibs/)

      • 实例:安装wordcloud库
      • step1:在UCI页面搜索wordcloud
      • step2:下载对应版本的文件
      • step3:使用pip install <文件名>安装

    4. 模块7:os库的基本使用

    1. OS库基本介绍:

      • 提供通用的、基本的操作系统交互功能;
      • Python标准库,包含几百个函数;
      • 常用:路径操作、进程管理、环境参数等几类;
    2. OS库之路径操作:os.path子库,处理文件路径及信息

      • os.path子库以path为入口,用于操作和处理文件路径

        import os.pathimport os.path as op

        函数 描述
        os.path.abspath(path) 返回path在当前系统中的绝对路径
        os.path.normpath(path) 归一化path的表示形式,统一用\\分隔路径
        os.path.relpath(path) 返回当前程序与文件之间的相对路径
        os.path.dirname(path) 返回path中的目录名称
        os.path.basename(path) 返回path中最后的文件名称
        os.path.join(path,*paths) 组合path和paths,返回一个路径字符串
        os.path.exists(path) 判断path对应文件或目录是否存在,返回True或False
        os.path.isfile(path) 判断path所对应是否为已存在的文件,返回True或False
        os.path.isdir(path) 判断path所对应是否为已存在的目录,返回True或False
        os.path.getatime(path) 返回path对应文件或目录上次访问时间
        os.path.getmtime(path) 返回path对应文件或目录最近一次的修改时间
        os.path.getctime(path) 返回path对应文件或目录的创建时间
        os.path.getsize(path) 返回path对应文件的大小,以字节为单位
    3. OS库之进程管理:启动系统中其他程序

      • os.system(command)

      • #打开计算器
        import os
        os.system('C:\\Windows\\System32\\calc.exe')
        
    4. OS库之环境参数:获得系统软硬件信息等环境参数

      函数 描述
      os.chdir(path) 修改当前程序操作的路径
      os.getcwd() 返回程序的当前路径
      os.getlogin() 获得当前系统登录用户名称
      os.cpu_count() 获得当前系统的CPU数量
      os.urandom(n) 获得n个字节长度的随机字符串,通常用于加解密运算

    5.实例14:第三方库自动安装脚本

    import os
    libs={'numpy','matplotlib','pillow','sklearn',
    'requests','jieba','beautifulsoup4','wheel','networkx',
    'sympy','pyinstaller','django','flask','werobot','pyqt5',
    'pandas','pyopengl','pypdf2','docopt','pygame'}
    try:
        for lib in libs:
            os.system('pip install '+lib)
        print('Successful')
    except:
        print('Failed Somehow')
    

    三、测试

    1.选择题

    1. 关于计算思维,以下选项描述正确的是:

      A 计算思维从古至今一直存在

      B 计算思维是基于计算机的思维模式

      C 计算思维关于设计和构造,可以脱离计算机而存在

      D 计算思维是逻辑思维的演进

    计算思维是基于计算机的思维模式,计算机出现之前,由于没有快速计算装置,计算所反映的思维模式主要是数学思维,即通过公式来求解问题。当快速计算装置出现后,计算思维才真正形成。

    1. 关于Python第三方库安装方法,以下选项描述错误的是:

      A 使用pip命令

      B 联系第三方库作者索要安装文件

      C 访问UCI网站下载安装文件

      D 使用集成安装工具

    请不要联系作者索要第三方库,这不是获取第三方库的合理模式。

    1. 自顶向下设计主要由下列哪个语法元素实现?

      A 循环结构

      B 对象

      C 过程

      D 函数

    函数是自顶向下设计的关键元素,通过定义函数及其参数逐层开展程序设计。

    1. 关于软件产品和程序的区别,以下描述正确的是:

      A 软件产品=程序功能+速度优化

      B 软件程序就是软件产品

      C 软件产品=程序功能+用户体验

      D 从程序功能到软件产品的产品化代价很小

    产品不仅需要功能,更需要更好的用户体验。往往,产品都需要综合考虑技术功能和人文设计,这源于产品的商业特性。即,商业竞争要求产品不能只关心技术功能,更要关心用户易用和喜好需求。

    1. 以下选项对计算思维本质描述正确的是:

      A 抽象和执行

      B 抽象和自动化

      C 计算和思维

      D 描述和执行

    计算思维的本质是:抽象和自动化。

    抽象一个运算过程,以能够按步骤描述为目标;并利用计算机运算的高速特性自动化执行。

    1. 关于用户体验,以下选项描述正确的是:

      A 用户体验不重要,只要有程序功能即可

      B 好产品不一定有好的用户体验,关键在于功能创意

      C 用户体验是客观的,完全可以靠技术来实现

      D 编程只是手段,程序最终为人类服务,用户体验很重要

    一个提醒进度的进度条、一个永不抛出异常的程序、一个快速的响应、一个漂亮的图标、一个合适尺寸的界面等都是用户体验的组成部分。总的来说,用户体验是一切能够提升程序用户感受的组成。

    1. 关于os.path子库,以下选项中用来计算相对路径的函数是:

      A os.path.basename(path)

      B os.path.normpath(path)

      C os.path.abspath(path)

      D os.path.relpath(path)

    顾名思义:os.path.relpath(path) 是 relative path处理函数。

    1. 关于os库,以下选项中可以启动进程执行程序的函数是:

      A os.system()
      B os.run()
      C os.start()
      D os.process()

    除了os.system(),选项其他函数都不存在。

    1. 以下选项关于计算生态描述错误的是:

      A 计算生态主要以开源项目为组织形式

      B 计算生态存在竞争发展、相互依存和迅速更迭的特点

      C 高质量计算生态需要顶层设计的参与才能保障

      D 计算生态类似自然生态,不受单一组织或人物的控制,形成了技术演化路径

    计算生态以竞争发展、相互依存和迅速更迭为特点,在开源项目间不存在顶层设计,以类自然界"适者生存"的方式形成技术演进路径。

    1. 关于Python的os库,以下选项描述正确的是:

      A os库提供了路径操作、进程管理等若干类功能

      B os库是一个第三方库,需要安装后使用

      C os库提供了几十个函数,功能比较有限

      D os库仅适用于Windows平台

    os库是Python重要的标准库之一,提供了几百个函数功能,覆盖与操作系统、文件操作等相关的众多功能。os库适合所有操作系统。

    2.程序设计题

    1. 英文字符的鲁棒输入

    描述:获得用户的任何可能输入,将其中的英文字符进行打印输出,程序不出现错误。

    alpha = []
    for i in range(26):
        alpha.append(chr(ord('a') + i))
        alpha.append(chr(ord('A') + i))
    s = input()
    for c in s:
        if c in alpha:
            print(c, end="")
    

    注意:这里采用遍历字符的方式实现,通过约束字母表达到鲁棒效果。

    1. 数字的鲁棒输入

    描述:获得用户输入的一个数字,可能是浮点数或复数,如果是整数仅接收十进制形式,且只能是数字。对输入数字进行平方运算,输出结果。

    要求:

    (1)无论用户输入何种内容,程序无错误;

    (2)如果输入有误,请输出"输入有误"。

    s = input()
    try:
        if complex(s) == complex(eval(s)):
            print(eval(s)**2)
    except:
        print("输入有误")
    

    complex()和complex(eval())之间的比较将能够排除非数字类型的输入。

    注意:不能直接使用eval(),否则,用户可以通过输入表达式(如100**2)输入数字,与要求不同(在实际应用中带来安全隐患)。

    【笔记】《python语言程序设计》—Python基本语法元素

    【笔记】《python语言程序设计》—Python基本图形绘制

    【笔记】《python语言程序设计》——基本数据类型

    【笔记】《python语言程序设计》——程序的控制结构

    【笔记】《python语言程序设计》——函数和代码复用

    【笔记】《python语言程序设计》——组合数据类型

    【笔记】《python语言程序设计》——文件和数据格式化

    【笔记】《python语言程序设计》——程序设计方法学

    【笔记】《python语言程序设计》——python计算生态概览

    相关文章

      网友评论

        本文标题:【笔记】《python语言程序设计》——程序设计方法学

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