import streamlit as st import pandas as pd import json # Oyuncu sınıfı tanımı class Player: def __init__(self, name): self.name = name self.league_position = None self.target_hit = None self.cup_stage = None self.yellow_cards = 0 self.red_cards = 0 self.goals_conceded = 0 self.goals_scored = 0 self.interviews = 0 self.penalty_points = 0 self.score = 0 # Veri kaydetme fonksiyonu def save_data(players, filename="players.json"): data = [] for player in players: player_data = { "name": player.name, "league_position": player.league_position, "target_hit": player.target_hit, "cup_stage": player.cup_stage, "yellow_cards": player.yellow_cards, "red_cards": player.red_cards, "goals_conceded": player.goals_conceded, "goals_scored": player.goals_scored, "interviews": player.interviews, "penalty_points": player.penalty_points, "score": player.score } data.append(player_data) with open(filename, "w") as f: json.dump(data, f, indent=4) # Veri yükleme fonksiyonu def load_data(filename="players.json"): with open(filename, "r") as f: data = json.load(f) players = [] for player_data in data: player = Player(player_data["name"]) player.league_position = player_data["league_position"] player.target_hit = player_data["target_hit"] player.cup_stage = player_data["cup_stage"] player.yellow_cards = player_data["yellow_cards"] player.red_cards = player_data["red_cards"] player.goals_conceded = player_data["goals_conceded"] player.goals_scored = player_data["goals_scored"] player.interviews = player_data["interviews"] player.penalty_points = player_data["penalty_points"] player.score = player_data["score"] players.append(player) return players # Uygulama başlatıldığında verileri yükle try: players = load_data() except FileNotFoundError: players = [] # Oyuncu ekleme fonksiyonu def add_player(name): players.append(Player(name)) # Oyuncu ekleme arayüzü st.title("Özel Online Score Manager Ligi") st.header("Oyuncu Ekle") new_player_name = st.text_input("Oyuncu İsmi") if st.button("Ekle"): add_player(new_player_name) st.success(f"{new_player_name} eklendi!") save_data(players) # Oyuncu bilgilerini güncelleme arayüzü st.header("Oyuncu Bilgilerini Güncelle") for player in players: st.subheader(player.name) player.league_position = st.number_input(f"Lig Sıralaması ({player.name})", min_value=1, max_value=20, value=player.league_position or 1) player.target_hit = st.selectbox(f"Hedef Tutturması ({player.name})", options=[1, -1], index=0 if player.target_hit == 1 else 1) player.cup_stage = st.selectbox(f"Kupa Aşaması ({player.name})", options=[4, 3, 2, 1], index=player.cup_stage or 0) player.yellow_cards = st.number_input(f"Sarı Kartlar ({player.name})", min_value=0, value=player.yellow_cards) player.red_cards = st.number_input(f"Kırmızı Kartlar ({player.name})", min_value=0, value=player.red_cards) player.goals_conceded = st.number_input(f"Yenilen Goller ({player.name})", min_value=0, value=player.goals_conceded) player.goals_scored = st.number_input(f"Atılan Goller ({player.name})", min_value=0, value=player.goals_scored) player.interviews = st.number_input(f"Röportaj Sayısı ({player.name})", min_value=0, value=player.interviews) if st.button(f"Güncelle {player.name}"): save_data(players) # Puan hesaplama fonksiyonları def calculate_scores(players): calculate_league_points(players) calculate_target_points(players) calculate_cup_points(players) calculate_fair_play_points(players) def calculate_league_points(players): for player in players: if player.league_position is not None: player.score += (20 - player.league_position + 1) def calculate_target_points(players): for player in players: if player.target_hit is not None: player.score += player.target_hit def calculate_cup_points(players): for player in players: if player.cup_stage is not None: player.score += player.cup_stage def calculate_fair_play_points(players): min_yellow_cards = min(players, key=lambda p: p.yellow_cards).yellow_cards min_red_cards = min(players, key=lambda p: p.red_cards).red_cards min_goals_conceded = min(players, key=lambda p: p.goals_conceded).goals_conceded max_interviews = max(players, key=lambda p: p.interviews).interviews for player in players: if player.yellow_cards == min_yellow_cards and player.red_cards == min_red_cards: player.score += 1 if player.goals_conceded == min_goals_conceded: player.score += 1 if player.interviews >= 25: player.score += 1 # Puan hesaplama if st.button("Puanları Hesapla"): calculate_scores(players) st.success("Puanlar hesaplandı!") save_data(players) # Sonuçları görüntüleme st.header("Sonuçlar") results = [{"Oyuncu": player.name, "Puan": player.score} for player in players] results_df = pd.DataFrame(results) st.table(results_df) # Excel çıktısı def to_excel(df): output = io.BytesIO() writer = pd.ExcelWriter(output, engine='xlsxwriter') df.to_excel(writer, index=False, sheet_name='Sheet1') writer.save() processed_data = output.getvalue() return processed_data excel_data = to_excel(results_df) st.download_button(label="Excel İndir", data=excel_data, file_name='sonuclar.xlsx', mime='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')