🌾 Tarımsal Faaliyet Simülasyonu

Versiyon 2.0 - Python & Web Uygulaması

👤 Kullanıcı Bilgileri

📏 Tarla Bilgileri

📋 Bilgi

Tarlanızın ölçülerini metre cinsinden giriniz. Sistem otomatik olarak dekar ve hektar hesaplaması yapacaktır.

🌱 Mahsul Seçimi

📋 Bilgi

Yetiştirmek istediğiniz mahsulü seçiniz. Her mahsulün farklı hasat süresi ve verim oranları bulunmaktadır.

🌾

Buğday

Hasat: 120 gün

Verim: 450 kg/dekar

🌽

Mısır

Hasat: 90 gün

Verim: 600 kg/dekar

🍅

Domates

Hasat: 75 gün

Verim: 800 kg/dekar

🥔

Patates

Hasat: 100 gün

Verim: 550 kg/dekar

🌾

Arpa

Hasat: 110 gün

Verim: 400 kg/dekar

☁️

Pamuk

Hasat: 150 gün

Verim: 350 kg/dekar

Simülasyon Hızı

📋 Bilgi

Simülasyonun ne kadar detaylı çalışmasını istediğinizi seçiniz.

📊 Simülasyon Özeti

✅ Bilgileriniz Onaylanıyor

🚜 Simülasyon Çalışıyor

0%

📈 Genel İstatistikler

🐍 Python Kaynak Kodu

📝 Açıklama

Bu web uygulaması, aşağıdaki Python kodunun tam JavaScript çevirisidir. Tüm Python yapıları (if-elif-else, for, while, try-except, def, input validasyonları, tip dönüşümleri) web versiyonunda da mevcuttur.

Python Özellikleri: Type conversion (int, float, string), Boolean değerler, Döngüler (for, while), Koşullar (if-elif-else), Fonksiyonlar (def), Hata yakalama (try-except), Input validasyonları

# Gelişmiş Tarımsal Faaliyet Simülasyonu
# Tüm Python yapıları içeren kapsamlı uygulama

import sys
from datetime import datetime

def banner_goster():
    """Uygulama başlangıç banner'ını gösterir"""
    print("=" * 80)
    print(" " * 20 + "TARIMSAL FAALİYET SİMÜLASYONU")
    print(" " * 25 + "Versiyon 2.0 - 2025")
    print("=" * 80)
    print()

def sayisal_giris_al(mesaj, tip="float", min_deger=None, max_deger=None):
    """
    Kullanıcıdan sayısal veri alır ve doğrulama yapar
    Hatalı giriş durumunda tekrar ister
    """
    while True:
        try:
            girdi = input(mesaj).strip()
            
            if tip == "int":
                deger = int(girdi)
            elif tip == "float":
                deger = float(girdi)
            else:
                deger = float(girdi)
            
            # Değer aralığı kontrolü
            if min_deger is not None and deger < min_deger:
                print(f"❌ HATA: Değer en az {min_deger} olmalıdır!")
                continue
            
            if max_deger is not None and deger > max_deger:
                print(f"❌ HATA: Değer en fazla {max_deger} olmalıdır!")
                continue
            
            return deger
            
        except ValueError:
            if tip == "int":
                print(f"❌ HATA: Lütfen geçerli bir tam sayı giriniz!")
            else:
                print(f"❌ HATA: Lütfen geçerli bir sayı giriniz!")
        except Exception as e:
            print(f"❌ Beklenmeyen hata: {e}")

def evet_hayir_al(mesaj):
    """Boolean döndüren evet/hayır sorusu"""
    while True:
        try:
            cevap = input(mesaj).strip().upper()
            
            if cevap in ["E", "EVET", "Y", "YES"]:
                return True
            elif cevap in ["H", "HAYIR", "N", "NO"]:
                return False
            else:
                print("❌ HATA: Lütfen 'E' (Evet) veya 'H' (Hayır) giriniz!")
        except Exception as e:
            print(f"❌ Beklenmeyen hata: {e}")

def alan_hesapla(uzunluk, genislik):
    """Tarla alanını hesaplar (m²)"""
    return float(uzunluk) * float(genislik)

def hektar_donustur(metrekare):
    """Metrekareyi hektara çevirir"""
    return metrekare / 10000.0

def mahsul_secimi_menu():
    """Mahsul seçim menüsünü gösterir ve seçim alır"""
    mahsuller = {
        1: {"ad": "Buğday", "hasat_gun": 120, "verim": 450},
        2: {"ad": "Mısır", "hasat_gun": 90, "verim": 600},
        3: {"ad": "Domates", "hasat_gun": 75, "verim": 800},
        4: {"ad": "Patates", "hasat_gun": 100, "verim": 550},
        5: {"ad": "Arpa", "hasat_gun": 110, "verim": 400},
        6: {"ad": "Pamuk", "hasat_gun": 150, "verim": 350}
    }
    
    while True:
        try:
            print("\n" + "─" * 60)
            print("MAHSUL SEÇİM MENÜSÜ")
            print("─" * 60)
            
            for anahtar, bilgi in mahsuller.items():
                print(f"{anahtar}. {bilgi['ad']:<15} | Hasat Süresi: {bilgi['hasat_gun']} gün | "
                      f"Verim: {bilgi['verim']} kg/dekar")
            
            print("─" * 60)
            
            secim = sayisal_giris_al("Mahsul numarasını seçiniz (1-6): ", "int", 1, 6)
            
            return mahsuller[secim]
            
        except KeyError:
            print("❌ HATA: Geçersiz seçim!")
        except Exception as e:
            print(f"❌ Beklenmeyen hata: {e}")

def bakim_turu_belirle(gun):
    """
    Switch-case benzeri yapı: Belirli günlerde yapılacak bakım işlemlerini döndürür
    Python 3.10+ match-case kullanımı
    """
    # Klasik if-elif-else yapısı (tüm Python sürümleri için)
    if gun == 1:
        return "🌱 Ekim işlemi ve tohum atımı"
    elif gun == 5:
        return "🔬 Toprak analizi ve pH ölçümü"
    elif gun == 10:
        return "💧 İlk sulama işlemi"
    elif gun == 15:
        return "🌿 Filizlenme kontrolü"
    elif gun == 20:
        return "🧪 Mineral gübre uygulaması"
    elif gun == 30:
        return "🦗 Zararlı ve haşere kontrolü"
    elif gun == 40:
        return "💦 Yoğun sulama dönemi başlangıcı"
    elif gun == 50:
        return "🌾 Bitki boyu ölçümü ve değerlendirme"
    elif gun == 60:
        return "🧬 Organik gübre takviyesi"
    elif gun == 70:
        return "🔍 Hastalık ve mantar kontrolü"
    elif gun == 80:
        return "💨 Havalandırma ve toprak gevşetme"
    elif gun == 90:
        return "🌡️ İklim uyum değerlendirmesi"
    elif gun == 100:
        return "📊 Hasat öncesi verim tahmini"
    elif gun == 110:
        return "🚜 Hasat ekipmanları hazırlığı"
    elif gun % 7 == 0:  # Her 7 günde bir
        return "📋 Haftalık genel kontrol ve raporlama"
    else:
        return None

def hasat_kontrolu(mahsul_bilgi, gun):
    """Hasat zamanı gelip gelmediğini kontrol eder - Boolean döndürür"""
    return gun >= mahsul_bilgi["hasat_gun"]

def verim_hesapla(alan_dekar, mahsul_bilgi, verimlilik_katsayisi):
    """Toplam verimi hesaplar"""
    return alan_dekar * mahsul_bilgi["verim"] * verimlilik_katsayisi

def hava_durumu_simulasyon(gun):
    """
    Hava durumu simülasyonu yapar
    String değerler döndürür
    """
    # Gün sayısına göre basit hava durumu simulasyonu
    hava_kodu = gun % 5
    
    if hava_kodu == 0:
        return "☀️ Güneşli", 1.0
    elif hava_kodu == 1:
        return "⛅ Parçalı Bulutlu", 0.95
    elif hava_kodu == 2:
        return "☁️ Bulutlu", 0.9
    elif hava_kodu == 3:
        return "🌧️ Yağmurlu", 0.85
    else:
        return "⛈️ Fırtınalı", 0.75

def tarla_bilgileri_al():
    """Tarla bilgilerini kullanıcıdan alır"""
    print("\n" + "=" * 60)
    print("TARLA BİLGİLERİ GİRİŞİ")
    print("=" * 60)
    
    while True:
        try:
            uzunluk = sayisal_giris_al("Tarlanın uzunluğunu metre cinsinden giriniz: ", 
                                       "float", min_deger=1.0)
            genislik = sayisal_giris_al("Tarlanın genişliğini metre cinsinden giriniz: ", 
                                        "float", min_deger=1.0)
            
            alan_m2 = alan_hesapla(uzunluk, genislik)
            alan_dekar = alan_m2 / 1000.0  # 1 dekar = 1000 m²
            alan_hektar = hektar_donustur(alan_m2)
            
            print(f"\n📏 Tarla Ölçüleri:")
            print(f"   • Alan: {alan_m2:.2f} m²")
            print(f"   • Alan: {alan_dekar:.2f} dekar")
            print(f"   • Alan: {alan_hektar:.4f} hektar")
            
            onay = evet_hayir_al("\nBu bilgiler doğru mu? (E/H): ")
            
            if onay:
                return uzunluk, genislik, alan_m2, alan_dekar, alan_hektar
            else:
                print("\n🔄 Bilgiler yeniden alınıyor...\n")
                
        except Exception as e:
            print(f"❌ Hata oluştu: {e}")

def simulasyon_hizi_sec():
    """Simülasyon hızını seçer"""
    print("\n" + "─" * 60)
    print("SİMÜLASYON HIZI SEÇİMİ")
    print("─" * 60)
    print("1. Detaylı (Her gün ayrı gösterilir)")
    print("2. Hızlı (Sadece önemli günler gösterilir)")
    print("3. Özet (Sadece haftalık özetler)")
    print("─" * 60)
    
    secim = sayisal_giris_al("Seçiminiz (1-3): ", "int", 1, 3)
    
    return secim

def gunluk_simulasyon(mahsul_bilgi, alan_dekar, sim_hizi):
    """
    Günlük simülasyon döngüsü
    For döngüsü ve tüm kontrol yapıları burada kullanılır
    """
    hasat_gunu = mahsul_bilgi["hasat_gun"]
    toplam_verimlilik = 0.0
    gun_sayaci = 0
    hasat_yapildi = False
    haftalik_rapor = []
    
    print(f"\n{'=' * 80}")
    print(f"🌾 {mahsul_bilgi['ad'].upper()} İÇİN SİMÜLASYON BAŞLIYOR")
    print(f"{'=' * 80}\n")
    
    # Ana simülasyon döngüsü - FOR kullanımı
    for gun in range(1, hasat_gunu + 21):  # Hasat sonrası 20 gün daha
        gun_sayaci += 1
        
        # Hava durumu simülasyonu
        hava, verimlilik_etkisi = hava_durumu_simulasyon(gun)
        toplam_verimlilik += verimlilik_etkisi
        
        # Bakım işlemi kontrolü
        bakim = bakim_turu_belirle(gun)
        
        # Simülasyon hızına göre gösterim - IF-ELIF-ELSE kullanımı
        goster = False
        
        if sim_hizi == 1:  # Detaylı mod
            goster = True
        elif sim_hizi == 2:  # Hızlı mod
            if bakim or gun % 10 == 0:
                goster = True
        elif sim_hizi == 3:  # Özet mod
            if gun % 7 == 0:
                goster = True
        
        if goster:
            print(f"📅 Gün {gun:3d} | {hava:<20} | Verimlilik: {verimlilik_etkisi:.2f}")
            
            if bakim:
                print(f"         └─➤ {bakim}")
        
        # Haftalık rapor toplama
        if gun % 7 == 0:
            ort_verimlilik = toplam_verimlilik / 7
            haftalik_rapor.append({
                "hafta": gun // 7,
                "verimlilik": ort_verimlilik
            })
            
            if sim_hizi == 3:
                print(f"   📊 Hafta {gun // 7} Özeti - Ortalama Verimlilik: {ort_verimlilik:.2f}")
            
            toplam_verimlilik = 0.0
        
        # Hasat kontrolü - Boolean kullanımı
        hasat_zamani_geldi = hasat_kontrolu(mahsul_bilgi, gun)
        
        if hasat_zamani_geldi and not hasat_yapildi:
            print(f"\n{'🎉' * 40}")
            print(f"🌾 GÜN {gun}: HASAT ZAMANI GELDİ!")
            print(f"{'🎉' * 40}\n")
            
            # Verim hesaplama
            ortalama_verimlilik = sum(h["verimlilik"] for h in haftalik_rapor) / len(haftalik_rapor)
            toplam_urun = verim_hesapla(alan_dekar, mahsul_bilgi, ortalama_verimlilik)
            
            print(f"📊 HASAT RAPORU:")
            print(f"   • Mahsul: {mahsul_bilgi['ad']}")
            print(f"   • Hasat Günü: {gun}")
            print(f"   • Tarla Alanı: {alan_dekar:.2f} dekar")
            print(f"   • Ortalama Verimlilik Katsayısı: {ortalama_verimlilik:.2f}")
            print(f"   • Toplam Ürün: {toplam_urun:.2f} kg")
            print(f"   • Ton Cinsinden: {toplam_urun / 1000:.2f} ton")
            
            hasat_yapildi = True
            
            # Hasat sonrası 5 gün daha devam edip bitir
            devam_et = evet_hayir_al("\nHasat sonrası 20 günlük takibe devam edilsin mi? (E/H): ")
            
            if not devam_et:
                break
    
    print(f"\n{'=' * 80}")
    print(f"✅ {mahsul_bilgi['ad'].upper()} SİMÜLASYONU TAMAMLANDI")
    print(f"{'=' * 80}\n")
    
    return hasat_yapildi

def istatistik_goster(tamamlanan_simulasyonlar):
    """Genel istatistikleri gösterir"""
    if not tamamlanan_simulasyonlar:
        print("\n⚠️ Henüz tamamlanmış simülasyon bulunmuyor.")
        return
    
    print(f"\n{'=' * 80}")
    print("📊 GENEL İSTATİSTİKLER")
    print(f"{'=' * 80}")
    
    toplam_sim = len(tamamlanan_simulasyonlar)
    print(f"✓ Toplam Tamamlanan Simülasyon: {toplam_sim}")
    
    for idx, sim in enumerate(tamamlanan_simulasyonlar, 1):
        print(f"\n{idx}. Simülasyon:")
        print(f"   • Mahsul: {sim['mahsul']}")
        print(f"   • Alan: {sim['alan']:.2f} dekar")
        print(f"   • Durum: {'✅ Hasat Yapıldı' if sim['hasat'] else '❌ Hasat Yapılmadı'}")
    
    print(f"\n{'=' * 80}\n")

def main():
    """Ana program fonksiyonu"""
    banner_goster()
    
    # Kullanıcı bilgisi al
    print("Hoş geldiniz! Lütfen önce kendinizi tanıtın.\n")
    
    while True:
        try:
            kullanici_adi = input("Adınız: ").strip()
            
            if len(kullanici_adi) < 2:
                print("❌ HATA: Ad en az 2 karakter olmalıdır!")
                continue
            
            if not kullanici_adi.replace(" ", "").isalpha():
                print("❌ HATA: Ad sadece harflerden oluşmalıdır!")
                continue
            
            break
            
        except Exception as e:
            print(f"❌ Hata: {e}")
    
    print(f"\nMerhaba {kullanici_adi}! 👋\n")
    
    # Simülasyon geçmişi
    tamamlanan_simulasyonlar = []
    
    # Ana döngü - WHILE kullanımı
    while True:
        try:
            print("\n" + "🌾" * 40)
            print("\nYeni bir simülasyon başlatılıyor...\n")
            
            # Tarla bilgilerini al
            uzunluk, genislik, alan_m2, alan_dekar, alan_hektar = tarla_bilgileri_al()
            
            # Mahsul seç
            mahsul_bilgi = mahsul_secimi_menu()
            
            # Simülasyon hızı seç
            sim_hizi = simulasyon_hizi_sec()
            
            # Onay al
            print(f"\n📋 SİMÜLASYON ÖZETİ:")
            print(f"   • Çiftçi: {kullanici_adi}")
            print(f"   • Mahsul: {mahsul_bilgi['ad']}")
            print(f"   • Alan: {alan_dekar:.2f} dekar")
            print(f"   • Tahmini Hasat Süresi: {mahsul_bilgi['hasat_gun']} gün")
            
            basla = evet_hayir_al("\nSimülasyonu başlatmak istiyor musunuz? (E/H): ")
            
            if not basla:
                print("❌ Simülasyon iptal edildi.")
                continue
            
            # Simülasyonu çalıştır
            hasat_durumu = gunluk_simulasyon(mahsul_bilgi, alan_dekar, sim_hizi)
            
            # Simülasyon geçmişine ekle
            tamamlanan_simulasyonlar.append({
                "mahsul": mahsul_bilgi["ad"],
                "alan": alan_dekar,
                "hasat": hasat_durumu
            })
            
            # İstatistikleri göster
            istatistik_goster(tamamlanan_simulasyonlar)
            
            # Devam kontrolü
            devam = evet_hayir_al("Yeni bir simülasyon başlatmak ister misiniz? (E/H): ")
            
            if not devam:
                print(f"\n{'🌾' * 40}")
                print(f"\n👋 Hoşça kalın {kullanici_adi}!")
                print(f"Toplam {len(tamamlanan_simulasyonlar)} simülasyon tamamladınız.")
                print("\n" + "🌾" * 40 + "\n")
                break
                
        except KeyboardInterrupt:
            print("\n\n⚠️ Program kullanıcı tarafından durduruldu.")
            cikis = evet_hayir_al("Çıkmak istediğinize emin misiniz? (E/H): ")
            if cikis:
                print("Çıkılıyor...")
                sys.exit(0)
        except Exception as e:
            print(f"\n❌ Beklenmeyen bir hata oluştu: {e}")
            devam = evet_hayir_al("Programa devam etmek ister misiniz? (E/H): ")
            if not devam:
                break

if __name__ == "__main__":
    try:
        main()
    except Exception as e:
        print(f"\n❌ Kritik hata: {e}")
        print("Program sonlandırılıyor...")
        sys.exit(1)

🎯 Python Kodunun İçerdiği Yapılar

✅ Veri Tipleri:

  • int() - Tam sayı dönüşümü
  • float() - Ondalıklı sayı
  • str() - String dönüşümü
  • bool() - Boolean değerler

✅ Kontrol Yapıları:

  • if-elif-else
  • for döngüsü
  • while döngüsü
  • try-except-finally

✅ Fonksiyonlar:

  • def ile tanımlama
  • Parametreli fonksiyonlar
  • Return değerleri
  • Docstring kullanımı

✅ Input İşlemleri:

  • input() ile veri alma
  • Tip kontrolü ve validasyon
  • Hata durumunda tekrar
  • Min/max değer kontrolü