python习题p301,8.1——8.7

乒乓竞技分析
import random

def printIntro():
print("这个程序模拟两个选手A和B的乒乓球比赛")
print("程序运行需要A和B的能力值(以0到1之间的小数表示)")

def getInputs():
a = float(input("请输入选手A的能力值(0-1): "))
b = float(input("请输入选手B的能力值(0-1): "))
n = int(input("模拟比赛的场次: "))
return a, b, n

def gameOver(scoreA, scoreB):
if (scoreA >= 11 or scoreB >= 11) and abs(scoreA - scoreB) >= 2:
return True
return False

def simOneGame(probA, probB):
scoreA, scoreB = 0, 0
serving = "A" # 发球方
while not gameOver(scoreA, scoreB):
if serving == "A":
if random.random() < probA:
scoreA += 1
else:
serving = "B"
else:
if random.random() < probB:
scoreB += 1
else:
serving = "A"
return scoreA, scoreB

def simOneMatch(probA, probB):
winsA, winsB = 0, 0
for _ in range(3):
scoreA, scoreB = simOneGame(probA, probB)
if scoreA > scoreB:
winsA += 1
else:
winsB += 1
if winsA == 2 or winsB == 2:
break
return winsA, winsB

def simNGames(n, probA, probB):
winsA, winsB = 0, 0
for _ in range(n):
matchA, matchB = simOneMatch(probA, probB)
if matchA > matchB:
winsA += 1
else:
winsB += 1
return winsA, winsB

def printSummary(winsA, winsB):
"""打印比赛结果"""
n = winsA + winsB
print("\n比赛分析结果,共模拟{}场比赛".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)

if name == "main":
main()

篮球竞技分析
import random

def printIntro():
print("这个程序模拟两个球队A和B的篮球比赛")
print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
print("作者: Python助手\n")

def getInputs():
a = float(input("请输入球队A的能力值(0-1): "))
b = float(input("请输入球队B的能力值(0-1): "))
n = int(input("模拟比赛的场次: "))
return a, b, n

def simOneQuarter(probA, probB):
scoreA, scoreB = 0, 0
for _ in range(100):
if random.random() < probA:
scoreA += random.choice([2, 3])
if random.random() < probB:
scoreB += random.choice([2, 3])
return scoreA, scoreB

def simOneGame(probA, probB):
totalA, totalB = 0, 0
for quarter in range(4):
scoreA, scoreB = simOneQuarter(probA, probB)
totalA += scoreA
totalB += scoreB
return totalA, totalB

def simNGames(n, probA, probB):
winsA, winsB = 0, 0
for _ in range(n):
scoreA, scoreB = simOneGame(probA, probB)
if scoreA > scoreB:
winsA += 1
else:
winsB += 1
return winsA, winsB

def printSummary(winsA, winsB):
n = winsA + winsB
print("\n比赛分析结果,共模拟{}场比赛".format(n))
print("球队A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n))
print("球队B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n))
print("\n篮球比赛与乒乓球比赛的主要不同之处:")
print("1. 得分方式: 篮球有2分和3分,乒乓球每回合只能得1分")
print("2. 比赛时长: 篮球分四节固定时间,乒乓球是达到特定分数")
print("3. 胜负判定: 篮球比较总分,乒乓球是先达到规定局数")
print("4. 随机性影响: 篮球因回合数多,能力优势更易体现")

def main():
printIntro()
probA, probB, n = getInputs()
winsA, winsB = simNGames(n, probA, probB)
printSummary(winsA, winsB)

if name == "main":
main()

第三方库的安装以及使用
import os
import sys
from you_get import common as you_get

def download_video(url, output_dir='./videos'):
"""
使用 you-get 下载视频

参数:
url (str): 视频网址
output_dir (str): 视频保存目录,默认为当前目录下的 videos 文件夹
"""

创建输出目录(如果不存在)

if not os.path.exists(output_dir):
os.makedirs(output_dir)

设置下载参数

sys.argv = ['you-get', '-o', output_dir, url]

try:
you_get.main()
print(f"\n视频下载完成!保存位置: {output_dir}")
except Exception as e:
print(f"\n下载过程中出现错误: {e}")
if name == 'main':

示例:下载一个B站视频

bilibili_url = "https://www.bilibili.com/video/BV1GJ411x7h7"

示例:下载一个YouTube视频(需要能访问)

youtube_url = "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

使用示例

print("开始下载视频...")
download_video(bilibili_url)
from direct.showbase.ShowBase import ShowBase
from panda3d.core import loadPrcFileData
from direct.actor.Actor import Actor
from direct.task import Task
import sys

配置窗口大小和标题
loadPrcFileData("", "window-title Panda3D 示例 - 旋转立方体")
loadPrcFileData("", "win-size 800 600")

class MyApp(ShowBase):
def init(self):
ShowBase.init(self)

# 设置摄像机位置
self.camera.setPos(0, -10, 0)
self.camera.lookAt(0, 0, 0)

# 创建一个立方体
self.cube = self.loader.loadModel("models/box")
self.cube.reparentTo(self.render)
self.cube.setScale(2, 2, 2)  # 放大立方体

# 设置立方体颜色为蓝色
self.cube.setColor(0.2, 0.3, 0.8, 1)

# 添加旋转任务
self.taskMgr.add(self.rotateCube, "rotateCubeTask")

# 添加退出提示
self.accept("escape", sys.exit)  # 按ESC退出
print("按ESC键退出程序")

def rotateCube(self, task):
# 每帧旋转立方体
dt = globalClock.getDt() # 获取帧间隔时间
self.cube.setH(self.cube.getH() + 50 * dt) # 绕Y轴旋转
self.cube.setP(self.cube.getP() + 30 * dt) # 绕X轴旋转
return Task.cont
app = MyApp()
app.run()

import networkx as nx
import matplotlib.pyplot as plt
import random

创建一个空的无向图
G = nx.Graph()

添加节点 (10个节点)
nodes = range(1, 11)
G.add_nodes_from(nodes)

添加随机边 (每个节点连接2-4个其他节点)
for node in nodes:

随机选择2-4个邻居,避免自环

neighbors = random.sample([n for n in nodes if n != node], random.randint(2, 4))
for neighbor in neighbors:
G.add_edge(node, neighbor)

计算网络基本指标
print("网络基本信息:")
print(f"节点数: {G.number_of_nodes()}")
print(f"边数: {G.number_of_edges()}")
print(f"平均度: {sum(dict(G.degree()).values()) / G.number_of_nodes():.2f}")
print(f"聚类系数: {nx.average_clustering(G):.2f}")
print(f"网络直径: {nx.diameter(G)}")
print(f"平均最短路径长度: {nx.average_shortest_path_length(G):.2f}")

可视化网络
plt.figure(figsize=(10, 8))

使用spring布局
pos = nx.spring_layout(G, seed=42) # seed参数保证布局可重复

绘制节点和边
nx.draw_networkx_nodes(G, pos, node_size=500, node_color='skyblue')
nx.draw_networkx_edges(G, pos, width=1.5, alpha=0.6, edge_color='gray')

添加节点标签
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold')

添加标题和关闭坐标轴
plt.title("NetworkX 复杂网络示例", fontsize=15)
plt.axis('off')

显示图形
plt.tight_layout()
plt.show()

保存网络到文件
nx.write_gexf(G, "example_network.gexf")
print("\n网络已保存为 example_network.gexf (可用Gephi等软件打开)")

Pillow库的浮雕图像
from PIL import Image, ImageFilter

def apply_emboss_effect(input_image_path, output_image_path, emboss_strength=2):
"""
应用浮雕效果到图像并保存结果

参数:
input_image_path (str): 输入图像路径
output_image_path (str): 输出图像路径
emboss_strength (int): 浮雕效果强度(默认为2)
"""
try:
# 打开原始图像
original_image = Image.open(input_image_path)

# 应用浮雕滤镜
# Pillow的EMBOSS滤镜已经内置了浮雕效果
embossed_image = original_image.filter(ImageFilter.EMBOSS)

# 如果需要更强的效果,可以多次应用滤镜
for _ in range(emboss_strength - 1):
    embossed_image = embossed_image.filter(ImageFilter.EMBOSS)

# 保存处理后的图像
embossed_image.save(output_image_path)
print(f"浮雕效果已成功应用到图像,并保存到 {output_image_path}")

except FileNotFoundError:
print(f"错误:找不到输入文件 {input_image_path}")
except Exception as e:
print(f"处理图像时发生错误: {str(e)}")
使用示例
if name == "main":
input_path = "input.jpg" # 替换为你的输入图像路径
output_path = "output_embossed.jpg" # 输出图像路径

应用浮雕效果

apply_emboss_effect(input_path, output_path, emboss_strength=2)
Pillow库的模糊图像
from PIL import Image, ImageFilter

def apply_blur_effect(input_image_path, output_image_path, blur_radius=2):
"""
对输入图像应用模糊效果并保存结果

参数:
input_image_path (str): 输入图像文件路径
output_image_path (str): 输出图像文件路径
blur_radius (int): 模糊半径,值越大模糊效果越强,默认为2
"""
try:
# 打开原始图像
original_image = Image.open(input_image_path)

# 应用模糊滤镜
blurred_image = original_image.filter(ImageFilter.GaussianBlur(radius=blur_radius))

# 保存模糊后的图像
blurred_image.save(output_image_path)

print(f"模糊效果已成功应用并保存到 {output_image_path}")

except FileNotFoundError:
print(f"错误: 找不到输入文件 {input_image_path}")
except Exception as e:
print(f"处理图像时发生错误: {str(e)}")
使用示例
if name == "main":

替换为你的输入图像路径

input_image = "input.jpg"

替换为你想要的输出图像路径

output_image = "output_blurred.jpg"

模糊半径,可根据需要调整

blur_radius = 3

posted @ 2025-05-25 11:33  你好book  阅读(7)  评论(0)    收藏  举报