python程序设计思想
0 Python编程思想
1 基本的程序设计模式
2 解决复杂问题的有效方法:自顶向下(设计)
2.1 自顶向下-分而治之
将一个总问题表达为若干个小问题组成的形式
使用同样方法进一步分解小问题
直至,小问题可以用计算机简单明了的解决
2.2 举例1:体育竞技分析
2.2.1 程序总体框架
2.2.2 程序设计
# 导入python资源包from random import random# 用户体验模块def printIntro():print("这个程序模拟两个选手A和B的某种竞技比赛")print("程序运行需要A和B的能力值(以0到1之间的小数表示)")# 获得A和B的能力值与场次模块def getIntputs():a = eval(input("请输入A的能力值(0-1):"))b = eval(input("请输入B的能力值(0-1):"))n = eval(input("模拟比赛的场次:"))return a, b, n# 模拟n局比赛模块def simNGames(n, probA, probB):winsA, winsB = 0, 0for i in range(n):scoreA, scoreB = simOneGame(probA, probB)if scoreA > scoreB:winsA += 1else:winsB += 1return winsA, winsB# 判断比赛结束条件def gameOver(a, b):return a == 15 or b == 15# 模拟n次单局比赛=模拟n局比赛def simOneGame(probA, probB):scoreA, scoreB = 0, 0serving = "A"while not gameOver(scoreA, scoreB):if serving == "A":if random() < probA:scoreA += 1else:serving = "B"else:if random() < probB:scoreB += 1else:serving = "A"return scoreA, scoreB# 打印结果模块def printSummary(winsA, winsB):n = winsA + winsBprint("竞技分析开始,共模拟{}场比赛".format(n))print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA / n))print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB / n))def main():printIntro()probA, probB, n = getIntputs() # 获得用户A、B能力值与比赛场次NwinsA, winsB = simNGames(n, probA, probB) # 获得A与B的场次printSummary(winsA, winsB) # 返回A与B的结果main()
2.2.3 测试结果
2.3 举例2:的斐波那契数列
cache = {}def fib(number):if number in cache:return cache[number]if number == 0 or number == 1:return 1else:cache[number] = fib(number - 1) + fib(number - 2)return cache[number]if __name__ == '__main__':print(fib(35))
14930352>
3 逐步组建复杂系统的有效测试方法:自底向上(执行)
3.1 自底向上-模块化集成
任何时候栈中符号串和剩余符号串组成一个句型,当句柄出现在栈顶符号串中时,就用该句柄进行归约,这样一直归约到输入串只剩结束符、栈中符号只剩下开始符号,此时认为输入符号串是文法的句子,否则报错。
3.2 举例:0-1背包问题
3.2.1 问题描述
3.2.2 自底向上分析
该物品的重量大于背包的总重量,不考虑,换下⼀个商品;
该商品的重量小于背包的总重量,那么尝试把它装进去,如果装不下就把其他东西换出来,看看装进去后的总价值是不是更高了,否则还是按照之前的装法;
极端情况,所有的物品都装不下或者背包的承重能力为0,那么总价值都是0;
3.2.3 程序设计
# 循环的⽅式,自底向上求解cache = {}items = range(1,9)weights = [10,1,5,9,10,7,3,12,5]values = [10,20,30,15,40,6,9,12,18]# 最⼤承重能⼒W = 4def knapsack():for w in range(W+1):cache[get_key(0,w)] = 0for i in items:cache[get_key(i,0)] = 0for w in range(W+1):if w >= weights[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])]else:cache[get_key(i,w)] = cache[get_key(i-1,w)]else:cache[get_key(i,w)] = cache[get_key(i-1,w)]return cache[get_key(8,W)]def get_key(i,w):return str(i)+','+str(w)if __name__ == '__main__':# 背包把所有东西都能装进去做假设开始print(knapsack())
29>

推荐阅读
(点击标题可跳转阅读)
【专家推荐】保姆级开源工具推荐,一用一个爽,非常劲爆(收藏系列)
【恭喜考研拟录取】极力推荐科研必备软件,让你科研生涯事半功倍
老铁,三连支持一下,好吗?↓↓↓


点分享

点点赞

点在看
评论



