Python Ejderhalar bölgesi
Transkript
Python Ejderhalar bölgesi
Python Ejderhalar bölgesi Amaç : Fonksiyonların kullanımı ve anlaşılması ● ● ● ● Büyük bir kod içerisinde bir çok yerde kullanılmak amacıyla yaratılan küçük programlardır. Kodumuzu fonksiyonlar üzerine oturursak her seferinde kodun tamamını kontrol etmek yerine ilgili fonksiyonları kontrol etmemiz yeterli olur. Aslında farkında olmadan bu kullanıcı dostu küçük programları kullandık bile. Input ( ), print( ) gibi fonksiyonlar önceki pogramlarda kullanıldı. hatta okadar kolaylardıki yazarken sıkılmıştık bile! Şimdi Ejderler bölgesi oyununu yapmak üzere oyun yapımına yoğunlaşalım. Ejderhalar bölgesi ne la! Fantastik dünyada yermi kalmadı? ● ● Bir adamız var adada ejderhalar var Hobbit hikayesinden bildiğimiz gibi ejderhalar paraya mala mülke çook düşkünmüş. Iki çeeşit ejderha var birisi hazinesini bizimle paylaşırken, diğeri hem paylaşımcı değil hemde kapısına gelen oyuncuyu yiyormuş.. ● Oyuncu içinde ejderhalar olan 2 mağradan birini seçecekti. ● Duruma göre ya ejderhaya yem olacak yada ejderhanın hazinesinden birşeyler alablecektir. ● Oyun şimdilik kitapta olduğu gibi inceleyelim... Python Ejderhalar bölgesi Ekran görüntüsü aşağıdaki gibi olacak bir kod yazacağız Ejderhalarla dolu bir adadasın. Hemen önünde iki mağra var. Birindeki ejderha dostcanlısı ve seninle hazinesini paylaşacak. Gel gör ki diğeri öyle değil! Diğer ejderha aç gözlü bencil ve aç bu yüzden seni yiyecek! Hangi mağraya gireceksin? (1 veya 2) 1 Mağraya yaklaşıyorsun... İçerisi karanlık ve ürkütücü... Büyük kocaman bir ejderha hemen önüne atlıyor! Çenesini açıyor veee... Tek ısırıkta seni yiyip bitiriyor! Ne yapalım geçmiş olsun hacıı O değil de... Tekrar oynamak istermisin? (Evet yada Hayır) Python Ejderhalar bölgesi import random import time def girisEkrani(): print('Ejderhalarla dolu bir adadasın. Hemen önünde ') print('iki mağra var. Birindeki ejderha dostcanlısı ve ') print('seninle hazinesini paylaşacak. Gel gör ki diğeri öyle değil! ') print('Diğer ejderha aç gözlü bencil ve aç bu yüzden seni yiyecek!') print() def secilenMagra(): magra = '' while magra != '1' and magra != '2': print('Hangi mağra ya gireceksin? (1 veya 2)') magra = input() return magra def magraKontrol(secilenMagra): print('Mağraya yaklaşıyorsun...') time.sleep(2) print('İçerisi karanlık ve ürkütücü...') time.sleep(2) print('Büyük kocaman bir ejderha hemen önüne atlıyor! Çenesini açıyor veee...') print() time.sleep(2) dostMagra = random.randint(1, 2) if secilenMagra == str(dostMagra): print('Hazinesini sana veriyor!') else: print('Tek ısırıkta seni yiyip bitiriyor! ') time.sleep(2) print('Ne yapalım geçmiş olsun hacıı ') #Bütün olay burada aslinda bundan sonrasını silerseniz yukarıdakeler çalışmaz tekrarOyna = 'Evet' while tekrarOyna == 'Evet' or tekrarOyna == 'E' or tekrarOyna == 'evet' or tekrarOyna == 'e': girisEkrani() magraNumarasi = secilenMagra() magraKontrol(magraNumarasi) print('') print('O değil de...') print('Tekrar oynamak istermisin? (Evet yada Hayır)') tekrarOyna = input() Python Ejderhalar bölgesi Fonksiyon tanımlama ● ● ● ● ● Şimdi istediğimiz zaman çağırmak üzere bir girişEkranı fonksiyonu diye tanımlayalım. Unutmayalım ki biz bu fonksiyonu sonradan çağırmak üzere tanımladık. define(def). Dikkat edileek olursa bizim tanımladığımız giriş ekranı herhangi bir paremetre almıyor. Çağrıldığı vakit içindeki Print fonksiyonlarınıekrena yazıyor o kadar. Print fonksiyonu ise içine yazılan söz dizisini değişken olarak alıyor ama şimdilik bunu kafamıza takmayalım. def girisEkrani(): print('Ejderhalarla dolu bir adadasın. Hemen önünde ') print('iki mağra var. Birindeki ejderha dostcanlısı ve ') print('seninle hazinesini paylaşacak. Gel gör ki diğeri öyle değil! ') print('Diğer ejderha aç gözlü bencil ve aç bu yüzden seni yiyecek!') print() Python Ejderhalar bölgesi ● Buradaki fonksiyonumuz ise oyuncuya mağra seçimi yaptıracak! ● Magra değişkeni tanımlanmış... ● Dikkat edilecek olursa dışarıdan bir değişkeni yok bu fonksiyonun ama ● Kendi programı sonucunda çevirdiği değer magra değişkenin değeri! ● Bunun dışında, Oluşturulan fonksiyonun içinde bir while döngüsü görüyoruz. Bunun amacı yanlış değişken girildiğine soruyu ve fonksiyonu tekrarlamasını sağlamaktır. def secilenMagra(): magra = '' while magra != '1' and magra != '2': print('Hangi mağra ya gireceksin? (1 veya 2)') magra = input() return magra Python Ejderhalar bölgesi O değilde yeri gelmişken Boolean cebrine bir bakalım ● ● ● Kullanımları aynen yanda gösterildiği gibidir. Büyük küçük harf ayrımına duyarlıdır. Not ifadesi soTrue ifadesşnden sonra gelirse bir şey ifade etmez. Dikkatimi çeken noktalar.. ● ● ● not(not True or not True) girdisinin yanıtı False dur. Dikkat edilecek olursa işlemciler küçük harflidir. (not, or, and )gibi Işlemciler bir parentez ile çalışabilir. Python Ejderhalar bölgesi Return değerleri Kitaba göre az önce yeterince return değerlerini incelememişiz bakalımdaha neler var :) return ifadesinin kullanımını açıklamak için bildiğiiz fonksiyonlara bakalım. Hatırlarsak input() fonksiyonu kullanıcının girdiği string değeri saklıyordu. Benzer şekilde .randint fonksiyonu rastgele bir integer (1,2,3,4....) çeviriyordu! Bizim fonksiyonumuz içinse cevrilecek olan magra değişkenine yazılan string ifadedir!!!!! Biz 1veya 2 yazılsın istiyoruz. Return için diğer hatırda kalması gereken nokta ise bir fonksiyonda rturn değeri döndükten sonra programın fonksiyondan çıktığıdır. Öyle kafanıza göre return koymayın!! def secilenMagra(): magra = ' ' while magra != '1' and magra != '2': print('Hangi mağra ya gireceksin? (1 veya 2)') magra = input() return magra Python Ejderhalar bölgesi Evrensel ve Yerel çalışma alanları ● ● Global Scope: Python kodunuzda Fonksiyonların dışındaki çalışma alanı olarak tanımlamamk mümkün . Burada tanımlanan değişkenler golobal değişkenlerdir. Python kodunuzda sadece 1 tane evrensel çalışma alanınız vardır. Local Scope: Fonksiyonlar içindeki kısım yerel çalışma alanlarınızdır. Burada tanımlanan değişkenler bu yerel bölgede tanımlıdırlar global de aynı değişken tanımlı değildir. # This block doesn't run until funky() is called: def funky(): # We create a local variable named "spam" # instead of changing the value of the global # variable "spam": spam = 99 print(spam) # 99 # A global variable named "spam": spam = 42 print(spam) # 42 # Call the funky() function: Funky() print(spam) Python Ejderhalar bölgesi Fonksiyonlara devam: Önceki bölümlerde fonksiyonları çevirdiği değerleri incelemeiştik fonksiyon içinde tanımlanan değişkenlerin foksiyon çağrıldığında çalıştığını da evrensel ve yerel çalışma alanları bölümünde gördük! Şimdi sıra deışarıdan değer alabilen fonksiyonlarda... ● Bu bölümde oluşturacağımız fonksiyon değişkenleri girdi olarak alacak tıpkı str(5) veya random.randint(1,20) öntanımlı fonksiyonlarında olduğu gibi ● Yazılan kodda magraKontrol fonksiyonu secilenMagra değişkenini alımasını ve sonrasında “ if ” değerlendirmesi içinde kullanmasını istiyoruz. ● Burada dikkat edilmesi gereken diğer bir husus secilenMagra fonksiyonu ile bu fonksiyon içinde tanımlanan secilenMagra arasında bir ilişkinin henüz olmamasıdır. ● MagraKontrol fonksiyonu içindeki secilenMağra değişkeni fonksiyon dışında tanımsızdır. ● Ancak iki ifade için söylenebilecek tek net şeyin ikisininde string döndürdüğüdür. def magraKontrol(secilenMagra): print('Mağraya yaklaşıyorsun...') time.sleep(2) print('İçerisi karanlık ve ürkütücü...') time.sleep(2) print('Büyük kocaman bir ejderha hemen önüne atlıyor! Çenesini açıyor veee...') print() time.sleep(2) dostMagra = random.randint(1, 2) if secilenMagra == str(dostMagra): print('Hazinesini sana veriyor!') else: print('Tek ısırıkta seni yiyip bitiriyor! ') time.sleep(2) print('Ne yapalım geçmiş olsun hacıı ') Python Ejderhalar bölgesi #Bütün olay burada. bundan sonrasını silerseniz yukarıdakeler çalışmaz tekrarOyna = 'Evet' while tekrarOyna == 'Evet' or tekrarOyna == 'E' or tekrarOyna == 'evet' or tekrarOyna == 'e': girisEkrani() magraNumarasi = secilenMagra() magraKontrol(magraNumarasi) print('') print('O değil de...') print('Tekrar oynamak istermisin? (Evet yada Hayır)') tekrarOyna = input() Python Hata Ayıklama Wikipedia nın dediğine göre “bug”ve “Debugging” teriminin doğuşu çoğunlukla Amiral Grace Hopper'a atıf edilirmiş. Anlatılana göre Hopper 1940 larda Harvard Üniversite sinde Mark II adlı bilgisayarla çalışırken, Çalışma arkadaşlarından birisi bilgisayar içinde programın çalışmasını engelleyen güve bulur. Bu olayın ardından Hopper yaptıkları işin böcektemizleme(debugging)olduğunu söyler. O dönemden bu güne bilgisayar programlarını sekteğe uğratan, engelleyen hatalara bug, bunlardan kurtulma işlemine debugging denirmiş.:) Bu yandaki de o ünlü güve! Hata tipleri : Programın çalışmasını engelleyen hatalar belirli gruplara ayrılırlar. Bunlar aşağıdaki şekilde gruplanırlar. ● Syntax errors: Program yazarken yazım hatalarına verilen genel addır.Python eğer kodda böyle bir hata varsa zaten çalışmaz. ● Runtime Errors: Program yazıldıktan sonra execute edilirken(çalışırken) hatalı satıra kadar normal ilerler ancak hatalı satırda çatlar, patlar crash olur. Sonrasında hatanın gerçekliştiği satır bilgisiyle hatayı verir. ● Semantic Errors: Bunlar kodun yazımı yada kodun çalışmasıyla alakalı hatalar değildir. Gerçete kod amacına uygun çalışmadığı zaman oluşan durumdaki hatlardır.Basitçe a,b,c değişkenlerinin toplamını çıkaran bir kod yazmak istiyorsunuz ancak kodu yazarken topğlama işaretinin birisini yalışlıkla çarpma yazdınız bu durumuda yanlış sonucu vererk program çalışacaktır. Python Hata Ayıklama Program içindeki hataları bulmak bazen çok zorlayıcı olabilir. Hatta kod içindeki hataların hepsini farketmiş olsanız bile. Bazı durumlarda kod çalışırken daha önce tanımlanmış ve bir çok yerde çağrılması gerekirken çağrılmadıklarını fark edebiliriz. Bu tur durumlarda Kod içinde sonsuz döngülerin olabileceği fikrini akılda tutmak işlevsel olabilir. Böyle bir durumda eğer terminalde isesniz Ctrl + C ile kodun çalışmasını yarıda kesebilirsiniz. Python Hata Ayıklama İdle'da hata ayıklayıcı kullanmak ● Python idle kullanmanın avantajlı yanlarından birisi içinde ki debuggerı kullanmaktır. ● Bu debugger a ulaşmak için Python shell den Debug ve debugger seçeneğini aktif hale getirmek gerekir. ● Sonrasında hatalarını bulmak istediğimiz dosyayı açmaız gerekir. Burada deneme için dragon.py uzantılı python metnini kullanacağız. ● Zaten python terminalinde debugger açıldı gibi ileti olacaktır. ● Bu durumdayken debugger istediğimiz şekilde kodu ileri alacaktır ● Istersek adım adım, istersek tek seferde çalıştırabilriiz. Python Hata Ayıklama ● Stepping out hızlıca fonksiyonları geçebileceğimiz bir metotdur. ● Debuggerdaki Out butonu kullanılır. ● Eger ki herhangi bir fonksiyon içinde değilseniz, Evrensel çalışma alanındasınız demektir. Buda komple kodu çalıştıracağı manasına gelir. Go butonu gibi... ● Go - Executes the rest of the code as normal, or until it reaches a break point. ● Step - Step one line of code. If the line is a function call, the debugger will step into the function. ● Over - Step one line of code. If the line is a function call, the debugger will not step into the function, but instead step over the call. ● Out - Keeps stepping over lines of code until the debugger leaves the function it was in ● when Out was clicked. This steps out of the function. ● Quit - Immediately terminates the program. Python Hata Ayıklama Break Point Python da kullandığımız Idle da kodun şüphelendiğimiz satırına odaklanmak için sağ tıkladıktan sonra set breakpoint sekmesine basıp kodun o kızımını test edebiliyoruz . Sonrsında Clear breakpoint sekmesini işaretleyip ilgili satırdaki “odaklanmayı” kaldırabilirz. Bu debugger kullanırken işlevsel olabilir.