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

一、前言 学习就是一个不断的自下而上,自上而下的过程。
前段时间,学着用python实现网站的数据爬取,隐约get到python的一些语法和用法,感觉就是语法不难,关键在于解决问题的思维。
这是需求驱动后的学习。接下来,就需要对python进行系统地了解。
很早之前搜知乎的时候,就搜到MOOC上的一门《python语言程序设计》课程,讲得很好,而且,我还下载了课件,溜了一遍,感觉就挺有趣的。
趁着有了实战经验,就把这门入门课刷了一遍。果然是门好课!很适合小白入门,并系统学习,整个教学过程循序渐进,深入浅出,提纲挈领,很有意思!
课程是北京理工大学嵩天老师的《python语言程序设计》课程,现在已经开了11次课了。课程每个小视频短则几分钟,最长也不超过20分钟,不容易劝退。每章讲解有复习回顾及小结,在[平台python123]上有每章的练习和测试,直接反馈结果,激发继续学下去的兴趣。
个人感觉,老师说话速度慢了些,调成了2倍速播放,然后,花了大约3天的时间,把所有的视频,课件,练习和测试都刷了一遍,感觉对python的了解更系统了!
趁热打铁,把每章的知识点和练习、测试再进行整理回顾一下。

以下内容均来自课程:[《python语言程序设计》]及[平台python123],感兴趣的看课程视频,亲自练习,效果更好~
二、知识点 1.实例13:体育竞技分析
比赛规则:
双人击球比赛:A&B,回合制,5局3胜
开始时一方先发球,直至判分,接下来胜者发球
球员只能在发球局得分,15分胜一局
【笔记】《python语言程序设计》——程序设计方法学
文章图片
自顶向下.png
import randomdef 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,ndef 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,winsBdef simOneGame(probA,probB): scoreA,scoreB=0,0 serving='A' while not gameOver(scoreA,scoreB): if serving=='A': if random.random()

结果:
这个程序模拟两个选手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计算生态概览

    推荐阅读