python第八周,程序设计方法学

实例:体育竞技分析

计算思维:抽象+自动化

模拟:抽象比赛过程+自动化执行n场比赛

当N越大时,比赛结果分析会越科学

解决复杂问题的有效方法:

(自定向下设计)将一个总问题表达为若干个小问题组成的形式,使用同样方法进一步分解小问题,直至小问题可以用计算机简单明了的解决。分而治之

(自顶向上执行)分单元测试,逐步组装,按照自顶向下相反的路径操作,直至系统各部分以组装的思路都经过测试和验证 模块化集成

自顶向下是“系统”思维的简化

#MatchAnalysis.py
#比赛规则,双人击球比赛,直至判分,接下来胜者发球,球员只能在发球局得分,15分胜一局
from random 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 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 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() < probA:
                scoreA += 1
            else:
                serving="B"
        else:
            if random() < probB:
                scoreB += 1
            else:
                serving="A"
    return scoreA, scoreB
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():
    printIntro()
    probA, probB, n = getInputs()
    winsA, winsB = simNGames(n, probA, probB)
    printSummary(winsA, winsB)
main()

将问题分为各个小问题

计算思维与程序设计:

  1. 逻辑思维:推理与演绎,数学为代表,A-->B B--->C   A--->C
  2. 实证思维:实验与验证,物理为代表 引力波<-实验
  3. 计算思维:设计与构造,计算机为代表,汉诺塔递归
  • 计算思维:Computional Thinking 抽象问题的计算过程,利用计算机自动化求解,计算机思维是基于计算机的思维方式
  • 计算生态:竞争发展,相互依存,快速更迭
  • 用户体验:进度展示,异常处理
  • IPO,自顶向下,模块化,配置化,应用开发的四个步骤

原文地址:https://www.cnblogs.com/mouzaisi/p/12177827.html

时间: 2024-10-08 12:22:51

python第八周,程序设计方法学的相关文章

从零开始学Python第八周:网络编程基础(socket)

Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 套接字是一个双向的通信信道的端点.套接字可能在沟通过程,进程之间在同一台机器上,或在不同的计算机之间的进程 要创建一个套接字,必须使用Socket模块的socket.socket()方法 在socket模块中的一般语法: s = socket.

python第八周学习内容

1.socket网络编程 1.1概念: 网络套接字是跨计算机网络的连接的端点.今天,计算机之间的大多数通信都基于互联网协议;因此大多数网络套接字都是Internet套接字.更准确地说,套接字是一个句柄(抽象引用),本地程序可以将其传递给网络应用程序编程接口(API)以使用该连接,例如"在此套接字上发送此数据". 例如,发送"Hello,world!"通过TCP到地址为1.2.3.4的主机的端口80,可以获得一个套接字,将其连接到远程主机,发送字符串,然后关闭套接字.

Python第八周 学习笔记(1)

继承 基本概念个体继承自父母,继承了父母的一部分特征,但也可以有自己的个性 子类继承了父类,就直接拥有了父类的属性和方法,也可以定义自己的属性.方法,甚至对父类的属性.方法进行重写 Python继承实现 class Cat(Animal) 括号中为该类的父类列表 如果类定义时没有父类列表,则只继承object类 object类是所有类的祖先类 类的特殊属性与方法 base 类的基类 bases 类的基类的元组 mro 方法解析时的类的查找顺序,返回元组 mro() 作用同上,返回列表 subcl

第八周 程序阅读-运算符重载

#include <iostream> using namespace std; class Sample { private: int x; public: Sample () { } Sample(int a){x=a;} void disp(){cout<<"x="<<x<<endl;} friend Sample operator+( Sample &s1, Sample &s2); }; Sample opera

2017-2018-2 20179215《网络攻防实践》第八周作业

<网络攻防实践> 第八周 学习总结 一.第八章教材内容总结 Linux 操作系统简介 Linux 系统特点: 兼容UNIX :API 兼容,管理命令和各种工具: 源码开放 支持各种硬件平台,支持多CPU Linux 平台上存在大量的应用软件,以及应 用开发工具 多种不同发行版: RedHat(RHEL,Fedora, CentOS, -),Ubuntu,Debian, - 2.Linux 操作系统: 不是微内核系统,但具有某些微内核特征 Intel 版本:i386 的保护模式,特权级 内核态(

linux学习第八周总结

linux学习第八周总结 本周学习了两个服务,DNS和ansible 由于这些服务很复杂,我也只能是到达刚了解或者是刚刚入门的程度,所以只说一些简单基本的东西,简单总结. 一.DNS服务 1.简介 域名系统(英文:DomainNameSystem,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.DNS使用TCP和UDP端口53.当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符. 记录类型 主条目:域名服务

《信息安全导论》第八周学习总结

<信息安全导论>第八周学习总结 课上 在本周的学习中,我了解了各种初级.高级的程序语言,了解到了它们的程序泛式,知道了其分为命令式(面向对象.面向过程).声明式(函数式.逻辑式). 了解了编译器.解释器.除此之外,还了解了高级程序语言的一些基本结构,如输入/输出结构.控制结构.嵌套逻辑. 另外,还学习了面向对象语言的功能性:封装.继承.多态. 课下 在本周,老师所布置的作业难度提高了一大截.因此,我并没有完全意义上做完老师的作业.但也因此学习到了许多,也了解到了自己知识还比较浅薄. 四则运算程

20135302魏静静——linux课程第八周实验及总结

linux课程第八周实验及总结 实验及学习总结 1. 进程切换在内核中的实现 linux中进程切换是很常见的一个操作,而这个操作是在内核中实现的. 实现的时机有以下三个时机: 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(): 内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度: 用户

20145123刘森明《Java程序设计》第八周学习总结

代码托管地址:http://git.oschina.net/null_289/Java2016 教材学习内容总结 一.日志API 使用日志的起点是Logger类,LOgger实例的创建有许多要处理的要素,LOgger类的构造函数标识为protected,不是java.util.logging同包的类不能直接以new创建,要取得Logger实例,必须使用Logger的静态方法getlogger(). 调用getLogger()是,必须指定Logger实例所属名称空间,名称空间以“.”作为层级区分,