python慕课版课后题答案,python123和中国大学慕课
尊敬的读者朋友们,请各位耐心听我来为大家解答这些问题:中国大学moocPython程序设计答案以及中国慕课Python程序设计答案。接下来,请让我们一起深入探讨这些问题。

MOOC《Python语言程序设计》(第15次)
程序设计方法学(第八周)21.8.19
文章目录
- 第十五次开课的MOOC课程
- 第八周的程序设计方法学课程于21日8时19分正式开讲
- 单项选择题:程序设计题型的学习笔记
- 实例13:体育竞技分析
- 从上而下采用设计思维的方式进行分析;从下而上则按照执行流程逐步推进
- 实例程序:
- 计算思维:以计算思维为基础、构建生态体系、关注用户体验以及遵循基本的设计模式
- 计算生态与Python语言:深入理解其内在逻辑关系与实现机制
- 用户体验与软件产品:聚焦功能实现过程中的用户体验保障措施
- 基本的程序设计模式:系统性掌握各类典型编程思路及其适用场景
- 实例7:第三方库安装
- 模块7:os库的使用
- 实例14:编写用于自动安装第三方库的脚本示例
单向选择题
1、关于os库,以下选项中可以启动进程执行程序的函数是:
A、os.process()
B、os.run()
C、os.start()
D、os.system()
正确答案 D
除了os.system(),选项其他函数都不存在。
2、自顶向下设计主要由下列哪个语法元素实现?
A、函数
B、对象
C、过程
D、循环结构
本题的最佳选项为A选项。
在程序设计中采用自顶向下的方法论时,函数作为这一策略的核心模块被广泛运用,通过系统地定义函数及其输入参数来构建程序逻辑,从而实现问题的分层解决。
该方法不仅有助于提高代码的可读性,还能使开发过程更加高效。
此外,借助工具如Python Turtle画递归树,开发者能够直观地展示算法的执行流程,便于理解与教学演示。
**3、关于Python的os库,以下选项描述正确的是:**
A、os库提供了路径操作、进程管理等若干类功能
B、os库提供了几十个函数,功能比较有限
C、os库是一个第三方库,需要安装后使用
D、os库仅适用于Windows平台
os软件包是Python的关键标准软件包之一。它包含数百个功能模块,并涵盖操作系统及文件处理等相关功能模块。该软件包支持多种主流操作系
统。
4、关于用户体验,以下选项描述正确的是:
A、编程只是手段,程序最终为人类服务,用户体验很重要
B、用户体验不重要,只要有程序功能即可
C、好产品不一定有好的用户体验,关键在于功能创意
D、用户体验是客观的,完全可以靠技术来实现
组件包含:显示进度条;无误报错;迅速处理问题;美观图标;合理大小界面。
用户体验即为提升程序用户使用体验的关键因素。
5、关于Python第三方库安装方法,以下选项描述错误的是:
A、访问UCI网站下载安装文件
B、使用pip命令
C、使用集成安装工具
D、联系第三方库作者索要安装文件
切勿向作者索取第三方库, 这不符合合理获取第三方库的方式
6、以下选项关于计算生态描述错误的是:
A、计算生态主要以开源项目为组织形式
B、高质量计算生态需要顶层设计的参与才能保障
C、计算生态存在竞争发展、相互依存和迅速更迭的特点
计算生态如同自然生态,在不为单一组织或人物所掌控的情况下构成了技术演化的路径
计算生态以其竞争性发展、相互依存性和快速迭代的特点,在开源项目间缺乏统一规划,并以类似自然生态系统中‘适者生存’的方式形成技术演进路线。
7、以下选项对计算思维本质描述正确的是:
A、抽象和执行
B、描述和执行
C、计算和思维
D、抽象和自动化
正确答案 D
计算思维的本质是:抽象和自动化。
抽象一个运算过程,以能够按步骤描述为目标;并利用计算机运算的高速特性自动化执行。
8、关于os.path子库,以下选项中用来计算相对路径的函数是:
A、os.path.basename(path)
B、os.path.relpath(path)
C、os.path.normpath(path)
D、os.path.abspath(path)
正确答案 B
顾名思义:os.path.relpath(path) 是 relative path处理函数。
9、关于软件产品和程序的区别,以下描述正确的是:
A、软件产品=程序功能+速度优化
B、软件程序就是软件产品
C、软件产品=程序功能+用户体验
D、从程序功能到软件产品的产品化代价很小
正确答案 C
通常情况下,在产品开发中不仅需要关注其功能性能,还需要重视用户体验的优化。通常来说,在产品设计过程中必须综合权衡技术和人性化的结合点。这一现象源于产品的商业属性:即在激烈的市场竞争中,企业不能仅仅关注产品的技术性能;而必须兼顾用户的使用体验以及个性化需求。
10、关于计算思维,以下选项描述正确的是:
A、计算思维从古至今一直存在
B、计算思维关于设计和构造,可以脱离计算机而存在
C、计算思维是基于计算机的思维模式
D、计算思维是逻辑思维的演进
正确选项为 C。
建立在计算机技术发展基础之上的是计算思维模式。\n\nprior to the advent of rapid calculation devices, the computational mindset was primarily rooted in mathematical reasoning.\n\nWith the introduction of rapid calculation devices, computational thinking evolved into a distinct phase.
程序设计题
英文字符的鲁棒输入
'''
描述:
获得用户的任何可能输入,将其中的英文字符进行打印输出,程序不出现错误。
'''
# 方法一
s = input()
for c in s:
if 'z'>=c>='a' or 'Z'>=c>="A": #逐个比较字符
print(c, end="")
# 方法二
alpha = []
for i in range(26): # 将所有英文字母收录到alpha列表中
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="")
数字的鲁棒输入
# 数字的鲁棒输入
'''
描述
获得用户输入的一个数字,可能是浮点数或复数,如果是整数仅接收十进制形式,且只能是数字。对输入数字进行平方运算,输出结果。
'''
s = input()
try: # 这里用到了 try except 异常处理
if complex(s) == complex(eval(s)):
print(eval(s)**2)
except:
print("输入有误")
complex() 函数的作用是生成具有实部 real 和虚部 imag*j 的复数值对象;该函数也可用于将字符串或数字转换为复数形式;当输入是一个字符串时,默认会省略后面的参数设置
# complex使用实例
>>>complex(1, 2)
(1 + 2j)
>>> complex(1) # 数字
(1 + 0j)
>>> complex("1") # 当做字符串处理
(1 + 0j)
# 注意:这个地方在"+"号两边不能有空格,也就是不能写成"1 + 2j",应该是"1+2j",否则会报错
>>> complex("1+2j")
(1 + 2j)
学习笔记
1、实例13:体育竞技分析
自顶向下(设计)
将一个总问题表达为若干个小问题组成的形式
使用同样的方法进一步分解小问题
直至,小问题可以用计算机简单明了的解决
自底向上(执行)
- 实施单元测试
- 按照相反的方式,在自顶向下的路径上执行操作
- 直至所有系统组件均通过基于组装思路的方式完成测试与验证工作
实例程序:
需求:科学分析体育竞技比赛
输入:球员能力值
输出:预测的比赛成绩
比赛规则:
双人击球赛采用A/B轮流制
每局由一方先发球,直至判分,接下来胜出的一方继续发球
球员仅能在发球局内获得分数,若一方累计得分为15分则赢得该局
程序设计思路:
基于自顶向下的设计框架, 将整个复杂问题划分为四个具体环节: 实施printInfo函数(putInfo), 收集输入数据(getInputs), 运行多轮次的比赛模拟(simulate N games), 并输出最终结果(printSummary).
其中,对于模拟N局比赛又可以分解为循环模拟一局比赛(simOneGame)
此外,在仿真一局比赛中不仅能够包含一局比赛的结束标志(gameOver),还可以将其整合到该过程的实现中,并无需过分拆解。
程序流程图如下:

注释:测试完历程后发现并没有实现五局三胜制,因此对历程做了修改
当然,这样会增加程序的计算量,模拟1000场比赛就要进行5000局模拟
# 实例13:体育竞技分析
'''
程序总体框架及步骤
-步骤1:打印程序的介绍性信息(printInfo)
-步骤2:获得程序运行参数:proA, proB, n(getInputs)
-步骤3:利用球员A和B的能力值,模拟n局比赛(simNGames)
--模拟一句比赛(simOneGame)
---模拟比赛结束(gameOver)
-步骤4∶输出球员A和B获胜比赛的场次及概率(printSummary)
'''
from random import random
def printInfo():
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 gameOver(a,b): # 判断选手获得一句的胜利,即先获得15分
return a == 15 or b==15
def simOneGame(probA,probB):
scoreA,scoreB = 0,0
serving = "A"
while not gameOver(scoreA,scoreB): # 对局未结束时
if serving == 'A': # A发球时
if random() < probA: # 若A得分,scoreA+1
scoreA +=1
else: # 若A未得分,换B发球
serving = 'B'
else:
if random() < probB: # 若B得分,scoreB+1
scoreB +=1
else:
serving = 'A' # 若B未得分,换A发球
return scoreA,scoreB
def simNgames(n,probA, probB):
winsA,winsB = 0,0 # A,B胜利的总场数
for i in range(n):
wA, wB = 0, 0 # 一场比赛(5局)中A或B胜利的场数
while(wA<3 and wB<3):# 当A,B中一人先赢3局,比赛结束
scoreA, scoreB = simOneGame(probA, probB)
if scoreA > scoreB: # 若A胜一句,A胜利的局数+1
wA += 1
else: # 若B胜一局,B胜利的局数+1
wB += 1
if wA == 3:
winsA += 1 # 若本场A胜,A胜利的总场数+1
else:
winsB +=1 # 若本场B胜,B胜利的总场数+1
return winsA,winsB
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 main():
printInfo()
probA,probB,n = getInputs()
winsA,winsB = simNgames(n,probA,probB)
printSummary(winsA,winsB)
main()
2、Python程序设计思维
2.1 计算思维
- 逻辑思维主要通过推理与演绎进行分析和探讨,并将数学作为其核心工具。
- 实证思维则依赖于实验观察与数据检验来验证假设,并物理学提供了一整套系统的理论框架。
- 计算思维则侧重于利用计算机技术进行系统设计与问题求解。
计算思维抽象问题的计算过程,利用计算机自动化求解。
计算思维基于计算机强大的算力和海量数据
抽象计算过程,关注设计和构造,而非因果
以计算机程序设计为实现的主要手段
2.2 计算生态与Python语言
计算生态的含义
计算生态基于开源项目的组织架构,并充分运用共识原则和社会利他原则来凝聚人员,在竞争发展中实现技术迭代更新。基于人员间的相互依存与快速变化的市场环境,在竞争发展、相互依存和迅速更迭中完成信息技术的更新换代,并形成了技术的一套自我演化机制。
计算生态的特点
没有顶层设计、以功能为单位,具有竞争发展、相互依存、迅速更迭的特点
计算生态与Python语言的关系
具有以开源项目为代表的大量第三方库
同一功能可能存在多个第三方库,在构建过程中经历了自发的发展,并遵循了优胜劣汰的淘汰机制。
库之间相互关联使用,依存发展,逐级封装
社区庞大,新技术更迭迅速
计算生态的价值
加速科技类应用创新的重要支撑
发展科技产品商业价值的重要模式
国家科技体系安全和稳固的基础
计算生态的运用
编程的起点不是算法而是系统
编程如同搭积木,利用计算生态为主要模式
编程的目标是快速解决问题
2.3 用户体验与软件产品
用户的体验指的是用户对产品的主观感知和认识。同时必须重视用户体验才能打造优质产品。程序设计仅仅是一种手段,并非终极目标。让程序始终以人类的需求为核心。
提高用户体验的方法
方法1:进度展示
- 如果某个操作耗时较长可能导致系统等待 建议在每次操作完成后及时同步至服务器端
- 如果某个过程包含多个环节 方便了解当前处理进展 建议及时同步至服务器端
- 如果某个算法包含频繁进行的迭代运算 建议及时同步至服务器端
方法2:异常处理
- 当获取用户输入时(为了合规性检查),需处理可能出现的异常情况。
- 在读写文件的过程中(为了判断结果),需处理可能出现的异常情况。
- 在执行输入输出操作时(为了判断运算结果),需处理可能出现的异常情况。
其他类方法:
- 输出程序运行过程信息:特定位置显示程序运行时的各项数据指标
- 记录程序异常及用户使用情况的日志信息:定期生成系统日志文件
- 为用户提供多种方式的帮助信息:通过多种途径提供技术支持
用户体验室程序到产品的关键环节!
2.4 基本的程序设计模式
IPO设计:
- 制定IPO计划:清晰界定关键计算模块及其功能范围
- 开发程序:将这一设计得以实现
- 测试和调试程序:确保严格按照预期流程运行
自顶向下设计:
- 首先将整个大问题拆解成为多个具体的小问题集合
- 然后持续采用相同的分析方法对这些小问题进行细化
- 直到每一个小目标都能被系统直接给出明确解答
模块化设计:
- 采用函数或对象包装来实现对程序的划分成模块,并明确模块间的相互表达内容, 其中包含主程序及其相关部分.
- 各子程序及其相互之间的关系需要明确描述.
- 分而治之是一种分而治之, 分层抽象与体系化的设计思路.
在操作过程中需特别注意以下事项:紧密关联与较弱关联之间的区别。(当两个模块之间的交互频繁且相互依赖时属于紧密关联状态;反之则被视为较弱关联状态;其中内部模块间具有紧密关联性较强的特点...)
配置化设计 :
- 引擎+配置:通过编写基于参数的配置文件来实现模块化架构
- 按需扩展而不影响现有功能
- 核心设计是接口定义与组件交互机制
- 界面友好且具有良好的扩展性
应用开发的四个步骤:
产品定义:对应用需求深入理解和明确界定。对于产品定义而言,并非仅限于功能层面的设计与实现;还需考虑商业模式因素。
基于系统化思维对产品的技术实现方案进行深入分析与探讨。重点关注数据流的处理、模块化设计以及整体架构规划。
- 设计与实现:基于架构的关键设计和系统实现考虑到可扩展性和灵活性等进行优化设计
4.用户体验:从用户角度思考应用效果用户至上,体验优先,以用户为中心
3、Python第三方库安装
python社区:
PyPI·The Python Package Index https://pypi.org/

第三方库的pip安装方法(主要方法)
# 常用pip命令,需要联网安装
pip install <第三方库名> # 安装指定的第三方库
pip list # 列出当前系统已经安装的第三方库
pip install -U <第三方库名> # 使用-U标更新已安装的库
pip uninstall <第三方库名> # 卸载指定的第三方库
pip download <第三方库名> # 下载但不安装指定的第三方库
pip show <第三方库名> # 列出某个指定第三方库的详细信息
pip search <关键词> # 根据关键词在名称和介绍中搜索第三方库
第三方库的集成安装方法
Anaconda
Pycharm的File—>settings—>python interpreter
第三方库的文件安装方法
从网站上下载第三方库,使用pip intall <文件名>命令进行安装。
UCI页面 :http://www.lfd.uci.edu/~gohlke/pythonlibs/

4、模块7:os库的使用
os库提供通用的基本的操作系统交互功能
os库是Python标准库,包含几百个函数
常用路径操作、进程管理、环境参数等几类
os库之路径操作
os.path子库以path为入口,用于操作和处理文件路径
库的导入:import os.path 或者 import os.path as op
| 函数 | 描述 |
|---|
| os.path.abspath(path)| 返回path在当前系统中的绝对路径
os.path.abspath(“file.txt”)
‘c: \lUsers\Tian Song\Python36-32\file.txt’ |
| os.path.normpath(path)| 归一化path的表示形式,统一用\分隔路径
os.path.normpath(“D: //PYE//file.txt”)
‘D: \IPYE\file.txt’ |
| os.path.relpath(path)| 返回当前程序与文件之间的相对路径(relative path)
os.path.relpath(“C: / /PYE//file.txt”)
’…\…\…\…\…\…\…\PYE\file.txt’ |
| os.path.dirname(path)| 返回path中的目录名称
os.path.dirname(“D: / /PYE//file.txt”)
‘D://PYE’ |
| os.path.basename(path)| 返回path中最后的文件名称
os.path.basename(“D: //PYE//file.txt”)
"file.txt’ |
| os.path.join(path, *paths)| 组合path与paths,返回一个路径字符串>>>os.path.join(“D:/”,“PYE/file.txt")
‘D:/PYE/file.txt’ |
| os.path.exists(path)| 判断path对应文件或目录是否存在,返回True或False
os.path.exists(“D://PYE//file.txt”)
False |
| os.path.isfile(path)| 判断path所对应是否为已存在的文件,返回True或False
os.path.isfile(“D://PYE//file.txt”)
True |
| os.path.isdir(path)| 判断path所对应是否为已存在的目录,返回True或False
os.path.isdir(“D: //PYE//file.txt”)
False |
| os.path.getatime(path)| 返回path对应文件或目录上一次的访问时间>>>os.path.getatime( “D:/PYE/file.txt”)
1518356633.7551725 |
| os.path.getmtime(path)| 返回path对应文件或目录最近一次的修改时间>>>os.path.getmtime(“D:/PYE/file.txt”)
1518356633.7551725 |
| os.path.getctime(path)| 返回path对应文件或目录的创建时间
time.ctime(os.path.getctime(“D:/PYE/file.txt”))
‘Sun Feb 11 21:43:53 2018’ |
| os.path.getsize(path)| 返回path对应文件的大小,以字节为单位
os.path.getsize(“D:/PYE/file.txt”)
180768 |
os库之进程管理
os.system(command)
执行程序或命令command
在Windows系统中,返回值cmd的调用返回信息
import os
# 运行计算器
os.system("c:\ Windows\ System32\ calc.exe")
# 打开图片
os.system("C:\ Windows\ System32\ mspaint.exe "
"D:\ PYECourse\ grwordcloud.png")
os库之环境参数
获得或改变系统环境信息
| 函数 | 描述 |
|---|
|更改当前工作目录为指定路径|修改当前程序操作的路径
os.dir('D:') |
|获取当前目录| os.dir('D:')
os.getcwd() |
|获取登录用户名| os.getlogin()
os.getlogin()
'Tian Song' |
|获取系统CPU数量| os.cpu_count()
os.cpu_count()
8 |
|生成n个字节的随机字符串用于加密运算|生成n个字节长度的随机字符串,通常用于加解密运算
os.urandom(10)
'b'7\xbe\xf2 ! ixc1=\x01gLlxb3'' |
5、实例14:第三方库自动安装脚本
需求:批量安装第三方库
# 实例14:第三方库自动安装脚本
import os
libs = {"numpy","matplotlib","pillow","sklearn","requests",
"jieba","beautifulsoup4","wheel","networkx","sympy",
"pyinstaller","django","flask","werobot","pyqt5",
"pandas","pyopeng1","pypdf2","docopt","pygame"}
dellibs = {"sklearn","wheel","networkx","sympy","django",
"flask","werobot","pyqt5","pandas","pyopeng1",
"pypdf2","docopt","pygame"}
try: # 批量安装第三方库
for lib in libs:
os.system("pip install "+lib)
print("{} Successful".format(lib))
except:
print("Failed Somehow")
try: # 批量卸载第三方库
for lib in dellibs:
os.system("pip uninstall "+lib)
print("del {} Successful".format(lib))
except:
print("Failed Somehow")
新增了一个能够批量处理第三方库安装包的程序,在执行卸载操作前会提示用户确认是否要完成此操作,默认情况下不会进行卸载。建议在确认后手动输入'y'以表示同意,如图

学习资料来源:该课程由北京理工大学提供于中国大学MOOC(慕课)平台上
学习资料来源
