python程序设计思想有哪些,python的设计思想
Python是一种面向对象编程(oop)的脚本语言。
面向对象是利用对象(实体)的概念建立模型,模拟客观世界来分析、设计和实现软件的方法。
在面向对象编程中,对象包含两层含义,一层是数据,一层是动作。面向对象方法将数据和方法结合成一个整体,然后对系统进行建模。
python编程思想的核心是理解函数逻辑。如果解决一个问题的逻辑不清晰,那么你的代码看起来会非常混乱,难以阅读。所以一旦逻辑清晰,功能按照模块系统化编程,那么你的代码设计一定会很漂亮!
的任何程序设计都包括IPO,分别代表以下内容:
I:输入输入,程序的输入P:进程处理,程序的主逻辑进程O:输出输出,程序的输出。因此,如果你想通过计算机实现某种功能,那么基本的编程模式由三部分组成,如下:
IPO的确定:定义要实现的功能的输入输出,以及实现的主要逻辑流程;编程:用编程语言设计并显示计算和求解的逻辑过程;调试程序:按照逻辑流程调试编写好的程序,保证程序按照正确的逻辑正确运行。如果实现功能的逻辑比较复杂,就需要模块化,把复杂的问题分解成几个简单的问题,其中简单的问题可以进一步分解成更简单的问题,直到可以通过模块编程实现功能逻辑,这也是编程自顶向下的特点。摘要如下:
用几个小问题的形式表达一个普遍问题。用同样的方法进一步分解小问题,直到小问题可以用计算机简单明了地解决。2.2.1程序的一般框架printlnfo()第一步:打印程序的介绍性信息。
Getlnputs()第二步:获取程序运行参数:proA,proB,n
N局()第三步:用玩家A和b的能力值模拟N局。
PrintSummary()第四步:输出玩家A和B赢得游戏的次数和概率。
2.2.2编程#导入python资源包
从随机导入随机
#用户体验模块
def printIntro():
Print(这个程序模拟两个玩家A和B之间的某种竞技比赛)
Print(程序运行需要A和B的能力值(用0到1之间的小数表示)
#获取A和b的能力值和会话模块。
def getIntputs():
A=eval(input(请输入A的能力值(0-1):))
B=eval(输入(请输入b的能力值(0-1):))
N=eval(输入(模拟匹配数:))
返回a,b,n
#模拟N场比赛模块
def simNGames(n,probA,probB):
winsA,winsB=0,0
对于范围内的I(n):
scoreA,scoreB=simOneGame(probA,probB)
如果得分a得分b:
winsA=1
否则:
winsB=1
返回winsA,winsB
#判断比赛的结束条件
def gameOver(a,b):
返回a==15或b==15
#模拟n个单机游戏=模拟n个游戏
def simOneGame(probA,probB):
scoreA,scoreB=0,0
服务=A
而不是gameOver(scoreA,scoreB):
if serving==A :
if random() probA:
scoreA=1
否则:
服务=B
否则:
if random() probB:
scoreB=1
否则:
服务=A
返回scoreA,scoreB
#打印结果模块
def printSummary(winsA,winsB):
n=winsA winsB
打印(竞争分析开始,共模拟{}场比赛。格式(n))
Print(玩家A赢了{}局,占{:0.1%} 。格式(winsA,winsA/n))
Print(玩家B赢了{}局,占{:0.1%} 。格式(winsB,winsB/n))
def main():
printIntro()
Proba,probb,n=getinputs () #获取用户A和B的能力值和游戏数n。
Winsa,winsb=simngames (n,proba,probb) #得到A和b的次数。
Summary (winsa,winsb) #返回A和b的结果。
Main()2.2.3测试结果
自顶向下的方法实际上是用递归来解决子问题。最终解只需要调用递归,子问题递归求解到下一级。
编程:
缓存={}
定义纤维(数量):
如果数量在缓存中:
返回缓存[数字]
如果数字==0或数字==1:
返回1
否则:
高速缓存[数量]=光纤(数量- 1)光纤(数量- 2)
返回缓存[数字]
if __name__==__main__ :
打印运行结果(fib(35)):
1930352理解自顶向下的设计思维:分而治之
自底向上(执行)是一种有效的逐步构建复杂系统的测试方法。首先把要解决的问题分成三个要素进行测试,然后按照自上而下的逆向路径进行操作,然后一步步组装各个单元,直到用组装的思想对系统的所有部分进行测试和验证。
理解自下而上的执行思维:模块化集成
自下而上的分析思想:
每当栈中的符号串和剩余的符号串组成一个句型时,当句柄出现在栈顶的符号串中时,句柄用于归约。这样,它会减少,直到输入字符串中只剩下结束符号,堆栈中的符号中只剩下开始符号。此时,输入的符号串被认为是符合语法的句子,否则将报错。自底向上是解决动态规划问题的一种方法。它不是递归,而是直接用循环来计算所有可能的结果,把子问题的解逐步累加到上层。在求解子问题最优解的同时,也等价于求解整个问题的最优解。最困难的部分是找到递归关系,或状态转移方程,以解决最终问题。
3.2.1问题描述你现在想买很多算法书。有一个容量为v的背包,这家店有n件商品。问题是你最多只能取Wkg,其中wi和vi分别代表第I件商品的重量和价值。最终目的是获得最大价值,弄清楚哪些物品可以放进背包。
每种商品你都有两种选择:要不要。
3.2.2自下而上分析首先要做的是找出“子问题”是什么。通过分析发现,背包每装入一个新的物品,剩余的承载能力就可以作为一个新的背包来求解,直接推到载荷为0的背包问题。
M[i,w]用来表示被盗物品的总价值,其中I表示物品总数,W表示总重量。所以,求解m[i,w]是一个子问题。那么,当你看到某个商品I,如何决定是否把它装进背包,你需要考虑以下几点:
这件物品的重量大于背包的总重量。不管怎样,用一种商品代替它;产品重量小于背包总重量,尽量放进去。如果装不下,就把其他东西换出来,看看放进去后总价值是不是更高。否则,遵循前面的加载方法;极端情况下,所有物品都装不下或者背包承载量为0,那么总价值为0;从以上分析可以得出,m[i,w]的状态转移方程为:
m[i,w]=max{m[i-1,w],m[i-1,w-wi] vi}
3.2.3编程#循环公式,自下而上求解
缓存={}
项目=范围(1,9)
权重=[10,1,5,9,10,7,3,12,5]
值=[10,20,30,15,40,6,9,12,18]
#最大负载能力
W=4
def背包():
对于范围内的W(w1):
cache[get_key(0,w)]=0
对于i in项:
cache[get_key(i,0)]=0
对于范围内的W(w1):
如果w=重量[i]:
if cache[get_key(i-1,w-weights[I])]values[I]cache[get _ key(I-1,w)]:
cache[get_key(i,w)]=values[i] cache[get_key(i-1,w-weights[i])]
否则:
cache[get_key(i,w)]=cache[get_key(i-1,w)]
否则:
cache[get_key(i,w)]=cache[get_key(i-1,w)]
返回缓存[get_key(8,W)]
def get_key(i,w):
返回字符串(I),字符串(w)
if __name__==__main__ :
#背包可以把所有东西都放进去。我们来假设一下。开始
print(backpack())29转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。