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.

 

 

 

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir