Python İle Programlamanın Temelleri-7
Fonksiyon Yazma
1. Fonksiyon Kavramı
Program yazarken kod satırları uzayabilir ve yazılan program karmaşık bir hâl alabilir. Bu durumu ortadan kaldırmak için problemi alt problemler hâlinde ele almak ve fonksiyon yazmak gerekir. Böylesine bir çözüm yolu birçok yarar sağlar:
Programın yönetimi kolaylaşır.
Daha doğru çözüm üretilebilir.
Daha kolay hata ayıklama yapılabilir.
Kod satırlarını değiştirmek/genişletmek kolaylaşır.
Python programlama dilinde bir fonksiyon için iki durum söz konusudur:
Fonksiyon tanımlama: Fonksiyonun nasıl davranacağını tanımlayan kod satırları.
Fonksiyon çağırma: Program içinde fonksiyonun çağrılması ile kod satırlarının çalışması. Her fonksiyonun bir kez tanımlanması ancak farklı şekillerde çağrılması söz konusudur.
1.1. Fonksiyon Tanımlama
Fonksiyon tanımlamak için dikkat edilmesi gereken dört durum vardır:
def: Bu ayrılmış sözcük ile fonksiyon tanımlama başlar.
İsim: Fonksiyon için bir isim verilmelidir. Aynı değişken tanımlamada olduğu gibi.
Parametre: Fonksiyon içinde kullanılan değerleri ifade eder.
Gövde: Fonksiyon için gerekli olan kod blokundan oluşur.
1.2. Fonksiyon Yazma
Aşağıdaki örnekte def kelimesi fonksiyon tanımlama için kullanılmıştır. Fonksiyon ismi double olarak belirlenmiştir. Kullanıcıdan n ile bir değer istenmiştir. Fonksiyona ait kod bloku bir satırdan oluşmakta olup bu, girinti ile ötelenmiştir.
def double(n):
return 2 * n x = double(3) print(x)
1.3. Fonksiyon Çağırma
Aşağıdaki örnekte fonksiyon, 5 değeri ile a değişkeni içerisine çağrılmıştır. return komutu ile gelen değer, print() komutu ile yazdırılmıştır.
# karenin alanını hesaplayan program
def Alan(a)
return a*a hesapla=Alan(5)
print(hesapla)
Fonksiyon şu şekilde çalışır
Program alan alt programına 5 değerini göndererek dallanma yapar. Alan alt programından hesapla değişkenine return komutu ile gelen değer aktarılır ve bu değer print komutu ile ekrana yazdırılır.
2. Fonksiyon Kullanımı Örnekleri
Örnek
def say():
for i in range(1, 11):
print(i, end=” “)
print()
print(“10″a kadar sayılıyor. . .”)
say()
print(“Tekrar 10″a kadar sayılıyor. . .”)
say()
Ekran Çıktısı
10″a kadar sayılıyor. . .
1 2 3 4 5 6 7 8 9 10
Tekrar 10″a kadar sayılıyor. . .
1 2 3 4 5 6 7 8 9 10
3. Değer Gönderme ile İlgili Olası Sorunlar
say_n(): Fonksiyon çağrıldığında eksik parametre hatası verir.
say_n(3, 5): Fonksiyon çağrıldığında fazla parametre hatası verir.
say_n(3.2): Tam sayı olmadığı için çalışma zamanı hatası verir.
4. Çoklu Değer Gönderme Örnekleri
4.1. Grafik Ortamda Beşgen Çizimi
# turtle modülünü kullanarak beşgen çizimi
import turtle import random
# turtle modülü programa ekleniyor
def polygon(sides,length,x,y,color):
#polygon adında ve içerisine 5 değer alabilen bir fonksiyon tanımlanıyor
turtle.penup()
# Çizimi yapacak kalemin yönleri belirleniyor
turtle.setposition(x,y)
# Parametre olarak gelen x,y değerleri başlangıç noktası olarak belirleniyor
turtle.pendown()
# Çizimi yapacak kalemin yönleri belirleniyor
turtle.color(color)
# Parametre olarak gelen renk atanıyor
turtle.begin _ fill()
for i in range(sides): turtle.forward(length) turtle.left(360//sides) turtle.end _ fill()
polygon(5,100,50,50,”blue”) # Tanımlanan fonksiyonun istenilen parametrelerle çağırılması
Ekran Çıktısı
Poligon fonksiyonu, 4 parametre alıyor: kenar sayısı, her kenarın uzunluğu, x ve y ise poligonun koordinatları ve poligonun rengi.
4.2. En Büyük Ortak Çarpan Fonksiyonu
# Girilen 2 sayıdan en büyük ortak bölen program
sayi1=int(input(“Lütfen ilk sayıyı giriniz: “)) sayi2=int(input(“Lütfen ikinci sayıyı giriniz: “)) def gcd(s1,s2):
min=s1 if s1<s2 else s2 ebop=1
for i in range(1,min+1):
if s1%i==0 and s2%i==0:
ebop=i # En büyük ortak bölen aktarılıyor
return ebop
Ekran Çıktısı
Lütfen ilk sayıyı giriniz: 24
Lütfen ikinci sayıyı giriniz: 18
En büyük ortak çarpan : 6
5. Yerel Değişken
Yerel değişkenler fonksiyonların içinde tanımlanıp sonlandırılan değişken türüdür. Fonksiyon içerisine girildiğinde tanımlanıp hafızada yer ayırırlar ve fonksiyondan çıkıldığında hafızadan silinirler.
x=2
print(“1. x =”,x)
def fun1():
x=10
print(“2. x =”,x)
print(“3. x =”,x)
def fun2():
x=20
print(“4. x =”,x) print(“5. x =”,x) fun1()
fun2()
print(“6. x =”,x)
Ekran Çıktısı
1.x=2
3.x=2
5.x=2
2.x=10
4.x=20
6.x=2
6. Fonksiyon Yazarken Fonksiyon Sıralamasını Belirleme
Bir programın içerisinde fonksiyon tanımı, kullanımından önce ifade edilmelidir. Aksi takdirde program hata verecektir. Python yorumlayıcısı, bir kod blokunu satır satır çalıştırır. Fonksiyonu çalıştırmadan önce yukarıda tanımına rastlamaz ise program çalışmayacaktır.
6.1. Girilen İki Değerin En Büyük Ortak Böleni
def gcd(sayi1,sayi2):
min=sayi1 if sayi1<sayi2 else sayi2 ebop=1
for i in range(1,min+1):
if sayi1 % i== 0 and sayi2 % i== 0:
ebop=i # En büyük ortak bölen aktarılıyor
return ebop def SayiGir():
return int(input(“Lütfen bir sayı giriniz : “))
def main(): s1=SayiGir() s2=SayiGir()
print(“gcd(“,s1, “,”,s2, “) = “,gcd(s1,s2),sep=””)
main()
Ekran Çıktısı
Lütfen bir sayı giriniz: 36
Lütfen bir sayı giriniz: 24
gcd (56,32) = 12
Kodlarda main() fonksiyonunda EBOB’u bulunacak iki sayı kullanıcıdan istenmiş ve bu iki sayı gcd() fonksiyonuna gönderilmiştir. gcd() fonksiyonu içerisinde küçük olan sayıya kadar döngü kurulmuş ve döngü içerisinde iki sayıya aynı anda bölünen sayı EBOB olarak belirlenmiştir.
main () ifadesi, ana fonksiyonu ve diğer fonksiyonları çağırır.
Program çalıştığında ilk olarak main() fonksiyonu çalıştırılır. SayıGir() fonksiyonuna iki kere dallanma yaparak s1 ve s2 değişkenlerine girilen sayıları aktarır (s1=36, s2=24). Üçüncü aşamada gcd fonksiyonuna s1 ve s2 değişkenleri parametre olarak gönderilir. for döngüsü içerisinde bu parametreler kullanılarak en büyük ortak bölen değeri bulunur ve return deyimi ile çağırıldığı yere gönderilir. print komutu ile gönderilen değer ekrana yazdırılır.
7. Parametre Gönderme
Bir fonksiyonun içerisinde parametre alacağı belirtilmişse mutlaka parametre gönderilmelidir.
def artir(x):
print(“Değişkenin artırılması yapılıyor, x =”,x)
x+=1
print(“Artırma sonucu değer, x =”,x)
return x
def main(): x=5 artir(x)
print(“Artırma sonrası, x =”,x)
print(“Artırma sonrası, x =”,artir())
main()
Ekran Çıktısı
Değişkenin artırılması yapılıyor, x = 5
Artırma sonucu değer, x = 6
Artırma sonrası, x = 5
Traceback (most recent call last):
File “/Users/macbook/Desktop/Fwd _ _ Bilgisayar _ Bilimi _ Taslak _ Kitap/Pyton Kitap Kodlar/artirmaFonk.py”, line 11, in <module>
main()
File “/Users/macbook/Desktop/Fwd _ _ Bilgisayar _ Bilimi _ Taslak _ Kitap/Pyton Kitap Kodlar/artirmaFonk.py”, line 10, in main
print(“Artırma sonrası, x =”,artir())
TypeError: artir() missing 1 required positional argument: “x”
>>>
Program başladığında artir() fonksiyonuna parametre olarak 5 değeri gönderilir ve işlem yaptırılır. İkinci kez artir() fonksiyonu çağırıldığında parametre verilmediğinden hata kodları alınır.
8. Fonksiyon Yazarken Tanımlayıcı Bilgileri Ekleme
Kod satırları için açıklamalar eklemek programı geliştirirken yarar sağlayacaktır.
Fonksiyonun amacı
Alınacak parametrenin görevi
Geri dönüş değeri, açıklama satırlarında belirtilebilir.
Ayrıca, fonksiyon yazarı, değiştirilme tarihi varsa referanslar da eklenebilir.
def gcd (s1,s2)
# Girilen iki değer arasındaki EBOB’u bulur
9. Fonksiyon Örnekleri
9.1 Asal Sayıların Bulunması
from math import sqrt
def asal(n):
kok=round(sqrt(n))+1
for deneme in range(2,kok):
if n % deneme==0:
return False
def main():
else:
return True
en _ buyuk=int(input(“Asal sayıları hangi değere kadar gösterelim? “))
for deger in range(2,en _ buyuk+1):
if asal(deger):
print(deger,end=” “)
print()
main()
Ekran Çıktısı
Asal sayıları hangi değere kadar gösterelim? 15
3
5
7
9
11
13
15
9.2 Hesaplama Yapan Fonksiyon
def yardim():
print(“Topla : Girilen iki sayıyı toplar”) print(“Fark Al : Girilen iki sayının farkını alır”) print(“Yazdır : İşlem yapılan en son değeri ekrana yazdırır”) print(“Yardım : Bu ekranı görüntüler”)
print(“Çıkış : Programdan çıkışı sağlar”)
def menu():
return input(“=== (T)opla (F)ark Al (Y)azdır Y(A)rdım (Ç)ıkış ===”)
def main(): result=0.0 done= False
while not done:
secim=menu()
if secim== “T” or secim== “t”:
sayi1=float(input(“Sayı 1: “)) sayi2=float(input(“Sayı 2: “)) sonuc=sayi1+sayi2
print(sonuc)
elif secim== “F” or secim== “f”: sayi1=float(input(“Sayı 1: “)) sayi2=float(input(“Sayı 2: “)) sonuc=sayi1-sayi2
print(sonuc)
elif secim== “Y” or secim== “y”:
print(sonuc)
elif secim== “A” or secim== “a”:
yardim()
elif secim== “Ç” or secim== “ç”:
done= True
main()
Ekran Çıktısı
=== (T)opla (F)ark Al (Y)azdır Y(A)rdım (Ç)ıkış ===T Sayı Giriniz #1: 12
Sayı Giriniz #2: 13
25.0
=== (T)opla (F)ark Al (Y)azdır Y(A)rdım (Ç)ıkış ===F Sayı Giriniz #1: 23
Sayı Giriniz #2: 21
2.0
=== (T)opla (F)ark Al (Y)azdır Y(A)rdım (Ç)ıkış ===Ç
Bu programda dört işlem harf seçimine göre yapılmaktadır. main() fonksiyonu çağırıldığında yapılacak işlem secim değişkenine aktarılarak kontrol edildikten sonra istenilen işlem yapılacaktır.
9.3 Kısıtlı Veri Girişi
def arasındami(ilk,son):
if ilk>son:
ilk,son=son,ilk
deger=int(input(“Lütfen belirtilen aralıkta bir değer girin ” \
+str(ilk)+ “…” +str(son)+ “: “))
while deger<ilk or deger>son:
print(deger, “Bu değerler arasında değil”,ilk, “…”,son)
deger=int(input(“Tekrar deneyin: “))
return deger def main():
print(arasındami(10,20)) print(arasındami(20,10)) print(arasındami(5,5)) print(arasındami(-100,100))
main()
Ekran Çıktısı
Lütfen belirtilen aralıkta bir değer girin 10…20: 4
4 Bu değerler arasında değil 10 … 20
Tekrar deneyin: 21
21 Bu değerler arasında değil 10 … 20
Tekrar deneyin: 16
16
Lütfen belirtilen aralıkta bir değer girin 10…20: 10
10
Lütfen belirtilen aralıkta bir değer girin 5…5: 4
4 Bu değerler arasında değil 5 … 5
Tekrar deneyin: 6
6 Bu değerler arasında değil 5 … 5
Tekrar deneyin: 5
5
Lütfen belirtilen aralıkta bir değer girin -100…100: -101
-101 Bu değerler arasında değil -100 … 100
Tekrar deneyin: 101
101 Bu değerler arasında değil -100 … 100
Tekrar deneyin: 0
0
Programda istenilen değerler arası veri girilmediğinde hata mesajı, girildiğinde onay mesajı verilmektedir.
Fonksiyon Yazma konusu ile ilgili sunum dosyasına ve konu testine (yakında) aşağıdan ulaşabilirsiniz.