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

一、前言

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容