Bir cümlelik özet
Bu projede örnek antrenman verilerini bir listede toplayıp, bir döngü ve bir fonksiyonla toplam, ortalama ve en yüksek değeri hesaplayarak kısa bir spor özeti yazdırıyoruz.
Neden önemli?
Ben sporu seviyorum ve bir antrenmandan sonra “bu hafta ne kadar çalıştım?” diye merak ediyorum. Bu soruları defterde tek tek toplamak yerine bilgisayara yaptırmayı denedim. İşte veri analizinin ilk adımı budur: veri (elimizdeki sayılar) toplanır, hesaplanır ve kısa bir özet olarak sunulur.
Bu ders, önceki modüllerde öğrendiğimiz üç fikri tek bir projede birleştiriyor: liste ile veriyi saklamak, döngü ile her sayıyı sırayla işlemek, fonksiyon ile aynı hesabı tekrar tekrar kullanmak. Aynı yöntem sonra oyun puanları, harçlık ya da sıcaklık ölçümleri için de çalışır.
Küçük bir projeyi baştan sona bitirmenin ayrı bir değeri var. Tek tek komutları öğrenmek başka şeydir; onları bir araya getirip çalışan, işe yarayan bir program yazmak başka şeydir. Bu derste tam da bunu deneyeceğiz: küçük parçalarla başlayıp, her adımı test ederek, sonunda kendi verimizle çalışan bir özet aracına ulaşacağız. Bir hata çıkarsa da onu nasıl bulup düzelttiğimizi birlikte göreceğiz.
Not: Buradaki sayılar gerçek bir istatistik değil, öğretici örnek verilerdir. Sen kendi gerçek dakikalarını da yazabilirsin.
Projeyi parça parça kuralım
Programı tek seferde yazmak yerine küçük parçalara böleceğiz. Her parçayı çalıştırıp doğru olduğundan emin olduktan sonra bir sonrakine geçmek en güvenli yoldur.
1. Veriyi bir listeye koymak
Liste, birden çok değeri tek bir isim altında sıralı biçimde tutan bir yapıdır. Köşeli parantez [ ] içine, virgülle ayırarak yazarız.
# Örnek antrenman dakikaları (öğretici veri)
antrenman_dakikalari = [30, 45, 60, 40, 50, 55, 35]
print("Gün sayısı:", len(antrenman_dakikalari))
print("İlk gün:", antrenman_dakikalari[0])
Listedeki her öğenin bir sıra numarası (indeks) vardır ve sayma 0’dan başlar. Bu yüzden antrenman_dakikalari[0] ilk günü verir. len(...) ise listedeki öğe sayısını söyler; burada 7.
2. Toplamı ve ortalamayı hesaplamak
Şimdi listedeki her sayıyı sırayla gezip bir toplama ekleyeceğiz. Bunun için döngü kullanırız.
antrenman_dakikalari = [30, 45, 60, 40, 50, 55, 35]
toplam = 0
for dakika in antrenman_dakikalari:
toplam = toplam + dakika
ortalama = toplam / len(antrenman_dakikalari)
print("Toplam dakika:", toplam)
print("Ortalama dakika:", round(ortalama, 1))
Burada for dakika in antrenman_dakikalari: satırı listeyi baştan sona dolaşır; dakika her turda bir sonraki değeri alır. Döngünün içindeki satırın 4 boşluk içeride (girintili) olması çok önemlidir: Python, bir bloğun nerede başlayıp bittiğini bu girintiden anlar. Girinti yanlışsa program çalışmaz.
ortalama için toplamı gün sayısına böleriz. round(ortalama, 1) sonucu bir ondalık basamağa yuvarlar. Çıktı: toplam 315, ortalama 45.0.
3. En yüksek değeri bulmak
En uzun antrenmanı bulmak için bir “şu ana kadarki en yüksek” değişkeni tutarız ve her sayıyı onunla karşılaştırırız.
antrenman_dakikalari = [30, 45, 60, 40, 50, 55, 35]
en_yuksek = antrenman_dakikalari[0]
for dakika in antrenman_dakikalari:
if dakika > en_yuksek:
en_yuksek = dakika
print("En uzun antrenman:", en_yuksek)
Başlangıçta en_yukseki listenin ilk değerine eşitledik. Döngü, daha büyük bir sayı bulursa en_yukseki günceller. Böylece liste bitene kadar elimizde hep “o ana dek görülen en büyük değer” kalır. Çıktı: 60.
if dakika > en_yuksek: satırı bir koşuldur: yalnız içindeki karşılaştırma doğru olduğunda alt satır çalışır. Koşulun içindeki satırın iki kat girintili olduğuna dikkat et; önce for bloğu, onun içinde de if bloğu var.
Kodu bir fonksiyonda toplamak
Aynı hesabı farklı listeler için tekrar tekrar kullanmak istersek, kodu bir fonksiyon içine koyarız. Fonksiyon, bir isim verdiğimiz ve istediğimizde çağırdığımız hazır bir işlem paketidir.
Tam kod
# Örnek antrenman verisi (gerçek istatistik değil, öğretici)
antrenman_dakikalari = [30, 45, 60, 40, 50, 55, 35]
def istatistik_ozeti(veri):
toplam = 0
for dakika in veri:
toplam = toplam + dakika
ortalama = toplam / len(veri)
en_yuksek = veri[0]
for dakika in veri:
if dakika > en_yuksek:
en_yuksek = dakika
return toplam, ortalama, en_yuksek
toplam, ortalama, en_yuksek = istatistik_ozeti(antrenman_dakikalari)
print("Gün sayısı:", len(antrenman_dakikalari))
print("Toplam dakika:", toplam)
print("Ortalama dakika:", round(ortalama, 1))
print("En uzun antrenman:", en_yuksek)
def istatistik_ozeti(veri): satırı fonksiyonu tanımlar. veri, fonksiyona verdiğimiz listenin fonksiyon içindeki adıdır. return ile üç sonucu birden geri gönderiyoruz ve dışarıda üç değişkende karşılıyoruz.
Test edelim
Kodu bir dosyaya kaydedip terminalde python3 dosya.py ile çalıştırdığımızda şunu görürüz:
Gün sayısı: 7
Toplam dakika: 315
Ortalama dakika: 45.0
En uzun antrenman: 60
Sonucu elle kontrol edelim: 30+45+60+40+50+55+35 = 315, 315 / 7 = 45, en büyük sayı 60. Program doğru çalışıyor.
Mini uygulama
Kendi verinle dene:
antrenman_dakikalarilistesindeki sayıları kendi bu haftanki değerlerinle değiştir.- Listeye bir gün daha ekle, örneğin sonuna
70yaz. Gün sayısının 8 olduğunu doğrula. - Programı çalıştır ve yeni toplam, ortalama ve en yüksek değerin doğru olup olmadığını elle kontrol et.
- Geliştirme: En kısa antrenmanı da bul.
if dakika > en_yuksekyerineif dakika < en_dusukmantığını kullanan yeni bir bölüm yaz.
Geliştirme için ipucu:
en_dusuk = antrenman_dakikalari[0]
for dakika in antrenman_dakikalari:
if dakika < en_dusuk:
en_dusuk = dakika
print("En kısa antrenman:", en_dusuk)
Daha ileri bir adım olarak, ortalamanın üstünde kaç gün çalıştığını sayabilirsin:
ustunde = 0
for dakika in antrenman_dakikalari:
if dakika > ortalama:
ustunde = ustunde + 1
print("Ortalamanın üstünde gün:", ustunde)
Projeyi güçlendirme planı
Proje: Basit Spor İstatistikleri için yalnız çalışan bir gösterim hazırlamak yeterli değildir. İyi bir proje; hedefi, kullanıcıyı, sınırları, test koşullarını ve başarısız denemeleri de görünür kılar. Bu genişletme çalışmasında bir dosyadaki satırları okuyup basit özet çıkaran araç bağlamını kullanarak çalışan kısa bir Python 3 programı, örnek girdiler ve beklenen çıktılar oluştur. Dersin hedefi “Örnek antrenman verileriyle toplam, ortalama ve en yüksek değeri hesaplayıp özet yazan bir program yaz” olsa da proje sayfasında ölçülmemiş bir sonucu kesin başarı gibi yazma.
1. Proje özeti ve kapsam
Önce üç cümle yaz: Çözmek istediğin sorun nedir, bu sorun kimin için önemlidir ve ilk sürüm özellikle neyi yapmayacaktır? Kapsam dışını belirtmek projeyi küçültmez; tamamlanabilir hâle getirir. Projeyi parça parça kuralım ile 2. Toplamı ve ortalamayı hesaplamak arasındaki ilişkiyi projenin temel varsayımı olarak yaz ve bu varsayımı hangi testin doğrulayacağını belirt.
2. Kabul ölçütleri
- Kod Python 3 sözdizimiyle çalışıyor mu?
- Değişken ve fonksiyon adları amacı açıklıyor mu?
- Boş, yanlış türde ve sınırdaki girdiler denendi mi?
- Hata mesajı kullanıcıya neyi düzeltmesi gerektiğini söylüyor mu?
- Aynı kod gereksiz tekrar olmadan yeniden kullanılabiliyor mu?
“Proje: Basit Spor İstatistikleri” için kabul ölçütlerini “çalışıyor” gibi belirsiz sözcüklerle bırakma. Süre, mesafe, doğru deneme sayısı, ekran genişliği veya kullanıcı adımı gibi gözlenebilir bir ölçü seç. Ölçüm mümkün değilse en azından üç ardışık denemede aynı davranışın görülüp görülmediğini kaydet.
3. Test matrisi
| Test | Koşul | Beklenen | Gerçek sonuç | Sonraki karar |
|---|---|---|---|---|
| Normal | Standart giriş ve tam bağlantı | Temel görev tamamlanır | Test sırasında doldur | Koru veya küçük iyileştirme yap |
| Sınır | En düşük ya da en yüksek kabul edilen değer | Sistem kararlı kalır | Test sırasında doldur | Eşiği veya kuralı gözden geçir |
| Hata | Eksik, yanlış ya da beklenmeyen giriş | Güvenli ve anlaşılır tepki | Test sırasında doldur | Hata yönetimi ekle |
| Tekrar | Aynı koşulda en az üç deneme | Benzer sonuçlar | Test sırasında doldur | Tutarsızlığın kaynağını araştır |
4. Sürüm günlüğü
“Proje: Basit Spor İstatistikleri” projesinin her sürümü için tarih, değiştirdiğin tek ana karar, değişikliğin nedeni ve test sonucu yaz. İlk sürümün çalışmaması başarısızlık değildir; Projeyi parça parça kuralım veya 2. Toplamı ve ortalamayı hesaplamak ile ilgili hangi varsayımın yeniden düşünülmesi gerektiğini gösteren veridir. Görsel kullanırken kişisel bilgi ve özel arka plan ayrıntılarını paylaşma.
5. Sunum ve öz değerlendirme
“Proje: Basit Spor İstatistikleri” projesini iki dakikada anlatacak şekilde hazırlan: sorun, çözüm yaklaşımı, bir dosyadaki satırları okuyup basit özet çıkaran araç için en önemli test sonucu ve bir sonraki adım. “Tamamlandı” demek yerine hangi kısmın doğrulandığını ve hangi kısmın hâlâ geliştirilmesi gerektiğini açıkla.
Sık yapılan hatalar
Toplamı döngünün içinde sıfırlamak
toplam = 0 satırını yanlışlıkla döngünün içine koyarsan, her turda toplam sıfırlanır ve sonuç yanlış çıkar.
# Yanlış
for dakika in antrenman_dakikalari:
toplam = 0
toplam = toplam + dakika
Düzeltme: toplam = 0 satırı döngüden önce, girintisiz olmalı.
Girinti hatası
Döngünün içindeki satırları girintilemezsen Python IndentationError verir. Her blok satırı 4 boşluk içeride olmalı.
en_yukseki sıfırdan başlatmak
en_yuksek = 0 yazmak bu örnekte çalışır, ama tüm sayılar negatif olsaydı (örneğin sıcaklık ölçümleri) hep yanlış 0 sonucunu verirdi. Listenin ilk öğesinden başlamak daha güvenlidir.
Boş liste
Liste boşsa toplam / len(veri) işlemi sıfıra bölme hatası verir. Gerçek projede önce listede en az bir öğe olduğunu kontrol etmek gerekir.
Güvenlik notu
Bu ders tamamen kendi bilgisayarında, kendi yazdığın kodu çalıştırmakla ilgilidir. İnternetten bulduğun ve ne yaptığını anlamadığın kodları çalıştırma. Verilerini yazarken gerçek adres, telefon ya da okul gibi kişisel bilgileri koda ekleme; örnek sayılar yeterlidir.
Adil karşılaştırma kuralı
İki antrenmanı karşılaştırmadan önce ölçüm tanımı, birim, süre ve koşulların aynı olup olmadığı kontrol edilir. Eksik veya farklı yöntemle toplanan bir veri sessizce ortalamaya katılmaz; açıklama alanında işaretlenir. Böylece grafik düzenli görünse bile gerçekte karşılaştırılamayan ölçümlerin yanlış bir başarı hikâyesi oluşturması engellenir.
Ders özeti
- Liste, birçok sayıyı tek bir isim altında sıralı biçimde tutar ve sayma 0’dan başlar.
- Döngü, listedeki her öğeyi sırayla gezerek toplam gibi değerleri biriktirmemizi sağlar.
- Ortalama, toplamın öğe sayısına (
len) bölünmesiyle bulunur. - En yüksek değeri, bir karşılaştırma değişkenini döngü içinde güncelleyerek buluruz.
- Fonksiyon, aynı hesabı farklı listelerde tekrar kullanmamızı sağlar ve
returnile sonuç döndürür.
Kontrol soruları
antrenman_dakikalari[0]hangi günün değerini verir ve neden?toplam = 0satırı neden döngüden önce yazılmalı?- Ortalamayı hesaplamak için hangi iki değeri birbirine böleriz?
en_yuksek = veri[0]yerineen_yuksek = 0yazmak hangi durumda yanlış sonuç verir?defanahtar kelimesi ne işe yarar?
Cevaplar
- İlk günün değerini verir; çünkü listede sayma 0’dan başlar, yani ilk öğenin indeksi 0’dır.
- Toplamı döngüden önce sıfırlarız; döngü içine koyarsak her turda sıfırlanır ve yalnız son değeri elde ederiz.
- Toplamı, listedeki öğe sayısına (
len(veri)) böleriz. - Tüm değerler negatifse (örneğin negatif sıcaklıklar)
0gerçekte listede olmadığı hâlde en yüksek gibi görünür ve sonuç yanlış olur. def, yeni bir fonksiyon tanımlar; yani bir isim verdiğimiz ve istediğimizde çağırdığımız hazır bir işlem paketi oluşturur.
Kaynak ve doğrulama notu
“Proje: Basit Spor İstatistikleri” dersi için doğrulama odağı Projeyi parça parça kuralım ile 2. Toplamı ve ortalamayı hesaplamak arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Kod örnekleri Python 3 sözdizimi esas alınarak hazırlanmıştır. Çalıştırma ortamına göre küçük farklar görülebileceği için örnekler önce güvenli bir çevrim içi editörde veya yerel geliştirme ortamında denenmelidir.
Sonraki ders
Web Temelleri modülü: Python’la kazandığın programlama mantığını, web sayfalarının nasıl kurulduğunu öğrenerek yeni bir alana taşıyoruz.