python程序设计思想
做一个柔情的程序猿
共 4799字,需浏览 10分钟
·
2022-05-30 02:37
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, 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
# 模拟n次单局比赛=模拟n局比赛
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 = getIntputs() # 获得用户A、B能力值与比赛场次N
winsA, 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 1
else:
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 = 4
def knapsack():
for w in range(W+1):
cache[get_key(0,w)] = 0
for i in items:
cache[get_key(i,0)] = 0
for 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
>
推荐阅读
(点击标题可跳转阅读)
【专家推荐】保姆级开源工具推荐,一用一个爽,非常劲爆(收藏系列)
【恭喜考研拟录取】极力推荐科研必备软件,让你科研生涯事半功倍
老铁,三连支持一下,好吗?↓↓↓
点分享
点点赞
点在看
评论