Python Ders Notları

Problem Çözme Süreçleri

Gündelik akışta karşılaştığımız hemen her olaya problem tanımlamasıyla bakabiliriz. Sabah uyanmak, hazırlanmak gibi pek çok mesele kendi içinde bir akışa dayalıdır. Hava durumuna göre giyinme, günün yoğunluğuna göre kahvaltı yapma gibi olaylar alt olaylara ayrılarak değerlendirilebilir.

Basit bir örnekle açıklayalım: Sabah okul ya da iş için giyeceğiniz kıyafet kirliyse onu hemen yıkayıp kurutmaya çalışmak süre açısından makul değildir. Ne yaparsınız? Daha önceden kirli olan giysiye yıkar, kurutur ve sabah için hazır tutarsınız. Bu olayı farklılaştıran akış senaryoları da konuşulabilir. Bu basit örnekteki sıralama, çözüm, geri bildirim ve geliştirme adımlarını hayatımızdaki hemen her olayda görmek mümkündür.

Bu nedenle olaylara ve problemlere problem çözme süreci üzerinden yaklaşırız.

Problem Çözme Süreci

1. Problemi tanımlama
2. Problemi alt problemlere ayırma
3. Problem durumu için bilgi araştırması yapma
4. Çözüm önerileri üretme
5. Çözümleri test etme
6. Geri bildirim toplama
7. Geliştirme

Bu yedi adım, sağlıklı bir problem çözme sürecini bilimsel yöntemlerle ele alabilme yollarından biridir. Basitten karmaşığa pek çok problemde uygulanabilen, en az maliyetli yaklaşımlardan biridir.

Örnek Uygulama

Türkiye genelinde okul mevcutlarının kalabalık olması güncel bir problem olsun. Bu büyük problemi ele alırken adımları tek bir okulda pilot uygulama olarak test edebiliriz.

1. Problemi tanımlama: Okul mevcudunun bina kapasitesine göre kalabalık olması; sınıf mevcutlarının yönetilebilir düzeyin üzerinde seyretmesi.

2. Alt problemler: Okul bölgesinin geniş olması, bina kapasitesinin yetersizliği, diğer okullardan öğrenci çekilmesi, komşu okulların sorunları nedeniyle bu okula yönelim, donanımsal yeterliliğin fazla olması gibi etkenler alt problem olarak ele alınabilir. Alt problemlere bakılmadan doğrudan mevcudu normale getirmeye çalışmak yanlış ya da verimsiz çözümlere yol açabilir; okul bölgesi çok genişken yalnızca ek bina yapmaya çalışmak bunun tipik örneğidir.

3. Bilgi araştırması: Dünya standartlarında sınıf mevcutları ne düzeydedir? Okullar arası mevcut dengesi nasıl sağlanmaktadır? Bu soruların yanıtları bilimsel kaynaklardan araştırılmalıdır.

4. Çözüm önerileri: Okul bölgesinin nüfus yoğunluğuna göre yeniden planlanması; diğer okulların eksikliklerinin ortaya konarak giderilmesi; adres bölgesi dışından gelen öğrencilerin nedenlerinin araştırılması.

5. Çözümleri test etme: Önerilen çözümlerden biri önce tek bir sınıf ya da şubede pilot olarak uygulanır; sonuçlar gözlemlenir.

6. Geri bildirim toplama: Pilot uygulamanın mevcut duruma etki edip etmediği izlenir; öğretmen, öğrenci ve yönetici görüşleri derlenir.

7. Geliştirme: Pilot uygulama işe yaradıysa diğer sınıf ve okullara yaygınlaştırılır; beklenen sonuç elde edilmediyse yeni alt problemler araştırılır ve süreç yeniden başlatılır.

Küçük ölçekli bir deney, gözlem ve genelleme döngüsü; bu yaklaşım aynı zamanda bilimsel yöntemin özüdür. Bir problemin çözümüne katkı sunmak için büyük bir kurum ya da geniş bir bütçe gerekmez; doğru adımlarla herkes bu süreci işletebilir.


PYTHON VE ALGORİTMA

Problemlerin çözüm süreçlerinde veri toplama, işleme uygulama ve izleme süreçlerinde bilgisayar yazılımları büyük rol üstlenir. Yazılımlar çok kaynaklı verileri toplayıp tutabilir, işleyebilir karar sürecine yardımcı olabilirler.Yazılımlar kodlanırken algoritmik bir süreçle adım adım her şey düşünülerek yazılır.

Problem çözümünde yazılım teknolojilerini kullanmak

Yazılımlar bilgisayarlarda ide adı verilen araçlarla yazılır. Python için

Thonny, Jupyter Notebook, VS Code Python idle kullanılabilir.

Örnek Problemler:

Sınıf Yoğunluğunu belirleyen program

#önce veriler

sinif_alani=42

ogrenci_alani=1.5

ogrenci_sayisi=32

ogrenci_sira=1.2

ogrenci_taburesi=0.9

ogretmen_masasi=1.7

ogretmen_sandalyesi=0.7

# işlemler

sira_alani=(ogrenci_sira+ogrenci_taburesi)*ogrenci_sayisi/2

toplam_alan=ogrenci_alani*ogrenci_sayisi+sira_alani+ogretmen_masasi+ogretmen_sandalyesi

kapasite=sinif_alani/toplam_alan

#karar

#eğer kapasite 1 den büyükse sınıf rahattır

if kapasite>1:

    print("Sınıf Rahattır")

else:

    print("Sınıf kalabalık")


Açıklama:

Yazılımlar problem çözümünde önce veriye ihtiyaç duyarlar. Veriler işlenir işlendikten sonra karar mekanizmaları aracılığıyla gerekli işlemlerde kullanılırlar. Verinin çokluğu alınan kararlardaki doğruluğu arttıran etmenlerden biridir. Veri sağlama teknolojileri geliştikçe yazılımlar daha çok problemi çözebilir hale gelmiştir. 


DERS 2





Algoritma:

Bir problemi çözmek veya bir hedefe ulaşmak için tasarlanan, başlangıçtan bitişe kadar sıralı, mantıksal ve sonlu işlemler bütünüdür.

Algoritmanın Temel Özellikleri

Başlangıç ve Bitiş: Her algoritmanın bir başlangıcı vardır ve işlemler sonlu bir sürede tamamlanır.

Açık ve Kesinlik: Her adım net, anlaşılır ve şüpheye yer bırakmayacak şekilde tanımlanmalıdır.

Girdi ve Çıktı: İşlenmek üzere veri alır (girdi) ve bir sonuç üretir (çıktı).

Etkinlik: En kısa ve en hızlı yoldan çözüme ulaşmayı hedefler.

Veri Sağlayıcılar/Değişkenler

Yazılımlarda veri tutabildiğimiz, işlem yapabildiğimiz yapılardır.

Yalnızca İngilizce isimlendirilirler,

Boşluk içermemeliler,

Sayı ile başlamamalılar,

Birbirinin aynısı olmamalılar

Ondalıklı sayılarda nokta kullanılmalı

Metinsel değişkenler ""  çift tırnak ile tanımlanmalı

 

sayi1=10                                         1sayı,Çarpım, Ad Soyad

sayi2=15

pi=3.14

ad="İbrahim"

soyad="Keskin"

toplam=sayi1+sayi2

carpim=sayi1+sayi2

fark=sayi1-sayi2

bolum=

Örnek:

Ø  Kenar ölçüsünü değişkene atayıp Karenin alanı hesaplayınız.

kenar=25
alan=kenar*kenar
print(kenar)

x=15

y=23

r=5

pi=3.14

h=15


#işlemler

toplam=x+y

fark=x-y

carpim=x*y

bolum=x/y

alan=pi*r*r

hacim=alan*h


# ekrana yazdır

print("Sayıların Toplamı", toplam)

print("Çarpımı",carpim)

print("bölümü",bolum)

print("Farkı",fark)

print("Silindirin Alanı",alan)

print("Silindirin Hacmi",hacim)


DERS 3

Değişken Türleri:

int(Tam sayı tipinde değişkenler): negatif ve pozitif tam sayıları atayarak işlem yapabildiğimiz veri türüdür.
Örneğin
yas=12
ogrenci_sayisi=25
rastgele_sayi=5


float(ondalıklı sayı türü): Noktayla ayrılmış sayıları işleyebildiğimiz veri türüdür.
pi=3.14
yuzde=5.26

str(metin türünde veriler): Metin ve kelime türünde işlem yapabildiğimiz değişken(veri) tipidir. Çift tırnak kullanarak atama yapılır.
ad="İbrahim"
sehir="Ankara"

Klavyeden Veri Girişi(input system):

Klavyeden veri girişinin kontrol edildiği yöntemdir. Klavyeden girilen tüm veriler str(metin) türündedir. Eğer klavyeden girilen veri sayısal bir ifade olacaksa int veya float tipine dönüştürülmelidir.
Örnek:
ad=input("Adınızı Yazınız :")
soyad=input("Soyadınız Yazınız :")
yas=int(input("Yaşınızı Giriniz :"))
yuzde=float(input("Yüzde miktarını giriniz :"))

Örnek Uygulama: 
Klavyeden ad ve yaş girilirek ehliyet almaya uygunluk durumuna karar veren uygulama.

ad=input("Adınızı Yazınız :")
yas=int(input("Yaşınızı Giriniz :"))
if yas>=18:
    print(ad," Yaşınız Ehliyet için Uygundur.")
else:
    print("Üzgünüm yaşınız ehllyet başvurusu için Uygun DEĞİLDİR.")




Ders 4


Karar Yapıları:


Veriye dayalı karşılaştırma sonuçları Karar yapıları ile belirlenir. Hava yağmurluyken şemsiye almaya karar vermek gibi yazılımın bir veriye göre davranması karar yapısıyla belli olur. 

Örneğin: Havadurumu=="Yağmurlu" ise şemsiye al ifadesi bir karar biçimidir.
havadurumu karar  sonucuna etki eden veridir.
== (eşieşit) durumun bir niceliğe eşit olmasını sorgular.
Karar yapılarında 
==,             >                ,<,                  >= ve <= 
eşit mi, büyük mü, küçük mü, büyük veya eşit mi, küçük veya eşit gibi mantıksal sorgular yapılır. 

Kod örneği:  Bir sayının Negatif veya  Pozitif olması durumunun karar yapı örneği.

sayi=int(input("Klavyeden sayı giriniz :"))
if sayi>0:
    print("Pozitif tam sayıdır.")
else:
    print("Sayı Negatiftir.")


Ders 5

Karar Yapıları Örnek Kodları 

Not: Kodları kopyalama hız kazandırır ancak hiç bir öğrenme ya da pratiklik sağlamaz. Kodlama öğrenilirken Kodlar önce kağıda sonra uygulamaya yazılması hem mantıksal hem de kalıcı izli öğrenmeye yardımcı olur.
1- Hava sıcaklığına göre kıyafet  öneri uygulaması

2. Oyun kalan can uygulaması


3-  Market harcama uygulaması


4- Şarj durumuna göre davranış uygulaması


5 - 200ml su bardağı ile içilen bardak su adedine göre davranış uygulaması




DERS 6

Random Komutu:
Random belirlenen aralıklarda rastgele sayı üretmeye yarayan bir fonksiyondur. 
Fonksiyon: Önceden belirlenmiş işlemleri yerine getiren komutlardır. 

import random
sicaklik=random.randint(-10,40)

sehir=input("Şehir giriniz:")
print(sehir," ",sicaklik,"derece")

Örnek Uygulama:





Ders 7

Listeler 

Yazılımlarda farklı veri türlerini tutabilmek için kullanılan yazılım temel unsurlarındandır.

Python’da köşeli, parentezle başlatılır. Örneğin:

İsimler=[“Ali”,”Ahmet”,”Mert”] şeklinde bir liste oluşturulabilir.

Listelerde farklı veri türleri de bir arada yer alabilir

marketListesi=[“Ekmek”, “Yumurta”,125,358,3,15] gibi.

Listeyi ekrana yazdırma komutu:

adlar=[“Ali”, “Ahmet”, “Mert”] à Liste oluşturuldu.

print(adlar) à Liste olduğu gibi ekrana yazdırıldı.

Not: Liste elemanları arasında virgül konulur, metinsel ifadeler çift tırnak ile sayısal ifadeler olduğu gibi virgül ile yazılır.


Ders 8

Listeye Nesne Ekleme ve Silme Yöntemleri

Nesne Ekleme: 

Append komutu

İsimler=[“Ali”,”Ahmet”,”Mert”] şeklinde bir liste oluşturulan listeye 

isimler.append("Aslı") diyerek en sonuna Aslı nesnesini ekleyebiliriz.

İnsert Komutu:
İndex numarasını belirterek nesne ekleme:
isimler.insert(1,"Elif") bu komutla belirtilen index numarasına belirtilen nesne eklenir.

Nesne Silme :

pop komutu:

adlar=["Ali","Veli","Cem","Aslı","Nur"]

adlar.pop(2)  index numarası 2 olan nesne "Cem" silinir ve listeden kaldırılır ayrıca bir değişkene silinen değer atanabilir. 

remove komutu:

adlar.remove("Nur") bu komut liste sırasında ilk karşılaştığı "Nur" nesnesini silererek listeden kaldırır.

clear komutu:

adlar.clear() komutu tüm nesneleri silerek listeyi  temizler.

Örnek Uygulama:





Döngüler:

Yazılımlarda bir olay birden fazla kez tekrarlanması gerekiyorsa satır satır yazmak yerine aynı iş döngü yardımıyla yapılır. 

Örneğin klavyeden 100 kişinin adı soyadı girilerek kaydedilmesi gereken bir uygulamada döngü kullanırız. Kırmızı Sarı Yeşil ışık kontrolünde yine döngü kullanabiliriz.

 Döngü komutları For ve While olmak üzere iki çeşittir. Çalışma şekli aynı olmakla birlikte prensip olarak farkları vardır. Biz sadece For döngüsünü göreceğiz.

For Döngüsü:


for sayac in range(10), --- 0'dan 9'a kadar sayıları üretir

for sayac in range(2,10), --- 2'den 9'a kadar sayıları üretir

for sayac in range(5,100,3) --- 5'ten  99'a kadar 3'er  sayarak sayılar üretir.

Sayısal akışlarda yukarıdaki gibi kullanılabilir. 


Metinsel işlemlerde ise aşağıdaki yöntemle döngü kurulabilir 

for harf in ("Kelime")


Örnekler:

1-Ekrana 10 kez "Merhaba" yazan uygulama


for i in range(0,10):

  print("Merhaba")


2-Ekrana 5'den 100'e kadar 3'er atlayarak sayıları
yazdıran uyg.


for i in range(5,100,3):

  print(i)


3-Cümleyi harflerine ayıran uygulama

kelime="Ey Türk! Üstte mavi gök çökmedikçe, altta yağız yer
        delinmedikçe,senin ilini ve töreni kim bozabilir?"
for harf in kelime:
  print(harf)


4-Klavyeden hayır girilene kadar eklenen ürünleri
  listeye kaydeden uygulama



5- Sensörlerden veri alma simülasyonuna

dayanan bir kayıt örneği






Son Uygulama
İnternetten veri çekme ve karar yapısı Uygulaması 






Arduino ve Python İkilisi Üzerinden 

Gerçek Bir Proje İnşaa Etmek:

Arduino ide kodları:

#include <dht.h>
dht DHT;
#define DHT11_PIN 2 // Sensörün bağlı olduğu dijital pin

void setup() {
  Serial.begin(9600); // Bilgisayarla iletişim hızını 9600 olarak başlattık
}

void loop() {
  int chk = DHT.read11(DHT11_PIN);
  int sicaklik = DHT.temperature; // Sıcaklık değerini alıyoruz
 
  Serial.println(sicaklik); // Değeri bilgisayara gönderiyoruz
  delay(1000); // 1 saniyede bir yeni veri gönder (0.1 sn dht11 için çok hızlıdır, 1 sn en sağlıklısıdır)

Python Kodları:

import serial    # Arduino'dan gelen USB verilerini okumak için
import time      
import datetime  

# ARDUINO BAĞLANTISI: 'COM3' yazan yeri Arduino'nuzun bağlı olduğu portla değiştirin!
# Arduino IDE'nin sağ alt köşesinde hangi COM portu olduğu yazar (Örn: COM3, COM4, COM5)
arduino = serial.Serial('COM3', 9600, timeout=1)
time.sleep(2) # Bağlantının oturması için 2 saniye bekliyoruz

sureKayit = []
veriKayit = []

print("--- ARDUINO AKILLI SERA SİSTEMİ BAŞLADI ---")
print("Gerçek sensör verileri okunuyor...\n")

# 1. BÖLÜM: Arduino'dan Gerçek Verileri Alıp Listeye Kaydetme
for i in range(0, 10): # Test için ilk aşamada 10 veri alalım
  zaman = datetime.datetime.now().replace(microsecond=0)
  sureKayit.append(zaman)  
 
  # Arduino'dan gelen satırı okuyoruz, metne çeviriyoruz ve boşlukları temizliyoruz
  gelen_veri = arduino.readline().decode('utf-8').strip()
 
  # Eğer boş veri gelmediyse sayıya çevirip listeye ekliyoruz
  if gelen_veri.isdigit():
    veri = int(gelen_veri)
  else:
    veri = 0 # Veri okunamazsa hata vermemesi için 0 kabul ediyoruz
   
  veriKayit.append(veri)  
  print("Veri Alındı -> Sıcaklık:", veri, "°C")
  time.sleep(1) # Arduino 1 saniyede bir gönderdiği için Python'ı da 1 saniye bekletiyoruz

print("\nVeriler başarıyla kaydedildi. Durum Raporu Çıkarılıyor...\n")

# 2. BÖLÜM: Durum Kontrolü ve Raporlama (Mevcut mantığınız)
for i in range(len(veriKayit)):
  # DHT11 oda sıcaklığı ölçeceği için tehlike sınırını 6. sınıfların derste
  # test edebilmesi adına (örneğin sensöre üflediklerinde) 30 derece yapabiliriz.
  if veriKayit[i] > 30:
    print("Sıra No:", i, " | Zaman:", sureKayit[i], " | Veri:", veriKayit[i], "°C -> DIKKAT: SERA COK SICAK!")
  else:
    print("Sıra No:", i, " | Zaman:", sureKayit[i], " | Veri:", veriKayit[i], "°C -> Durum: Normal")

# İletişimi kapatıyoruz
arduino.close()


Yorumlar

Bu blogdaki popüler yayınlar