python学习笔记

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

2020-03-20  本文已影响0人  Hobbit的理查德

一、前言

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

前段时间,学着用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计算生态概览

上一篇下一篇

猜你喜欢

热点阅读