kredi_hesaplama / app.py
yunuseduran's picture
Update app.py
15ebd16 verified
raw
history blame
5.95 kB
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')