Python首先在 D 盘根目录下创建 以自己学号姓名命名的文件夹,然后完成教材第 8“体育竞技分析”实例,在教材实现功能的基础上,再定义 函数Save Summary(I 功能是把每次程序行结果追加写入自己文件夹中的文件summary.txt 中,每次写入的内容包括各选手的能力值,模拟比赛的总场次及各选手赢得的场次数和占比。(要求程序交互友好、足够强壮)
时间: 2024-02-11 15:04:01 浏览: 24
好的,我理解了你的问题。首先,让我们来创建以你的学号和姓名命名的文件夹,以便将来保存 summary.txt 文件。请执行以下代码:
```python
import os
# 请将下面的信息替换为你自己的学号和姓名
student_id = "your_student_id"
student_name = "your_student_name"
# 创建以学号和姓名命名的文件夹
folder_path = f"D:\\{student_id}_{student_name}"
if not os.path.exists(folder_path):
os.makedirs(folder_path)
```
接下来,我们将复制教材第 8 章的代码,并添加 Save Summary 函数。请执行以下代码:
```python
import random
import os
# 请将下面的信息替换为你自己的学号和姓名
student_id = "your_student_id"
student_name = "your_student_name"
# 创建以学号和姓名命名的文件夹
folder_path = f"D:\\{student_id}_{student_name}"
if not os.path.exists(folder_path):
os.makedirs(folder_path)
def SaveSummary(win_count, total_count, abilities):
"""
将比赛结果追加写入 summary.txt 文件中。
参数:
win_count: 一个字典,记录每个选手赢得的场次数。
total_count: 模拟比赛的总场次。
abilities: 一个字典,记录每个选手的能力值。
"""
# 打开 summary.txt 文件,如果文件不存在,则创建一个新的文件。
file_path = os.path.join(folder_path, "summary.txt")
with open(file_path, "a") as f:
# 写入当前比赛结果
f.write(f"Total: {total_count}, ")
for name, win in win_count.items():
win_rate = win / total_count
f.write(f"{name}: {win}/{total_count}({win_rate:.2%}) ")
f.write("\n")
# 写入每个选手的能力值
f.write("Abilities: ")
for name, ability in abilities.items():
f.write(f"{name}={ability:.2f} ")
f.write("\n\n")
def simulate_game(abilities):
"""
模拟一场比赛,返回获胜选手的名称。
参数:
abilities: 一个字典,记录每个选手的能力值。
"""
names = list(abilities.keys())
random.shuffle(names)
winner = names[0]
for name in names[1:]:
if abilities[name] > abilities[winner]:
winner = name
return winner
def simulate_games(names, num_games):
"""
模拟多场比赛,返回每个选手赢得的场次数和占比。
参数:
names: 一个列表,包含所有参赛选手的名称。
num_games: 模拟比赛的场次。
"""
# 初始化每个选手的赢场数为 0
win_count = {name: 0 for name in names}
# 初始化每个选手的能力值为随机数
abilities = {name: random.random() for name in names}
# 模拟比赛并更新赢场数
for i in range(num_games):
winner = simulate_game(abilities)
win_count[winner] += 1
# 每 100 场比赛输出一次结果
if (i + 1) % 100 == 0:
SaveSummary(win_count, i + 1, abilities)
# 计算每个选手赢得的比赛场次和占比
total_count = sum(win_count.values())
win_rate = {name: win_count[name] / total_count for name in names}
return win_count, win_rate
if __name__ == '__main__':
names = ['player1', 'player2', 'player3', 'player4', 'player5']
num_games = 1000
win_count, win_rate = simulate_games(names, num_games)
print(f"Number of games simulated: {num_games}")
for name, count in win_count.items():
rate = win_rate[name]
print(f"{name}: {count}/{num_games} ({rate:.2%})")
```
现在,你可以运行代码并与程序交互。程序将每 100 场比赛的比赛结果写入 summary.txt 文件中,以便你在运行程序时查看比赛进展。注意,每次运行程序时,程序会从头开始模拟比赛,所以你可以多次运行程序以获得不同的比赛结果。