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 = [] 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"): try: with open(filename, "r") as f: data = json.load(f) except FileNotFoundError: data = [] 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 # Fair play ödüllerini belirleme def calculate_fair_play_points(players): if not players: st.warning("Oyuncu listesi boş. Lütfen en az bir oyuncu ekleyin.") return 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 for player in players: if player.yellow_cards == min_yellow_cards and player.red_cards == min_red_cards: player.score += 1 # En az gol yiyen ve en çok gol atan takımlara ödül verme def calculate_goal_awards(players): if not players: st.warning("Oyuncu listesi boş. Lütfen en az bir oyuncu ekleyin.") return min_goals_conceded = min(players, key=lambda p: p.goals_conceded).goals_conceded max_goals_scored = max(players, key=lambda p: p.goals_scored).goals_scored for player in players: if player.goals_conceded == min_goals_conceded: player.score += 1 if player.goals_scored == max_goals_scored: player.score += 1 # Kural ihlallerine göre ceza puanları ekleme def apply_penalty_points(players): penalties = { "Transfer ihlali": -3, "İç transfer ihlali": -5, "Aktiflik ihlali": -1, "Aynı takım arası iç transfer ihlali": -5, "Toplam iç transfer sayısı ihlali": -5, "Kadro planlaması ihlali": -6 } for player in players: for violation in player.penalty_points: if violation in penalties: player.score += penalties[violation] def create_dataframe(players): df_players = pd.DataFrame({ "Oyuncu": [player.name for player in players], "Lig Sıralaması": [player.league_position for player in players], "Hedef Tutturması": [player.target_hit for player in players], "Kupa Aşaması": [player.cup_stage for player in players], "Sarı Kartlar": [player.yellow_cards for player in players], "Kırmızı Kartlar": [player.red_cards for player in players], "Yenilen Goller": [player.goals_conceded for player in players], "Atılan Goller": [player.goals_scored for player in players], "Röportaj Sayısı": [player.interviews for player in players], "Puan": [player.score for player in players] }) return df_players def calculate_scores(players): for player in players: player.score = ( 20 - player.league_position + player.target_hit + player.cup_stage + (1 if player.yellow_cards == 0 else 0) + (1 if player.goals_conceded == min([p.goals_conceded for p in players]) else 0) + (1 if player.interviews >= 25 else 0) ) # Ana uygulama akışı def main(): st.title("Özel Online Score Manager Ligi") player_name = st.text_input("Oyuncu İsmi") player_league_position = st.number_input("Lig Sıralaması", min_value=1, max_value=20) player_target_hit = st.selectbox("Hedef Tutturması", options=[1, -1], index=0) player_cup_stage = st.selectbox("Kupa Aşaması", options=[4, 3, 2, 1], index=0) player_yellow_cards = st.number_input("Sarı Kartlar", min_value=0) player_red_cards = st.number_input("Kırmızı Kartlar", min_value=0) player_goals_conceded = st.number_input("Yenilen Goller", min_value=0) player_goals_scored = st.number_input("Atılan Goller", min_value=0) player_interviews = st.number_input("Röportaj Sayısı", min_value=0) player_penalties = st.multiselect("Kural İhlalleri", options=[ "Transfer ihlali", "İç transfer ihlali", "Aktiflik ihlali", "Aynı takım arası iç transfer ihlali", "Toplam iç transfer sayısı ihlali", "Kadro planlaması ihlali" ]) if st.button("Ekle"): new_player = Player(player_name) new_player.league_position = player_league_position new_player.target_hit = player_target_hit new_player.cup_stage = player_cup_stage new_player.yellow_cards = player_yellow_cards new_player.red_cards = player_red_cards new_player.goals_conceded = player_goals_conceded new_player.goals_scored = player_goals_scored new_player.interviews = player_interviews new_player.penalty_points = player_penalties # Oyuncuyu ekleyip kaydet players = load_data() players.append(new_player) save_data(players) st.success(f"{player_name} eklendi!") # DataFrame'i oluştur players = load_data() df_players = create_dataframe(players) # Hesapla bölümü if st.button("Hesapla"): players = load_data() calculate_fair_play_points(players) calculate_goal_awards(players) apply_penalty_points(players) calculate_scores(players) df_players=create_dataframe(players) save_data(players) st.success("Hesaplamalar yapıldı ve ödüller verildi!") # DataFrame'i görüntüle st.write(df_players) # Excel çıktısı if st.button("Excel İndir"): st.write("Excel İndiriliyor...") with pd.ExcelWriter('oyuncu_verileri.xlsx') as writer: df_players.to_excel(writer, index=False) # Uygulama başlatma if __name__ == "__main__": main()