第十三周作业
p301
8.1
from random import random
def printTntro():
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 >= 11 and a - b >= 2) or (b >= 11 and b - a >= 2)
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获胜{}场比赛,占比{:.1%}".format(winsA,winsA/n))
print("选手B获胜{}场比赛,占比{:.1%}".format(winsB,winsB/n))
def main():
printTntro()
probA,probB,n=getInputs()
winsA,winsB=simNGames(n,probA,probB)
printSummary(winsA,winsB)
8.2
from random import random
def printTntro():
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 a15 or b15
def simOneGame(probA,probB):
scoreA,scoreB=0,0
time_remaining = 48 # 修改点:新增比赛时间,总时间为48分钟
possession = "A" # 修改点:新增变量,表示当前球权
while time_remaining > 0: # 修改点:新增比赛时间限制
if possession == "A":
scoreA += attemptScoring(probA) # 修改点:调用attemptScoring函数模拟得分
possession = "B" # 修改点:球权转移
else:
scoreB += attemptScoring(probB) # 修改点:调用attemptScoring函数模拟得分
possession = "A" # 修改点:球权转移
time_remaining -= 1 # 修改点:每次进攻消耗1分钟
# 修改点:新增加时赛逻辑
while scoreA == scoreB: # 如果比赛结束时打平,进入加时赛
scoreA += attemptScoring(probA)
scoreB += attemptScoring(probB)
time_remaining -= 1 # 加时赛每次进攻也消耗1分钟
return scoreA, scoreB
def attemptScoring(prob):
# 修改点:新增函数,模拟每次进攻的得分
if random() < prob: # 根据能力值决定是否得分
if random() < 0.5: # 假设三分球的概率为50%
return 3
else:
return 2
else:
return 0
def printSummary(winsA,winsB):
n=winsA+winsB
print("竞技分析开始,共模拟{}场比赛".format(n))
print("选手A获胜{}场比赛,占比{:.1%}".format(winsA,winsA/n))
print("选手B获胜{}场比赛,占比{:.1%}".format(winsB,winsB/n))
def main():
printTntro()
probA,probB,n=getInputs()
winsA,winsB=simNGames(n,probA,probB)
printSummary(winsA,winsB)
main()
8.3
已下载

8.4from direct.showbase.ShowBase import ShowBase
from panda3d.core import *
class MyApp(ShowBase):
def init(self):
ShowBase.init(self)
# 加载模型
self.cube = loader.loadModel("models/box")
self.cube.reparentTo(self.render)
app = MyApp()
app.run()
8.5import networkx as nx
import matplotlib.pyplot as plt
创建一个空的无向图
G = nx.Graph()
添加节点
G.add_nodes_from([1, 2, 3, 4])
添加边
G.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 1)])
绘制图形
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=1500, node_color='skyblue', font_size=10, font_weight='bold', arrows=False)
plt.title("Simple Graph Example")
plt.show()
8.6

8.7
'D:\spyder_lianxi\浮雕效果.jpg'

浙公网安备 33010602011771号