mooc第八周

本文探讨了程序设计的自顶向下方法,通过模拟比赛胜负的案例,展示了如何使用Python进行结构化设计。文章强调了计算思维的重要性,包括问题抽象、模块化设计及配置化思路,同时介绍了Python第三方库的安装与管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自底向上执行,自顶向下设计

以随机数来对运动员比赛胜负进行估计

import random

def printIntro():
    print("模拟两个运动员之间的比赛")
    
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 = winsB+winsA
    print("总共模拟了{}场比赛".format(n))
    print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n))
    print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/ n))
    
def gameOver(a,b):
    return  a==15 or b==15
    
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 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 main():
    printIntro() 												#介绍背景
    probA,probB,n=getInputs()									#获取输入的值
    winsA,winsB=simNGames(n,probA,probB)						#根据A,B的能力值预测获胜多少场
    printSummary(winsA,winsB)									#输出结果

main()

老师讲的这段代码让我感受到程序的结构化设计。自顶向下,还有高耦合的性能。
这段代码虽然繁琐,但修改起来极其方便,维护性强。

利用random.random()来判断胜负,是否科学,还要多查资料,毕竟有个随机数种子,随机并不是真的随机。

程序设计思维

  1. 计算思维:抽象问题的计算过程,利用计算机自动化求解
    面对汉诺塔问题时,如果不将问题抽象化,很难利用递归去解决。
  2. 计算生态:竞争发展、相互依存、迅速更迭
    没有顶层设计、以功能为单位,还有上面的三个特点,是和API区分的明显特点。
    【在这里感受到了开源的不可思议的巨大力量,想使用QGIS、GeoServer去实现自己的目的】
  3. 用户体验:进度展示、异常处理等
  4. IPO、自顶向下、模块化、配置化、应用开发
    **配置化设计是指采取【引擎】+【配置】的方式,将可选参数配置化。**如自动轨迹的绘制

Python第三方库安装

PyPI:
pip安装方法:
pip install <第三方库名> 安装命令
pip install -U <第三方库名> 更新第三方库
pip uninstall <第三方库名> 卸载第三方库
pip download <第三方库名> 下载并不安装指定的第三方库
pip show <第三方库名> 列出指定的第三方库的详细信息
pip search <第三方库名> 根据关键词在名称和介绍中来检索相关的第三方库
pip list 列出已安装的第三方库

集成安装方法:
Anaconda
数据计算领域【可以试一试】

UCI页面“补丁”安装方法:
这是由于安装某些第三方库的时候,还需要一些其他的环境配置,来编译第三方库。

os库

os.path子库
import os.path as p
p.abspath(path) 返回绝对路径
p.relpath(path) 返回相对路径(relative path)
p.dirname(path) 返回path中目录名称
p.basename(path) 返回path最后的文件名称
p.join(path,*paths) 将两个拼接
p.exists(path) 判断路径是否存在
p.getatime() access
p.getmtime() modify
creat
[
getsize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值