Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import json | |
import io | |
# 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=0 if player.cup_stage is None else player.cup_stage - 1) | |
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') | |