本文目录导读:

我来分析Python中处理累计犯规次数的逻辑,帮你设计一个完整的判罚系统:
基础版:简单累计判断
class FoulCounter:
def __init__(self, danger_threshold=5, suspend_threshold=8):
self.foul_count = 0
self.danger_threshold = danger_threshold # 危险警告线
self.suspend_threshold = suspend_threshold # 停赛线
def add_foul(self, foul_type="普通"):
"""记录一次犯规"""
self.foul_count += 1
status = self.get_status()
print(f"犯规类型:{foul_type},当前累计:{self.foul_count}次")
print(f"状态:{status}")
return status
def get_status(self):
"""获取当前犯规状态"""
if self.foul_count >= self.suspend_threshold:
return "停赛处罚"
elif self.foul_count >= self.danger_threshold:
return "危险警告"
elif self.foul_count >= self.danger_threshold - 2:
return "接近危险"
else:
return "正常"
进阶版:带时间窗口的累计
from datetime import datetime, timedelta
from collections import deque
class SmartFoulTracker:
"""智能犯规追踪器 - 考虑时间窗口"""
def __init__(self, time_window_days=7, danger_count=3, suspend_count=5):
self.foul_records = deque() # 存储犯规时间
self.time_window_days = time_window_days
self.danger_count = danger_count
self.suspend_count = suspend_count
self.foul_types = {"黄牌": 1, "红牌": 3, "技术犯规": 2, "违体犯规": 2}
def add_foul(self, foul_type, time=None):
"""添加犯规记录"""
if time is None:
time = datetime.now()
# 计算犯规权重
weight = self.foul_types.get(foul_type, 1)
# 添加记录
self.foul_records.append({
"time": time,
"type": foul_type,
"weight": weight
})
self._clean_old_records()
# 计算当前风险
risk_analysis = self.analyze_risk()
return risk_analysis
def _clean_old_records(self):
"""清理过期记录"""
cutoff = datetime.now() - timedelta(days=self.time_window_days)
while self.foul_records and self.foul_records[0]["time"] < cutoff:
self.foul_records.popleft()
def analyze_risk(self):
"""分析整体风险"""
# 统计最近时间窗口内的总权重
total_weight = sum(record["weight"] for record in self.foul_records)
count = len(self.foul_records)
# 判断风险等级
if total_weight >= self.suspend_count:
risk_level = "🚫 停赛处罚"
elif total_weight >= self.danger_count:
risk_level = "⚠️ 高度危险"
elif count >= self.danger_count - 1:
risk_level = "⚡ 接近危险"
elif count >= self.danger_count - 2:
risk_level = "👁️ 需要关注"
else:
risk_level = "✅ 安全"
return {
"foul_count": count,
"total_weight": total_weight,
"risk_level": risk_level,
"time_remaining": self._get_time_remaining()
}
def _get_time_remaining(self):
"""计算记录过期剩余时间"""
if not self.foul_records:
return "无记录"
oldest = self.foul_records[0]["time"]
expiry = oldest + timedelta(days=self.time_window_days)
remaining = expiry - datetime.now()
return f"{remaining.days}天{remaining.seconds//3600}小时"
实战版:完整比赛监控系统
class MatchFoulSystem:
"""比赛犯规监控系统"""
def __init__(self, game_type="足球"):
self.game_type = game_type
self.players = {}
# 不同比赛的规则
self.rules = {
"足球": {"黄牌": 1, "红牌": 3, "danger": 3, "suspend": 5},
"篮球": {"普通犯规": 1, "技术犯规": 2, "违体犯规": 3, "danger": 5, "suspend": 8},
"冰球": {"小罚": 2, "大罚": 5, " misconduct": 10, "danger": 10, "suspend": 20}
}
def add_player(self, player_id, name):
"""添加球员"""
self.players[player_id] = {
"name": name,
"fouls": [],
"total_weight": 0,
"warnings": 0,
"is_ejected": False
}
print(f"已添加球员:{name}")
def record_foul(self, player_id, foul_type, minutes, quarter):
"""记录犯规"""
if player_id not in self.players:
print("球员不存在")
return
player = self.players[player_id]
if player["is_ejected"]:
print(f"⚠️ {player['name']}已被罚出场,不能再记录犯规")
return
# 获取规则
rules = self.rules.get(self.game_type, self.rules["足球"])
weight = rules.get(foul_type, 1)
# 记录犯规
foul_info = {
"type": foul_type,
"weight": weight,
"minute": minutes,
"quarter": quarter
}
player["fouls"].append(foul_info)
player["total_weight"] += weight
# 检查是否达到警告线
check_result = self.check_status(player_id)
self.print_status(player_id, check_result)
return check_result
def check_status(self, player_id):
"""检查球员状态"""
player = self.players[player_id]
rules = self.rules.get(self.game_type, self.rules["足球"])
result = {
"total_weight": player["total_weight"],
"is_danger": False,
"is_suspended": False,
"message": ""
}
# 风险预警
if player["total_weight"] >= rules["danger"]:
result["is_danger"] = True
result["message"] += f"累积达到{rules['danger']}次犯规,存在风险!"
if player["total_weight"] >= rules["suspend"]:
result["is_suspended"] = True
result["message"] += f"累积达到{rules['suspend']}次犯规,需要停赛!"
player["is_ejected"] = True
return result
def print_status(self, player_id, status):
"""打印球员状态"""
player = self.players[player_id]
print(f"\n{'='*40}")
print(f"球员:{player['name']}")
print(f"累计犯规权重:{status['total_weight']}")
# 颜色警示
if status["is_suspended"]:
print("🔴 严重警告:已达到停赛标准!")
elif status["is_danger"]:
print("🟡 警告:已进入危险区域!")
elif status["total_weight"] >= self.rules[self.game_type]["danger"] - 1:
print("🟠 注意:即将达到危险水平!")
else:
print("🟢 正常")
# 显示犯规明细
print(f"\n犯规详情:")
for foul in player["fouls"][-5:]: # 显示最近5次
print(f" - {foul['type']} (权重:{foul['weight']})")
# 显示剩余余地
rules = self.rules[self.game_type]
remaining = rules["danger"] - status["total_weight"]
if remaining > 0:
print(f"距离危险线还有:{remaining}次犯规的空间")
else:
print("已超过危险线!")
使用示例
# 使用示例
if __name__ == "__main__":
# 创建系统
match = MatchFoulSystem("足球")
# 添加球员
match.add_player("P001", "梅西")
match.add_player("P002", "C罗")
# 模拟犯规
print("\n📋 比赛开始\n")
# 连续犯规测试
test_fouls = [
("普通犯规", "P001", 23, "上半场"),
("黄牌", "P001", 35, "上半场"),
("黄牌", "P001", 58, "下半场"),
("技术犯规", "P001", 67, "下半场"),
("犯规", "P001", 75, "下半场")
]
for foul_type, player_id, minute, phase in test_fouls:
print(f"{phase}第{minute}分钟,{foul_type}:")
match.record_foul(player_id, foul_type, minute, phase)
print()
实时监控与提醒
import threading
import time
class FoulMonitor:
"""实时犯规监控器"""
def __init__(self, max_fouls=3, warning_distance=1):
self.max_fouls = max_fouls
self.warning_distance = warning_distance
self.monitoring = {}
def start_monitoring(self, player_id):
"""开始监控特定球员"""
self.monitoring[player_id] = {
"fouls": 0,
"last_warning": None,
"triggered": False
}
def monitor(self, player_id):
"""监控逻辑"""
if player_id not in self.monitoring:
self.start_monitoring(player_id)
player_data = self.monitoring[player_id]
# 实时检查
while player_data["fouls"] < self.max_fouls:
current_fouls = player_data["fouls"]
distance = self.max_fouls - current_fouls
if distance <= self.warning_distance and not player_data["triggered"]:
print(f"⚠️ 【警告】球员{player_id}还有{distance}次犯规将被罚出场!")
player_data["triggered"] = True
# 模拟等待新的犯规事件
time.sleep(5)
print(f"⚡ 【紧急】球员{player_id}已达到犯规上限,必须换下!")
智能辅助决策
class FoulPredictor:
"""犯规风险预测器"""
def __init__(self):
self.historical_data = []
def predict_risk(self, player_data):
"""预测球员后续犯规风险"""
# 这里可以使用机器学习算法进行预测
# 简单示例:根据比赛时间、场上比分、球员状态等
time_factor = self._get_time_factor(player_data)
pressure_factor = self._get_pressure_factor(player_data)
risk_score = (time_factor * 0.4 + pressure_factor * 0.6) * 100
if risk_score > 80:
return "高风险:建议提前换下"
elif risk_score > 60:
return "中风险:需要密切关注"
else:
return "低风险:可继续比赛"
def _get_time_factor(self, data):
"""时间因素分析"""
# 比赛后期更容易犯规
minute = data["minute"]
return minute / 90 # 归一化到0-1
def _get_pressure_factor(self, data):
"""比赛压力分析"""
# 落后时更容易犯规
score_diff = data["score_diff"]
if score_diff < 0:
return 0.8 + (abs(score_diff) * 0.05)
else:
return 0.3
这些代码提供了完整的犯规监控方案,可以根据实际需求选择使用,关键是:
- 设定明确的阈值:危险线、停赛线
- 实时监控:随时掌握球员状态
- 智能分析:预测风险并给出建议
- 人性化提示:提供清晰的警告信息
如果需要更具体的功能,比如和数据库集成、自动报警、数据分析等,可以进一步扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播