编写乒乓球比赛的主函数
时间: 2024-10-28 20:07:19 浏览: 31
为了编写乒乓球比赛的主函数,我们需要综合考虑面向对象的设计思路和核心逻辑。以下是一个完整的主函数实现:
### 主函数实现
```python
import random
class Player:
def __init__(self, name, nationality, ability):
self.name = name
self.nationality = nationality
self.ability = ability
def show(self):
return f"{self.name} ({self.nationality}) - 能力值: {self.ability}"
class Set:
def __init__(self, set_number, player1, player2):
self.set_number = set_number
self.player1 = player1
self.player2 = player2
self.score1 = 0
self.score2 = 0
self.set_winner = None
def run_set(self):
while True:
if self.run_score():
self.score1 += 1
else:
self.score2 += 1
print(f"第 {self.set_number} 局: {self.score1}:{self.score2}")
if self.check_win_condition():
break
def run_score(self):
# 计算 player1 得分的概率
p = (self.player1.ability - self.player2.ability) / 100 * 2
r = random.random()
return r < p
def check_win_condition(self):
if self.score1 >= 11 and self.score1 - self.score2 >= 2:
self.set_winner = self.player1
return True
elif self.score2 >= 11 and self.score2 - self.score1 >= 2:
self.set_winner = self.player2
return True
return False
class Match:
def __init__(self, player1, player2):
self.player1 = player1
self.player2 = player2
self.set_score1 = 0
self.set_score2 = 0
self.match_winner = None
self.all_sets = []
def run_match(self):
for i in range(5):
new_set = Set(i + 1, self.player1, self.player2)
new_set.run_set()
self.all_sets.append(new_set)
if new_set.set_winner == self.player1:
self.set_score1 += 1
elif new_set.set_winner == self.player2:
self.set_score2 += 1
if self.check_match_winner():
break
def check_match_winner(self):
if self.set_score1 >= 3:
self.match_winner = self.player1
return True
elif self.set_score2 >= 3:
self.match_winner = self.player2
return True
return False
def main():
# 输入选手信息
player1_name, player1_ability, player1_nationality = input("请输入第一位选手的名字、能力值和国籍(空格隔开): ").split()
player2_name, player2_ability, player2_nationality = input("请输入第二位选手的名字、能力值和国籍(空格隔开): ").split()
player1 = Player(player1_name, player1_nationality, int(player1_ability))
player2 = Player(player2_name, player2_nationality, int(player2_ability))
print(f"{player1.show()} vs {player2.show()}")
match = Match(player1, player2)
match.run_match()
print(f"\n{player1.name} vs {player2.name} - 最终结果: {match.set_score1}:{match.set_score2}")
print(f"{match.match_winner.name} 赢得了比赛")
if __name__ == "__main__":
main()
```
### 说明
1. **Player 类**:
- 初始化方法 `__init__` 设置选手的名称、国籍和能力值。
- `show` 方法返回选手的信息字符串。
2. **Set 类**:
- 初始化方法 `__init__` 设置局编号、参赛选手和初始分数。
- `run_set` 方法模拟一局的比赛,直到某一方满足胜利条件。
- `run_score` 方法模拟每一分的结果。
- `check_win_condition` 方法检查当前局是否已结束。
3. **Match 类**:
- 初始化方法 `__init__` 设置参赛选手、初始局数和所有局列表。
- `run_match` 方法模拟整场比赛,直到某一方赢得三局。
- `check_match_winner` 方法检查当前比赛是否已结束。
4. **主函数 `main`**:
- 获取用户输入的选手信息并创建 `Player` 对象。
- 创建 `Match` 对象并运行比赛。
- 输出比赛结果。
这个实现涵盖了乒乓球比赛的主要逻辑,包括每一分、每局和整场比赛的模拟。希望这对你有所帮助!
阅读全文