kredi_hesaplama / app.py
yunuseduran's picture
Update app.py
eddc9ca verified
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()