Bilişim Teknolojileri ve Yazılım – Bilgisayar Bilimi

Python İle Programlamanın Temelleri-8

Fonksiyonlar-2

1. Global Değişkenler

Fonksiyonların içerisinde tanımlanan değişkenler yerel değişkenlerdir. Bu değişkenlerin bazı özellikleri vardır:

Bu değişkenler, hafızada aktif kullanıldıkları sürece yani sadece fonksiyon çalışırken korunur. Fonksiyondan çıkıldığında bu değişkenler de program tarafından unutulur ve hafızada ayrılan yerde başka değişkenler tarafından kullanılır.

Aynı değişken adı çakışma olmaksızın farklı fonksiyonlarda kullanılabilir. Bir fonksiyon sonlanmadan diğeri çalışmaya başlayamayacağı için aynı değişken kullanılması sorun yaratmaz.

Yerel değişkenler geçicidir; fonksiyonlar çağırıldığında kaybolur. Bazen bu çalışma sürecinden bağımsız bir değişkene ihtiyaç duyulur.

Global değişken: Ne zaman hangi fonksiyon çağırılırsa çağırılsın, program tarafından tanınan ve hafızada sürekli yeri olan bir değişken.

Bir değişken, bir nesneye atandığı zaman tanımlanır. Bir fonksiyona atanan değişken o fonksiyon için yereldir. Ancak global olarak tanımlanır ise programın tümü tarafından tanınır ve kullanılır.




2. Örnekler

2.1. Hesap Makinesi Örneği

# Kullanıcı seçimine göre Toplama ve Çıkarma işlemi yapan program kodları

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ış ===”)

# Programda kullanılmak üzere global değişken tanımlanması

sonuc = 0.0 sayi1 = 0.0 sayi2 = 0.0 def SayiGir():

global sayi1, sayi2 # sayi1 ve sayi2 nin global değişken olarak bildirilmesi

sayi1 = float(input(“Sayı Giriniz #1: “))

sayi2 = float(input(“Sayı Giriniz #2: “))

def Yazdir():

print(sonuc)

def Topla():

global sonuc

sonuc = sayi1 + sayi2 def FarkAl():

global sonuc

sonuc = sayi1 sayi2 def main():

durum = False while not durum:

secim = Menu() # İşlem yapılacak Menü Tasarımı

if secim == “T” or secim == “t”: # Toplama

SayiGir() Topla() Yazdir()

elif secim == “F” or secim == “f”: # Çıkarma

SayiGir() FarkAl() Yazdir()

elif secim == “Y” or secim == “y”: # Yazdırma

Yazdir()

elif secim == “A” or secim == “a”: # Yardım

Yardim()

elif secim == “Ç” or secim == “ç”: # Çıkış

durum = 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: 43

55.0

=== (T)opla (F)ark Al (Y)azdır Y(A)rdım (Ç)ıkış ===F Sayı Giriniz #1: 44

Sayı Giriniz #2: 32

12.0

=== (T)opla (F)ark Al (Y)azdır Y(A)rdım (Ç)ıkış ===Ç

2.2. Varsayılan (Default) Parametreler

Parametreli fonksiyonlar çağırılırken bir değer gönderilmesi gerekir. Bazı durumlarda bu değer gönderilmeden de fonksiyon çalıştırılmak istenirse, fonksiyonun tanımlama aşamasında gönderilmesi istenen parametreye varsayılan olarak bir değer verilmesi gerekir. Örneğin a=input() ya da a=input(“Adınızı giriniz”)

def gerisayim(n=5):

for sayac in range(n, -1, -1):

print(sayac)

gerisayim() print() gerisayim(8)

Ekran Çıktısı

5

4

3

2

1

0

8

7

6

5

4

3

2

1

0

Yukarıdaki programda gerisayim() fonksiyonu iki kere çağırılmıştır. İlk çağırımında parametre verilmediği için fonksiyonun tanımında verilen default değer ile işlem yapılmış ve 5’ten geriye doğru sayma işlemi gerçekleşmiş ve ekrana yazılmıştır. İkinci çağırılmasında ise 8 değeri parametre olarak gönderilmiş ve bu değer ile işlem yapılmıştır.

2.3. Varsayılan ve Diğer Parametreler

def AralikTopla(n, m=100): # Tek değer varsayılan atama

toplam = 0

for deger in range(n, m + 1):

toplam += deger

Yukarıdaki AralikTopla() fonksiyonunun ikinci (m) parametresine değer girilmez ise varsayılan olarak 100 değeri alınır.

def AralikTopla(n=0, m=100): # İki değer varsayılan atama

toplam = 0

for deger in range(n, m + 1):

toplam += deger

Yukarıdaki AralikTopla() fonksiyonunun birinci (n), ikinci (m) parametrelerine değer girilmez ise varsayılan olarak sırasıyla 0 ve 100 değerleri alınır.

def AralikTopla(n=0, m): # Tek değer varsayılan atama

toplam = 0

for deger in range(n, m + 1):

toplam += deger

Yukarıdaki AralikTopla() fonksiyonunun birinci (n) parametresine değer girilmez ise varsayılan olarak 0 değeri alınır.

2.4. Gelişmiş Poligon Çizimi

import turtle import random

# Program fonksiyona gönderilen parametreler ile çokgen çizer.

# Uzunluk paremetresi girilerek herbir kenarın uzunluğu belirlenir.

# Çizim x ve y parametrelerine girilen koordinat noktalarından başlar.

# Bir sonraki parametre çizimin kenar rengini belirler. (Varsayılan değer olarak siyah).

# Çizilen çokgenin içine dolgu olup olmayacağı belirlenir(Varsayılan False).

def Cokgen(kenarSayisi, uzunluk, x, y, renk=”black”, dolgu=False):

turtle.penup() turtle.setposition(x, y) turtle.pendown() turtle.color(renk)

if dolgu:

turtle.begin _ fill()

for i in range(kenarSayisi): turtle.forward(uzunluk) turtle.left(360//kenarSayisi)

if dolgu:

turtle.end _ fill()

# Adım adım çizim işlemi iptal edilerek çizim hızlandırılıyor

turtle.hideturtle()

turtle.tracer(0)

# Fonksiyonlar örnek çizimler için kullanılıyor

Cokgen(3, 30, 10, 10) # Üçgen çizimi

Cokgen(4, 30, 50, 50, “blue”) # Kenar rengi mavi olan Kare çizimi

Cokgen(5, 30, 100, 100, “red”, True) # Dolgusu kırmızı olan beşgen çizimi

turtle.update()

turtle.exitonclick() # Fare tuşuna tıklandığında çıkış işlemi yapılacaktır.

2.5. Öz Yineleme

Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme, böyle çalışan fonksiyonlara da özyinelemeli fonksiyonlar denilir. Özyinelemeli algoritmalarda, tekrarlar fonksiyonun kendi kendisini kopyalayarak çağırması ile elde edilir. Bu kopyalar işlerini bitirdikçe kaybolur. Bu yönteme en uygun örnek faktöriyel problemidir.

#Özyineleme ile faktöriyel hesaplama

def faktoriyel(n):

#Gelen n değerinin faktöriyeli alır.

if n == 0:

return 1 else:

return n * faktoriyel(n-1)

def main():

# Fonksiyonumuza çeşitli değerler ile test edelim

print(” 0! = “, faktoriyel(0)) print(” 1! = “, faktoriyel(1)) print(” 6! = “, faktoriyel(6)) print(“10! = “, faktoriyel(10))

main()

Sonuç Ekranı

0!            =              1

1!            =              1

6!            =              720

10!          =              3628800

Öz yinelemeli fonksiyonlar kendilerini çağırarak işlem yapan fonksiyonlardır. Yukarıdaki örnekte parametre olarak gelen değerden başlayarak birer azaltıp kendini çağırma işlemi yapar. Bu çağırma işlemi, döngü parametre değeri, 0 olasıya kadar devam eder. 0 olduğunda kendini çağırma işlemi durur ve geriye doğru değerler çarpılarak sonuç bulunur.



2.6. Öz Yineleme Olmadan Faktöriyel Hesaplama

def faktoriyel(n):

sonuc = 1 while n:

sonuc *= n n -= 1

return sonuc def main():

print(” 0! = “, faktoriyel(0)) print(” 1! = “, faktoriyel(1)) print(” 6! = “, faktoriyel(6)) print(“10! = “, faktoriyel(10))

main()

Sonuç Ekranı

0! = 1

1! = 1

6! = 720

10! = 3628800

2.7. Fibonacci Sayıları

def fibonacci(n):

if n <= 0:

return 0 elif n == 1: return 1

else:

return fibonacci(n 2) + fibonacci(n 1)

sira=int(input(“Görmek istediğiniz fibonacci sıra numarasını

giriniz.:”))

print(fibonacci(sira))

Sonuç Ekranı

Görmek istediğiniz fibonacci sıra numarasını giriniz.:22

17711

Fibonacci Sayıları: Her sayının kendisinden önce gelen iki sayının toplamı şeklinde yazılıp devam ettiği sayı dizisine Fibonacci Sayı Dizisi denir. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,…

3. Fonksiyonları Tekrar Kullanılabilir Yapma

Fonksiyonlar programlar içerisinde defalarca kullanılabilir. Aynı amaçlı fonksiyonların birden fazla program tarafından da kullanılması istenebilir. Bu durumda tanımlanan fonksiyon, amacına uygun çağrışım yapacak bir isim verildikten sonra kullanılmak istenen programlarda “from” komutu ile dosya adı yazılarak çağırılabilir.

Kullanımı

from <dosya adı> import <fonksiyon adı>

Örnek

# Asal sayının kontrol edildiği fonksiyon tanımlama

from math import sqrt

def AsalKontrol(n):

# Fonksiyona gelen değer asal ise geriye True, değilse False döner.

bolen= 2

kok = sqrt(n)

while bolen <= kok:

if n % bolen == 0: # Kalan kontrolü yapılıyor

return False # Tam bölünme işlemi gerçekleşti. Asal Değil

bolen += 1 # Bir sonraki bölen değerine geçiliyor.

return True # Tüm değer kontrollerinden sonra kalanlı bölme gerçekleşmediğinde, True değeri dönüyor.

Yukarıda yazılan kodlar, gönderilen sayının asal olup olmadığını kontrol eder. Gelen sayı asal ise geriye True, değilse False gönder. Kodlar yazıldıktan sonra dosya Kontrol.py adı ile kaydedilmelidir.

Aşağıdaki kod, kendisi ile aynı dizinde bulunan Kontrol.py dosyasında bulunan AsalKontrol fonksiyonunu kullanıyor.

from Kontrol import AsalKontrol

# Kontrol dosyasındaki AsalKontrol fonksiyonu programa ekleniyor

sayi = int(input(“Bir sayı giriniz.: “))

if AsalKontrol(sayi):

print(sayi, “ASAL”)

else:

print(sayi, “ASAL değil”)

Diğer bir yol ise şu şekildedir:

import Kontrol

sayi = int(input(“Bir sayı giriniz.: “))

if Kontrol.AsalKontrol(sayi):

print(num, “sayısı ASAL sayıdır.”)

else:

print(num, “sayı ASAL değildir.”)


Fonksiyonlar-2 konusu ile ilgili sunum dosyasına ve konu testine (yakında) aşağıdan ulaşabilirsiniz.