Think Python V2 -TURKCE-How to Think Like a Computer Scientist

Embed Size (px)

Citation preview

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    1/207

    PYTHONFor Software DesignYazlm Tasarm in

    Bilgisayar Bilimcisi Gibi DnmekHow to think like a Computer Scientis

    my

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    2/207

    Bilgisayar Bilimcisi gibi Dnmek

    Python ile renme 2. Bask

    Yazarlar: Jeffrey Elkner, Allen B. Downey ve Chris Meyers

    Grseller: Udit Bhatnager ve Chris Schmeelk

    eviren: Tahir Emre KalaycDzenleme: Mkremin Yksel

    ngilizce Asl in

    Kitap GNU Free Document License ile lisanslanmtr. Ltfen lisans inceleyiniz.Kitabn

    sonunda lisansn btn metnine ulaabilirsiniz.

    Copyright 2008 Jeffrey Elkner, Allen B. Downey ve Chris Meyers.

    Anasayfa David Cox tarafndan tasarlanmtr.

    1

    http://yzgrafik.ege.edu.tr/~tekreihttp://yzgrafik.ege.edu.tr/~tekreihttp://openbookproject.net/thinkCSpy/index.htmlhttp://yzgrafik.ege.edu.tr/~tekrei/dersler/bbgd_p/fdl.txthttp://yzgrafik.ege.edu.tr/~tekrei/dersler/bbgd_p/fdl.txthttp://yzgrafik.ege.edu.tr/~tekrei/dersler/bbgd_p/fdl.txthttp://openbookproject.net/thinkCSpy/index.htmlhttp://yzgrafik.ege.edu.tr/~tekrei/dersler/bbgd_p/fdl.txthttp://yzgrafik.ege.edu.tr/~tekrei/dersler/bbgd_p/fdl.txthttp://yzgrafik.ege.edu.tr/~tekrei/dersler/bbgd_p/fdl.txthttp://yzgrafik.ege.edu.tr/~tekrei
  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    3/207

    indekiler1. Programlama Yolu..................................................................................................................................7

    1.1 Python programlama dili.................................................................................................................71.2 Program nedir?................................................................................................................................91.3 Hata ayklama (Debugging) nedir?.................................................................................................9

    1.4 Szdizimsel hatalar........................................................................................................................101.5 alma zaman hatalar................................................................................................................101.6 Anlambilimsel hatalar....................................................................................................................101.7 Deneysel hata ayklama.................................................................................................................111.8 Biimsel (Formal) ve doal diller..................................................................................................111.9 lk program....................................................................................................................................131.10 Szlk..........................................................................................................................................131.11 Altrmalar..................................................................................................................................15

    2. Deikenler, deyimler ve cmleler.......................................................................................................162.1 Deerler ve tipler...........................................................................................................................162.2 Deikenler....................................................................................................................................18

    2.3 Deiken isimleri ve anahtar kelimeler.........................................................................................192.4 Cmleler........................................................................................................................................202.5 Deyimleri deerlendirme...............................................................................................................202.6 leler ve ilenenler......................................................................................................................212.7 lelerin sras...............................................................................................................................222.8 Karakter dizisi zerindeki ilemler................................................................................................232.9 Girdi...............................................................................................................................................232.10 Kompozisyon...............................................................................................................................242.11 Yorumlar......................................................................................................................................242.12 Szlk..........................................................................................................................................252.13 Altrmalar..................................................................................................................................27

    3. Fonksiyonlar.........................................................................................................................................283.1 Tanmlar ve kullanm.....................................................................................................................283.2 Yrtme ak................................................................................................................................313.3 Parametreler, argmanlar, ve import cmlesi................................................................................313.4 Kompozisyon.................................................................................................................................333.5 Deikenler ve parametreler yereldir............................................................................................333.6 Yt diyagramlar.........................................................................................................................343.7 Szlk............................................................................................................................................353.8 Altrmalar....................................................................................................................................38

    4. Koul ifadeleri......................................................................................................................................384.1 Modl (Kalan) ileci......................................................................................................................39

    4.2 Boolean deerler ve deyimler........................................................................................................394.3 Mantksal ileler..........................................................................................................................404.4 Koullu yrtme............................................................................................................................404.5 Alternatif yrtme.........................................................................................................................414.6 Zincirleme koul ifadeleri.............................................................................................................424.7 ie koul deyimleri.....................................................................................................................424.8 Geri dn (return) cmlesi...........................................................................................................43

    2

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    4/207

    4.9 Klavye girdisi................................................................................................................................444.10 Tip dnm..............................................................................................................................454.11 Gasp.............................................................................................................................................464.12 Szlk..........................................................................................................................................474.13 Altrmalar..................................................................................................................................48

    5. rn veren fonksiyonlar......................................................................................................................53

    5.1 Geri dn deerleri......................................................................................................................535.2 Program gelitirme........................................................................................................................545.3 Kompozisyon.................................................................................................................................575.4 Boolean fonksiyonlar....................................................................................................................575.5 function tipi...................................................................................................................................585.6 Program yazm kurallar................................................................................................................595.7 l trnakl karakter dizileri........................................................................................................595.8 doctest ile birim snama (unit test)................................................................................................605.9 Szlk............................................................................................................................................625.10 Altrmalar..................................................................................................................................63

    6. Yineleme...............................................................................................................................................676.1 Birden fazla atama.........................................................................................................................676.2 Deikenleri gncelleme...............................................................................................................686.3 while cmlesi.................................................................................................................................686.4 Program izlemek..........................................................................................................................706.5 Basamaklar sayma........................................................................................................................716.6 Ksaltlm atama...........................................................................................................................716.7 Tablolar..........................................................................................................................................726.8 ki boyutlu tablolar........................................................................................................................736.9 Sarma (Encapsulation) ve genelletirme.......................................................................................746.10 Daha fazla sarma.........................................................................................................................756.11 Yerel deikenler.........................................................................................................................756.12 Daha fazla genelletirme.............................................................................................................766.13 Fonksiyonlar................................................................................................................................786.14 Newton yntemi..........................................................................................................................786.15 Algoritmalar.................................................................................................................................796.16 Glossary.......................................................................................................................................796.17 Altrmalar..................................................................................................................................81

    7. Karakter dizileri...................................................................................................................................837.1 Bileik veri tipi...................................................................................................................................83

    7.2 Uzunluk.........................................................................................................................................847.3 Gezinme ve for dngs................................................................................................................847.4 Karakter dizisi dilimleri.................................................................................................................857.5 Karakter dizisi karlatrma..........................................................................................................867.6 Karakter dizileri deimez.............................................................................................................877.7 in ileci..........................................................................................................................................877.8 Bir bulma(find) fonksiyonu...........................................................................................................887.9 Dng ve sayma............................................................................................................................887.10 stee bal parametreler.............................................................................................................897.11 string modl...............................................................................................................................907.12 Karakter snflandrma.................................................................................................................91

    3

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    5/207

    7.13 Karakter dizisi biimlendirme.....................................................................................................927.14 Szlk..........................................................................................................................................947.15 Altrmalar..................................................................................................................................95

    8. rnek alma: Catch..........................................................................................................................988.1 Balang.......................................................................................................................................988.2 Topu hareket ettirmek iin while kullanm...................................................................................98

    8.3 Aralklar deitirmek..................................................................................................................1008.4 Topun sekmesini salamak..........................................................................................................1018.5 break cmlesi...............................................................................................................................1018.6 Klavyeyi yantlamak....................................................................................................................1028.7 arpma kontrol.......................................................................................................................1028.8 Paralar birletirelim..................................................................................................................1038.9 Metin gsterimi...........................................................................................................................1048.10 Soyutlama..................................................................................................................................1058.11 Szlk........................................................................................................................................1088.12 Altrmalar................................................................................................................................1098.13 Proje: pong.py............................................................................................................................110

    9. Listeler................................................................................................................................................1119.1 Liste deerleri..............................................................................................................................1119.2 elere erime.............................................................................................................................1129.3 Liste boyutu.................................................................................................................................1139.4 Liste yelii.................................................................................................................................1139.5 Liste ilemleri..............................................................................................................................1149.6 Liste dilimleri..............................................................................................................................1149.7 The range fonksiyonu..................................................................................................................1159.8 Listeler deitirilebilir.................................................................................................................1159.9 Liste silme...................................................................................................................................1169.10 Nesneler ve deerler..................................................................................................................1179.11 Takma isimler............................................................................................................................1189.12 Listeleri klonlama......................................................................................................................1199.13 Listeler ve for dngleri............................................................................................................1199.14 Liste parametreler......................................................................................................................1209.15 Saf (pure) fonksiyonlar ve deitiriciler (modifiers).................................................................1219.16 Hangisi daha iyi?.......................................................................................................................1229.17 ie listeler...............................................................................................................................1229.18 Matrisler....................................................................................................................................1239.19 Test gdml gelitirme (TDD)................................................................................................1239.20 Karakter dizileri ve listeler........................................................................................................1269.21 Szlk........................................................................................................................................1279.22 Altrmalar................................................................................................................................129

    10. Modller ve dosyalar.......................................................................................................................13410.1 Modller....................................................................................................................................13510.2 pydoc.........................................................................................................................................13510.3 Modl yaratma..........................................................................................................................13810.4 sim uzaylar..............................................................................................................................13910.5 zellikler ve nokta ileci...........................................................................................................14010.6 Karakter dizisi ve liste metotlar...............................................................................................141

    4

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    6/207

    10.7 Metin dosyalarn okuma ve yazma...........................................................................................14210.8 Metin dosyalar..........................................................................................................................14410.9 Dizinler......................................................................................................................................14510.10 Counting Letters......................................................................................................................14610.11 sys modl ve argv..................................................................................................................14710.12 Szlk......................................................................................................................................149

    10.13 Altrmalar..............................................................................................................................15111. zyineleme ve istisnalar..................................................................................................................15711.1 Tuplelar ve deiebilirlik...........................................................................................................15811.2 Tuple atamas.............................................................................................................................15911.3 Geri dn deerleri olarak Tuplelar.........................................................................................15911.4 Saf fonksiyonlar ve deitiriciler - gzden geirme..................................................................16011.5 zyineli veri yaplar.................................................................................................................16211.6 zyineleme................................................................................................................................16311.7 stisnalar (Exceptions)...............................................................................................................16511.8 Kuyruk zyineleme...................................................................................................................16711.9 Liste kavramas..........................................................................................................................16811.10 Mini rnek alma: tree..........................................................................................................16911.11 Szlk......................................................................................................................................17011.12 Altrmalar..............................................................................................................................172

    12. Szlkler..........................................................................................................................................17712.1 Szlk ilemleri.........................................................................................................................17812.2 Szlk metotlar........................................................................................................................17812.3 Rumuz ve kopyalama................................................................................................................17912.4 Dank matrisler.......................................................................................................................18012.5 pular.......................................................................................................................................18112.6 Uzun tamsaylar.........................................................................................................................18212.7 Harfleri saymak.........................................................................................................................18212.8 rnek alma: Robotlar............................................................................................................183

    Oyun.............................................................................................................................................183Dnyay, oyuncuyu ve ana dngy ayarlama.............................................................................183Robot ekleme................................................................................................................................185Daha fazla robot ekleme...............................................................................................................186

    12.9 Szlk........................................................................................................................................18712.10 Altrmalar..............................................................................................................................188

    13. Snflar ve nesneler...........................................................................................................................19113.1 Nesne ynelimli programlama..................................................................................................19113.2 Kullanc tanml bileik tipler...................................................................................................19113.3 zellikler...................................................................................................................................19213.4 lkleme (initialization) metotu ve self.......................................................................................19313.5 Parametreler eklinde rnekler..................................................................................................19313.6 Aynlk.......................................................................................................................................19413.7 Dikdrtgenler.............................................................................................................................19513.8 Dn deeri olarak rnekler....................................................................................................19513.9 Nesneler deitirilebilir.............................................................................................................19613.10 Kopyalama...............................................................................................................................19613.11 Szlk......................................................................................................................................197

    5

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    7/207

    13.12 Altrmalar..............................................................................................................................198A. Ubuntu'yu Python gelitirme iin yaplandrma................................................................................198

    A.1 Vim.............................................................................................................................................199A.2 GASP..........................................................................................................................................199A.3 $HOME ortam...........................................................................................................................200A.4 Bir Python betiini heryerden altrlabilir ve yrtlebilir yapma........................................200

    GNU Free Documentation License Version 1.2, November 2002.........................................................201

    6

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    8/207

    1. Programlama YoluBu kitabn amac size bir bilgisayar bilimcisi gibi dnmeyi retmektir. Budnme ekli matematiin, mhendisliin ve doal bilimlerin baz en iyizelliklerini birletirir. Matematikiler gibi, bilgisayar bilimcileri fikirleri (zellikle

    hesaplamalar) gstermek iin biimsel dilleri kullanrlar. Mhendisler gibi eyleritasarlar, bileenleri (paralar) sistemler eklinde birletirir ve farkl alternatiflerinavantaj ve dezavantajlarn deerlendirirler. Bilim insanlar gibi, karmaksistemlerin davranlarn gzlemler, hipotezler oluturur ve varsaymlar(tahminleri) snarlar.

    Bir bilgisayar bilimcisi iin tek ve en nemli yetenek problem zmedir. Problemzme problemleri formle edebilme, zmler hakknda yaratc dnme ve birzm ak ve kesin olarak ifade edebilme yeteneidir. Grlecei gibi,programlama renme sreci problem zme yeteneklerinin uygulamasnyapmak iin mkemmel bir frsattr. Bu blme bu yzden, "Programlama yolu"ad verilmitir.

    Bir ynden programlamay renirken - ki kendisi yararl bir yetenektir - bir bakaynden programlamay sonu iin bir yol olarak kullanmay reneceksiniz.lerledike bu daha ak bir hale gelecektir.

    1.1 Python programlama dilireneceiniz programlama dili Python olacaktr. Python bir yksek seviyeli dilrneidir; yksek seviyeli dillere rnek olarak daha nce duymu olabileceinizC++, PHP ve Java verilebilir.

    "Yksek seviyeli dil" ifadesinden karabileceiniz gibi, ayrca dk seviyelidiller de vardr, bunlar baz durumlarda "makine dili" veya "birletirici dili"eklinde isimlendirilir. Basite sylersek, bilgisayarlar sadece dk seviyelidillerde yazlm programlar altrabilirler. Bu yzden, yksek seviyeli dillerdeyazlm programlar altrlmadan nce bir ilemden gemelidir. Bu ek ilembiraz zaman alr, bu da yksek seviyeli dillerin dezavantajdr.

    Ancak avantajlar olduka fazladr. lk olarak, yksek seviyeli dillerdeprogramlamak olduka kolaydr. Yksek seviyeli dilde yazlm programlar daha azsrede yazlr, daha ksadr, okumas daha kolay ve doru olma ihtimalleri dahayksektir. kinci olarak, yksek seviyeli dillerdir, bunun anlam farklbilgisayarlarda az deiiklik veya deiiklik yapmadan altrlabilirler. Dk

    seviyeli programlar sadece tek bir bilgisayar eidinde alabilirler ve baka birbilgisayarda alabilmesi iin tekrar yazlmaldr.

    Yksek seviyeli dilleri, dk seviyeli dillere evirmek iin iki eit programkullanlmaktadr: yorumlayclar ve derleyiciler.Yorumlayclar yksek seviyeliprogram okur ve iletir, bunun anlam program ne diyorsa onu yapar. Programbiraz biraz iler, satrlar okur ve ilgili hesaplamalar gerekletirir.

    7

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    9/207

    Derleyici program okur ve program altrmadan nce tamamen baka bir eyedntrr. Bu durumda yksek seviyeli programa kaynak kod, evrildiiprograma ise hedef kod veya altrlabilir denir. Program derlendikten sonra,daha fazla evirme yapmadan tekrar tekrar altrlabilir.

    ou modern dil her iki ilemi de kullanr. Programlar ilk nce daha dk seviyelibir dile derlenir, byte kod, ve daha sonra sanal makine ad verilen bir programtarafndan yorumlanrlar. Python her iki ilemi de kullanr, ancak programclarnkendisiyle etkileim yntemi nedeniyle, daha ok yorumlamal dil olarak kabuledilir.

    Python yorumlaycsnn kulland iki yntem vardr: kabuk modu ve betik modu.Kabuk modunda Python kabuuna Python cmlelerini yazp, yorumlaycnnhemen sonular retmesi salanyor:

    $ pythonPython 2.5.1 (r251:54863, May 2 2007, 16:56:35)[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2Type "help", "copyright", "credits" or "license" for moreinformation.>>> print 1 + 12

    Bu rnekteki ilk satr, bir Unix komut satrnda Python yorumlaycsn balatankomuttur. Sonraki satr yorumlaycnn mesajlardr. >>> ile balayan drdncsatr, Python bilgi istemi(prompt)dir. Yorumlayc bilgi istemini komutlar iinhazr olduunu belirtmek iin kullanmaktadr.print 1+1 yazdk ve yorumlayc yantolarak 2 dndrd.

    Alternatif olarak, program bir dosya iine yazp yorumlaycnn dosya ieriinialtrmasn salayabiliriz. Bu tip dosyaya betikad verilmektedir. rnein, birmetin dzenleyicisi yardmyla firstprogram.py adl dosyay aadaki ierikleyarattmz varsayalm:

    print 1 + 1

    Bir kural (gelenek) olarak, Python programlarn ieren dosyalar .py uzantsylabiter.

    Program altrmak iin, yorumlaycya dosyann ismini vermemiz gerekir:

    $ python firstprogram.py2

    8

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    10/207

    Bu rnekler Python'un Unix komut satrndan altrlmasn gstermektedir. Diergelitirme ortamlarnda, programlar altrma ayrntlar farkllklar gsterebilir.Ayrca ou program bu verilen rnekten ok daha ilgintir.

    Bu kitaptaki rnekler Python yorumlaycs ve betikleri kullanr. Kabuk modurnekleri hep bilgi istemiyle balayaca iin rneklerin altrlmasnda hangiyntemin kullanlacan rahatlkla ayrdedebileceksiniz. Kabuk modunda almak

    kk kod paralarn snamak iin geleneksel yntemdir, nk annda geribeslemeyi alm olursunuz. Kabuk modunu karalama iin kullanlan bir katparas gibi dnebilirsiniz. Bir ka satrdan uzun herey betik ierisinekoyulmaldr.

    1.2 Program nedir?Program, hesaplamay gerekletirmek iin gereken birbirini izleyen ynergelerden(komutlardan) oluan yapdr. Hesaplama matematiksel olabilir, rnein bireitlikler sisteminin zlmesi veya bir polinomun kkn bulmak gibi, ama ayrcasembolik bir hesaplama, bir belge iinde metin arama ve deitirme veyaprogram derleme (yeterince ilgin) gibi, olabilir.

    Ayrntlar farkl programlama dillerinde farkl gzkebilir, ancak baz basit temelynergeler her dilde gzkr:

    girdi:Klavyeden, dosyadan veya baka bir aygttan veriyi alma.

    kt:Ekranda veriyi grntleme veya veriyi bir dosya ya da baka bir aygtagnderme.

    matematik:Toplama, arpma gibi baz temel matematiksel ilemleri gerekletirme.

    koullu yrtme:Belirli durumlar iin snama yapma ve uygun cmle srasn altrma.

    tekrarlama:Baz eylemleri genellikle ufak tefek baz deiikliklerle tekrar tekrar yrtme.

    nann veya inanmayn, var olanlarn hepsi bu kadardr. u ana kadar kullandnzher program, ne kadar karmak olursa olsun, yukardakilere benzeyen komutlarlayaplmtr. Bu yzden, programlamay byk ve karmak bir grevi, yukardakitemel komutlarla gerekletirilebilecek kadar basit olan daha kk alt grevlereklinde paralama sreci olarak tanmlayabiliriz.

    Bu biraz belirsiz gelebilir, ancak bu konuya algoritmalar hakknda konuurkentekrar geleceiz.

    1.3 Hata ayklama (Debugging) nedir?Programlama karmak bir sretir, ve insanlar tarafndan yapld iin hatalarayol aabilir. Garip nedenlerden dolay, programlama hatalarna bug ad

    9

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    11/207

    verilmektedir, ve bu hatalar belirleme ve dzeltme ilemine debugging adverilmektedir (n. Bug bcek anlamna gelir. Eski dnemlerde oday kaplayanbilgisayarlarda bcek grlmesi zerine kullanldna dair iddialar var. Trke'dehata ayklama ifadesini kullanacamz iin aslnda bu aklamann sadece ingilizceiin geerli olduunu belirtmek gerekiyor).

    Bir programda tr hata oluabilir : szdizimsel hatalar, alma zaman hatalar

    ve anlambilimsel hatalar. Bu hatalar daha hzl belirleyebilmek iin ayrt edicizelliklerinin anlatlmas nemlidir.

    1.4 Szdizimsel hatalarPython bir program eer szdizimsel olarak doruysa altrabilir; aksi halde,ilem baarsz olur ve bir hata mesaj dndrr. Szdizimi programn yapsnkasteder ve bu yap hakkndaki kurallar tanmlar. rnein, Trke'de bir cmlebyk harfle balamal ve nokta iaretiyle tamamlanmaldr. bu cmle birszdizimi hatas iermektedir. Ayrca bu cmle de

    ou okuyucu iin, baz szdizimi hatalar ok nemli deildir, bu yzden baz iirrneklerini hata mesajlar vermeden okuyabiliriz. Python bu kadar affedici deildir.Programn herhangi bir yerinde tek bir szdizimi hatas olduunda bile, bir hatamesaj verip kacaktr ve program altrmanz mmkn olmayacaktr.Programlama kariyerinizin ilk bir ka haftasnda, bu szdizimi hatalarn belirlemekve dzeltmek iin olduka fazla zaman harcayacaksnz. Deneyim kazandka,daha az hata yapmaya ve hatalar daha hzl belirleyip dzeltmeyebalayacaksnz.

    1.5 alma zaman hatalar

    kinci tr hatalar, alma zaman hatalardr, bu ismin verilmesinin nedeniprogram altrlana kadar bu hatalarn ortaya kmamasdr. Bu hatalara ayrcaistisna ad da verilmektedir, nk istisnai (ve kt) bir durumun ortaya ktnbelirtirler. ilk blmlerdeki basit programlarda alma zaman hatalarylakarlamanz olduka dk ihtimallidir, bu hatalarla karlaana kadar birazzaman geebilir.

    1.6 Anlambilimsel hatalarnc hata tipi anlambilimsel hatalardr. Programda bir anlambilimsel hatavarsa, baarl bir ekilde almayacaktr, bundan kastedilen bilgisayarn herhangibir hata mesaj retmeyecei, ancak doru eyi yapmayacadr. Beklenilendenfarkl bir ey yapacaktr. Bilgisayarlar siz ona ne derseniz, onu yapan aygtlardr.

    Sorun, yazdnz program yazmak istediiniz program deildir. Programn anlam(anlambilimi) hataldr. Anlambilimsel hatalar tanmlamak ustalk (beceri) ister,nk programn ktsn inceleyerek geriye ynelik olarak takip etmenizi ve neyaptn anlamaya almanz gerektirir.

    10

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    12/207

    1.7 Deneysel hata ayklamaKazanabileceiniz en nemli yeteneklerden biri hata ayklamadr. Sinir bozucuolmasna ramen, hata ayklama programlamann zihinsel zenginlik gerektiren,zorlayc ve ilgin bir parasdr.

    Baz durumlarda, hata ayklama dedektif almas gibidir. pularyla kar karya

    kalmsnzdr ve grdnz sonulara yol aan srelerle eylemlerden sonularve anlamlar karmanz gerekir.

    Hata ayklama deneysel bilim gibidir. Neyin hatal gittiine dair fikrinizolutuunda, program deitirerek tekrar tekrar denersiniz. Hipoteziniz doru ise,deiikliin sonucunu tahminleyebilir ve alan bir programa bir adm dahayaklam olursunuz. Hipoteziniz yanl ise, yeni bir hipotez retmeniz gerekir.Sherlock Holmes'un syledii gibi "imkansz elediinizde, elinizde kalan ey, herne kadar grnmese de gerek olmak zorundadr" (A. Conan Doyle, The Sign ofFour)

    Baz kiiler iin, programlama ve hata ayklama ayn eydir, programlama

    istediiniz ii yapana kadar bir programda hata ayklama srecidir. Bu fikirprogram yazmaya basit bir ekilde, temel bir eyler yapan bir rnekle balamanzgerektiini syler, ilerledike programda kk deiiklikler yaparak, hatalarayklayarak ilerlemenizi tavsiye eder. Bu yntemle her zaman bir alan srmesahip olabilirsiniz.

    rnein, Linux bir iletim sistemi ekirdeidir ve binlerce satr kaynak kod ierir,ama Linus Torvalds tarafndan Intel 80386 yongasn kefetmek iin basit birprogram olarak balatlmtr. Larry Greenfield'a gre, "Linus'un erkenprojelerinden biri, AAAA ve BBBB arasnda seim yaparak ekrana yazdran birprogramdr, bu program daha sonra Linux'e evrilmitir" ("The Linux Users' Guideversion 1")

    Kitabn sonraki blmleri hata ayklama ve dier programlama pratikleri hakkndadaha fazla nerilerde bulunacaktr.

    1.8 Biimsel (Formal) ve doal dillerDoal diller konutuumuz dillerdir, Trke, ngilizce, spanyolca ve Franszcagibi. nsanlar tarafndan tasarlanmamtr (her ne kadar insanlar bunlar iinkurallar koymaya alsa da), doal olarak evrilmilerdir.

    Biimsel diller insanlar tarafndan baz zel uygulamalar iin gelitirilmi dillerdir.

    rnein, matematikilerin kulland gsterim saylar ve semboller arasndakiilikiyi gstermek iin iyi bir biimsel dildir. Kimyaclar molekllerin kimyasalyapsn gstermek iin biimsel bir dil kullanrlar. Ve en nemlisi:

    Programlama dilleri hesaplamalar ifade etmek iin tasarlanm biimseldillerdir.

    11

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    13/207

    Biimsel diller szdizimi asndan kat kurallara sahip olma eilimindedir. rnein,3+3=6 ifadesi matematiksel olarak szdizimsel olarak doru bir ifadedir, ancak3=+6$ deildir. H2O szdizimsel olarak doru bir kimyasal isimdir, 2Zz ifadesi

    deildir.

    Szdizimsel kurallar tokenlere ve yapya ait olmak zere iki ekildedir. Tokenlerdilin temel eleridir, kelimeler, saylar ve kimyasal elementler gibi. 3=+6$ifadesiyle ilgili bir sorun $ iaretinin matematikte (bildiimiz kadaryla) geerli birtoken olmamasdr. Benzer olarak 2Zz ifadesi de geerli deildir nk Zz

    ksaltmasna sahip bir element yoktur.

    kinci tr szdizim kural cmlelerin yapsyla - tokenlerin nasl dizildii - ilgilikurallardr. 3=+6$ yapsal olarak geersizdir nk eittir iaretinden hemensonra art iareti gelemez. Benzer olarak, molekl formllerinde de alt iaretlerelement isminden sonra gelmelidir, nce gelemezler.

    Biimsel bir dildeki veya Trke'deki bir cmleyi okuduunuzda, cmlenin yapsnzmek gerekir (doal dillerde bunu bilinsiz bir ekilde yaparz). Bu srece

    ayrtrma (parsing) ad verilmektedir.rnein, "Ayaklarma kara sular indi" cmlesini duyduunuzda, "ayaklarma"nnzne, "indi"'nin de yklem olduunu alglarsnz. Cmleyi ayrtrdnzda, neanlama geldiini (cmlenin anlambilimini) zersiniz. "Ayak"n ne olduunu ve"indi" eylemini bildiinizi varsayarsak, bu cmleyle kastedilen anlam ortayakarabilirsiniz.

    Her ne kadar biimsel ve doal diller bir ok ortak zellie - tokenler, yap,szdizimi, anlambilim - sahip olsa da, bir ok farkllklar da vardr:

    belirsizlik:Doal diller belirsizlikle doludur, kiiler balamsal ipular ve dier bilgilerden

    yararlanarak bu belirsizlii aarlar. Biimsel diller neredeyse veya tamamenbelirli olmak zere tasarlanmtr. Bunun anlam cmlenin sadece bir anlamvardr, balam ne olursa olsun.

    fazlalk (redundancy):

    Belirsizlii nlemek ve yanl anlamalar azaltmak iin, doal diller bir okgereksiz ierie sahiptir. Bu yzden bir ok fazlalk barndrr. Biimsel dillerfazlalk iermez, az ve z olmaldr.

    gerekilik:Doal diller deyim ve mecazlarla doludur. Eer biri "Ayaklarma kara sular

    indi" diyorsa, bu ayaklarna kara sular indi anlamna gelmez, gizli bir anlamvardr ve yorgun olduunu belirtir. Biimsel dillerde cmlelerin gerei aynenyanstmas gerekir, anlam yazlanla ayn olmaldr.

    Doal bir dili konuarak byyen kiiler - herkes - biimsel dillere almaktazorlanabilirler. Baz durumlarda, biimsel dillerle doal diller arasndaki farklardzyaz ile iir arasndaki farklar gibidir, ancak;

    12

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    14/207

    iir:Kelimeler anlamlar olduu kadar sesleri iin de kullanlr, ve tm iir bir etkiveya duygusal bir tepki yaratr. Belirsizlik yaygn olmasnn yannda sklkla birgerekliliktir.

    Dzyaz:Kelimelerin gerek anlam daha nemlidir, ve yap anlama daha fazla katk

    salar. Dzyaznn iire gre zmlemesi daha kolaydr ancak yine debelirsizlikler ierebilir.Programlar:

    Bilgisayar programnn anlam belirli (tek anlaml) ve gerek olmaldr, vetoken ile yapnn zmlenmesiyle tamamen anlalmaldr.

    Programlar (ve dier biimsel dilleri) okumak iin baz neriler u ekildir. lkolarak, biimsel dillerin doal dillerden daha youn olduunu hatrlamak gerekir,bylece onlar okumak daha fazla zaman alacaktr. Ayrca, yap olduka nemlidir,bu yzden yukardan aaya soldan saa okumak iyi bir fikir deildir, programkafanzda ayrtrmay, tokenleri ve yapy belirleme ve tanmlamay renmeniz

    gerekir. Son olarak, ayrntlar nemlidir. yazm yanllar ve noktalama hatalar gibikk eyler, doal dillerde bunlar yok sayabilirsiniz, biimsel dillerde bykfarklar ve sorunlar yaratabilir.

    1.9 lk programGeleneksel olarak, yeni bir dilde yazlan ilk program "Merhaba, Dnya!" ad verilenprogramdr, nk ekranda "Merhaba, Dnya!" kelimelerini gsterir. Python'daaadaki ekilde yazlmaktadr:

    print"Merhaba, Dnya!"

    Bu print cmlesinin bir rneidir. Bu cmle kat stne bir ey yazmaz,ekranda bir deer gsterir. Yukardaki rnekte, sonu aadaki kelimelerinekranda gzkmesidir:

    Merhaba, Dnya!

    Trnak iaretleri programda bir deerin ba ve sonunu gsterir, ekrandaki sonutabu karakterler gzkmez. Baz kiiler programlama dilinin kalitesini "Merhaba,Dnya!" programnn basitliiyle deerlendirirler. Bu standarta gre, Pythonolduka iyi sonu retir.

    1.10 Szlkalgoritma:

    Bir problem kategorisini zmek iin bir genel srebug:

    Programdaki bir hatabyte kod:

    13

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    15/207

    Kaynak kod ve hedef kod arasndaki ara dildir. ou modern programlama diliilk olarak kaynak kodu, byte koda derler ve daha sonra bu byte kodu sanalmakine ad verilen bir program ile yorumlarlar.

    derleme:Yksek seviyeli bir dilde yazlm program, daha sonra altrmak zere dahadk seviyeli bir dile evirme ilemidir.

    hata ayklama:Herhangi bir programlama hatasn bulma ve ortadan kaldrma srecidir.istisna:

    alma zaman hatasnn bir dier adaltrlabilir:

    altrlmaya hazr hedef kodun bir dier adbiimsel dil:

    Baz zel amalar iin , matematiksel fikirlerin temsili veya bilgisayarprogramlar gibi, insanlar tarafndan tasarlanm herhangi bir dildir. Tmprogramlama dilleri biimsel dillerdir.

    yksek seviyeli dil:

    nsanlar tarafndan rahatlkla okunabilmesi, yazlmas ve anlalmas iingelitirilmi Python benzeri programlama diliyorumlama:

    Yksek seviyeli dilde yazlm bir program satr satr evirerek yrtmedk seviyeli dil:

    Bilgisayarn kolay bir ekilde yrtmesi iin tasarlanm programlama dili,"makine dili" veya "birletirici dil" ad da verilmektedir.

    doal dil:Doal olarak evrimlemi ve insanlarn konuurken kulland herhangi bir dil

    hedef kod:Derleyicinin program (kaynak kodu) evirmesiyle ortaya kan kt

    ayrtrma:Bir program inceleme ve szdizimsel yapsn zmleme ilemitanabilirlik:

    Bir programn birden fazla bilgisayar trnde yrtlebilmesi zelliiprint cmlesi:

    Python yorumlaycsnn bir deeri ekranda gstermesini salayan ynerge(komut) cmlesi

    problem zme:Problemi formle etme, zm bulma ve zm ifade etme sreci

    program:Bilgisayar tarafndan gerekletirilecek eylemleri ve hesaplamalar belirten

    art arda gelen komutlarPython kabuu:Python yorumlaycsnn etkileimli kullanc arayz. Python kabuukullancs bilgi isteminde (>>>) komutlar yazar ve Giri (Enter) tuunabasarak komutlar annda yorumlaycya ilenmeleri iin gnderir.

    alma zaman hatas:

    14

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    16/207

    Program altrlana kadar ortaya kmayan, altrldktan sonra oluan veprogramn almasna devam etmesini engelleyen hata

    betik:Bir dosyada saklanm program (genellikle yorumlaycya verilecek olan)

    anlambilimsel hata:Programn, programcnn istediinden farkl bir ey yapmasna neden olan

    hataanlambilim:Programn anlam

    kaynak kod:Yksek seviyeli bir dildeki programn derlemeden nceki hali

    szdizimi:Programn yaps

    szdizimi hatas:Programn ayrtrlmasn imkansz hale getiren hata (dolaysylayorumlanmasn da imkansz hale getirir)

    token:

    Programn szdizimsel yapsnn temel elerinden biri, doal dillerdekikelimeye benzetilebilir.

    1.11 Altrmalar1. Anlalabilir anlama sahip ama szdizimsel olarak yanl olan Trke bir

    cmle yaznz. Szdizimsel olarak doru ancak anlambilimsel hatalara sahipbir baka cmle yaznz.

    2. Python kabuunu balatn. 1 + 2 yazp Giri tuuna basn. Python bu ifadeyideerlendirir, sonucu ekranda gsterir ve baka bir bilgi istemi yazar. *

    arpma ilecidir, ve ** s alma ilecidir. Farkl ifadeler girerek deneyin,Python yorumlaycsnn sonularn kaydedin. / ilecini kullandnzda neoluyor? Sonular beklediiniz gibi mi? Aklaynz.

    3. 1 2 yazp Giri tuuna basn. Python bu ifadeyi deerlendirmeye alr,ancak yapamaz nk bu ifade szdizimsel olarak geerli deildir. Yerineaadaki hata mesajn gsterir:

    File "", line 1 1 2 ^SyntaxError: invalid syntax

    ou durumda, Python szdizimi hatasnn nerede olduunu belirtir, ancakbu her zaman iin doru deildir, ve neyin yanl olduuna dair yeterincebilgi vermeyebilir. Bu yzden, genellikle, szdizimi kurallarn renmekzerinizdeki yktr.

    Bu rnekte, Python numaralar arasnda ile olmad iin ikayetetmektedir.

    15

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    17/207

    Python bilgi isteminde yazdnzda hata mesajna neden olacak ifadernei daha retiniz. Her rettiiniz ifadenin Python szdizimi asndanneden geerli olmadn aklaynz.

    4. print 'merhaba' yaznz. Python bu cmleyi yrtecektir, m-e-r-h-a-b-aharflerini ekranda gstermek gibi bir etkisi olacaktr. Ekranda gsterilenifadede, cmlede kullandnz trnak iaretlerinin olmadna dikkat edin.

    imdi print '"merhaba"' yazp, sonucu tanmlayp, aklaynz.5. print peynir ifadesini trnak iaretleri olmadan yazn. kt aadaki gibi bir

    ey olacaktr:

    Traceback (most recent call last): File "", line 1, in ?NameError: name 'peynir' is not defined

    Bu bir alma zaman hatasdr, NameError hatasdr, isimsel bir hatadrnk peynir ismi tanmlanmamtr. Bu ne anlama geliyor bilmiyorsanz,yaknda reneceksiniz.

    6. Python bilgi isteminde 'Bu bir testtir...' yazp Giri tuuna basn. Ne olduunukaydedin. imdi test1.py isminde bir betik oluturun ve aadaki ieriibetiin iine yazn (altrmadan nce kaydetmeyi unutmayn):

    'Bu bir testtir...'

    Bu betii altrdnzda ne oluyor? imdi ierii aadaki ekildedeitirin:

    print'Bu bir testtir...'

    ve tekrar altrn. Bu sefer ne oldu?

    Ne zaman bir deyim Python bilgi istemine yazlrsa, deerlendirilir ve sonuekranda bir satr aaya yazlr. 'Bu bir testtir...' bir deyimdir, 'Bu birtesttir...' eklinde deerlendirilir (42 deyiminin 42 eklinde deerlendirilmesigibi). Bir betikte ise, deyimlerin deerlendirilmesi program ktsnagnderilmez, bu yzden aka ekranda gsterilmesinin gerektiibelirtilmelidir.

    2. Deikenler, deyimler ve cmleler

    2.1 Deerler ve tiplerDeer programn iledii temel eylerden - harf veya rakam gibi - biridir. imdiyekadar grdmz deerler 2 (1 + 1 ileminin sonucu), ve"Merhaba, Dnya!".

    Bu deerler farkl tiplere aittir: 2 bir tamsay (integer)dr, ve "Merhaba, Dnya!"bir karakter dizisi (string)dir, nk karakterlerden oluan bir dizidir. Siz (ve

    16

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    18/207

    yorumlayc) karakter dizilerini ayrtedebilir, nk trnak iaretleri arasndayazlmtr.

    print cmlesi tamsaylar iin de alr.

    >>> print 44

    Eer bir deerin tipinden emin deilseniz, yorumlayc bunu size syleyebilir.

    >>> type("Merhaba, Dnya!")>>> type(17)

    Srpriz olmayacak ekilde, karakter dizisi str tipine ve tamsaylar da int tipineaittir. Ayrca, ondalk basamaa sahip saylar float adnda bir tipe ait olacaktr,nk bu saylar kayan noktal (floating point) biiminde temsil edilmektedir.

    >>> type(3.2)

    Peki "17" ve "3.2" eklinde ifadelerin tipi nedir? Say gibi gzkmektedirler, ancakkarakter dizileri gibi trnak iaretleri arasndalar.

    >>> type("17")>>> type("3.2")

    Onlar da karakter dizisidir.

    Python'da karakter dizileri tek trnak (') veya ift trnak (") arasna alnabilir:>>> type('Bu bir karakter dizisidir.')>>> type("Bu da yle.")

    ift trnakl karakter dizileri "Emre'nin sakal" rneinde olduu gibi tek trnak, vetek trnakl karakter dizileri '"Ni!" syleyen valyeler'rneindeki gibi ift trnakierebilir.

    Byk bir tamsay yazdnzda, l rakam gruplar arasnda 1,000,000 rneinde

    olduu gibi virgl kullanmak isteyebilirsiniz. Bu Python iin geerli bir tamsaygsterimi deildir, ancak geerli bir ifadedir:

    >>> print 1,000,0001 0 0

    17

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    19/207

    Bu beklediimiz bir sonu deil! Python 1,000,000 ifadesini e ieren bir listeeklinde yorumlar ve o ekilde ekranda grntler. Bu yzden tamsaylardarakamlar arasnda virgl kullanmamay unutmamalsnz.

    2.2 Deikenler

    Programlama dilinin en gl zelliklerinden birisi deikenleri deitirebilme(adndan anlalaca gibi ) yeteneidir. Bir deiken bir deeri tutan bir isimdir.

    Atama cmlesi yeni bir deiken yaratr ve deerlerini atar:

    >>> mesaj = "Naber, doktor?">>> n = 17>>> pi = 3.14159

    Bu rnek atama gerekletirmektedir. lk atama mesaj isimli yeni yaratt birdeikene "Naber, doktor?" karakter dizisini atar. kinci atama ndeikenine, 17tamsay deerini ve son atama pi deikenine 3.14159 kayan noktal say deerini

    verir.Atama ileci, =, "eittir" iaretiyle (ayn karakteri kullansa da) kartrlmamaldr.Atama ileleri isim , ilecin sol taraf, ve deer , ilecin sa taraf, ifadelerinibirbirine balar. Bu yzden aadaki ifadeyi yazdnzda hata mesajylakarlarsnz:

    >>> 17 = n

    Deikenleri kat stnde gstermenin genel bir yolu deiken isminden bir okkarp deerini iaret etmektir. Bu eit gsterime durum diyagram denilir,nk her bir deikenin durumunu gsterir (deikenin ruh hali olarak dadnebilirsiniz). Bu diyagram atama cmlelerinin sonularn gsterir:

    print cmlesi deikenlerle de alr.

    >>> print mesajNaber, doktor?>>> print n17

    >>> print pi3.14159

    Her bir durumda sonu deikenin o an ki deeridir. Deikenler de tipleresahiptir; yorumlaycya tiplerini sorabiliriz.

    >>> type(mesaj)

    18

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    20/207

    >>> type(n)>>> type(pi)

    Deikenin tipi referans ettii deerin tipidir.

    2.3 Deiken isimleri ve anahtar kelimelerProgramclar deikenleri iin genellikle anlaml isimler seerler, bylecekullandklar deikenleri ne iin kullanldklarna dair belgelendirmi olurlar.

    Deiken isimleri istee bal olarak uzun olabilir. Hem harf hem de rakamierebilir, ancak mutlaka bir harfle balamalar gerekir. Her ne kadar byk harfkullanmak geerli olsa da, geleneksel olarak kullanmayz. Unutulmamas gerekenharfin byk veya kk olmas farkl eylerdir.Emreve emre farkl deikenlerdir.

    Altizgi karakteri (_) bir isimde yeralabilir. Genellikle birden fazla harf ierenkelimelerde kullanlmaktadr, benim_ismim veya cinde_cayin_fiyatieklinde.

    Eer deikene geerli olmayan bir isim verirseninz, bir szdizimi hatasylakarlarsnz:

    >>> 76trombones = "big parade"SyntaxError: invalid syntax>>> more$ = 1000000SyntaxError: invalid syntax>>> class = "Computer Science 101"SyntaxError: invalid syntax

    76trombones geersizdir nk harf ile balamamaktadr. more$ geersizdir nkgeersiz bir karakter iermektedir, dolar iareti. Peki classisminin sorunu nedir?

    class isminin Python tarafndan kullanlan anahtar kelimelerden biri olduuortadadr. Anahtar kelimeler genellikle dilin kural ve yapsn tanmlarlar, vedeiken isimleri olarak kullanlamazlar.

    Python otuz bir adet anahtar kelimeye sahiptir (bu kelimeleri deiken ismi olarakkullanamazsnz):

    and del from not whileas elif global or with

    assert else if pass yield

    break except import print

    class exec in raise

    continue finally is return

    19

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    21/207

    def for lambda tryBu listeyi aklda tutmal veya gerektiinde eriebileceiniz bir yerde olmaldr. Eeryorumlayc deikenlerinizden birinin isminden ikayet eder ve siz nedeninibulamazsanz, bir de deikenlerinizi bu listeye gre kontrol edersiniz.

    2.4 CmlelerCmle Python yorumlaycs tarafndan ilenebilecek bir ynergedir (komuttur).imdiye kadar iki cmle grdk: print ve atama cmleleri.

    Bir cmleyi komut satrna yazdnzda, Python cmleyi yrtr ve sonucugsterir, eer bir sonu varsa. print cmlesinin sonucu bir deerdir. Atamacmleleri herhangi bir sonu retmez.

    Betik genellikle pepee gelen cmlelerden oluur. Eer birden fazla cmle varsa,sonular cmleler teker teker ilendii iin teker teker gzkrler (ilgili cmleyrtlnce ilgili sonu - eer varsa - grntlenir)

    rnein, aadaki betik:

    print 1 x = 2 printx

    u kty retir:

    12

    Yine tekrar etmek gerekir, atama cmlesi herhangi bir kt retmez.

    2.5 Deyimleri deerlendirmeBir deyim deerlerden, deikenlerden ve ilelerden oluan bir yapdr. Eer birdeyimi komut satrna yazarsanz, yorumlayc deyimideerlendirir ve sonucugsterir:

    >>> 1 + 12

    Deyimi deerlendirme bir deer retir, bu nedenle deyimler atama ilecinin satarafndan kullanlabilir. Deer de basit bir deyimdir, deiken de yle.

    >>> 1717>>> x2

    20

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    22/207

    Kartrmamak gerekir, bir deyimi deerlendirmek, deeri ekranda gstermek ileayn ey deildir.

    >>> message = "Naber, doktor?">>> mesaj

    "Naber, doktor?">>> print mesajNaber, doktor?

    Python kabuu bir deyimin deerini ekranda gsterirken, deer girmek iinkullanacanz ayn biimi kullanr. Karakter dizileri kullandnz varsayarsak,grntlemede trnak iaretlerini kullandn grebiliriz. Ancak print cmlesideyimin deerini ekranda gsterir, bu durumda karakter dizisinin ieriinigsterecektir.

    Betik ierisinde, deyim kendi bana geerli bir cmledir, ancak hibir ey yapmaz.

    Betik 17 3.2 "Merhaba, Dnya!" 1 + 1

    herhangi bir kt retmez. Bu betii nasl deitirmeliyiz ki, bu drt deyimindeeri ekranda gsterilsin?

    2.6 leler ve ilenenlerleler toplama, arpma, vb. hesaplamalar temsil eden zel sembollerdir.leler tarafndan kullanlan deerler ilenen adn almaktadr.

    Aadakilerin hepsi geerli (anlam ak veya tam ak olmayan) Pythondeyimleridir:

    20+32 hour-1 hour*60+minute minute/60 5**2 (5+9)*(15-7)

    +, -, ve / sembolleri ve gruplama iin parantez kullanm Python'da damatematikteki anlamlaryla kullanlmaktadr. Yldz iareti (*) arpmann ve**iareti de s almann sembolleridir.

    Bir ilenenin yerinde deikenin ismi yer aldnda, ilem yaplmadan nce budeiken deeriyle deitirilir.

    Toplama, karma, arpma ve s alma ilemleri neyi bekliyorsanz onu yapanilemlerdir. Ancak blme ilemine arabilirsiniz. Aadaki rnek beklemediinizbir sonu retecektir:

    21

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    23/207

    >>> dakika = 59>>> dakika/600

    dakika'nn deeri 59'dur ve 59, 60 ile blndnde sonu 0.98333 olmaldr, 0deil. Python'da bu farkl sonucun ortaya kmasnn nedeni yukardaki rnektetamsay blme ileminin uygulanmasdr.

    Eer her iki ilenen de tamsay ise, sonuta bir tamsay olmaldr, ve gelenekselolarak tamsay blme ilemi her zaman aa yuvarlanr, hatta rnekte olduu gibitamsaylarn birbirine ok yakn olduu durumlarda dahi.

    Bu soruna olas bir zm kesir yerine yzdeyi hesaplamaktr:

    >>> dakika*100/6098

    Yine grlecei zere, sonu aa yuvarlanmtr ama en azndan imdi yaklakolarak doru bir sonu elde edebildik. Bir baka zm noktal kayan (floating-point) blme ilemini kullanmaktr. Drdnc blmde tamsay deerleri vedeikenleri kayan noktal deerlere dntrmeyi greceiz.

    2.7 lelerin srasEer bir deyim ierisinde birden fazla ile varsa, bu ilelerin deerlendirilmesras ncelik kurallarna gre belirlenir. Python matematikteki ncelik sraskurallarnn aynsn kullanr. PBT (komik olduunu biliyorum) ksaltmas bukurallar hatrlamak iin kullanlabilecek bir ksaltmadr:

    1. Parantezler en yksek ncelie sahiptir ve deyimlerin hangi sradadeerlendirilmesine ynelik ayarlamalar yapmanz salarlar. Parantezierisindeki deyimler daha nce deerlendirildii iin, 2 * (3-1) 4, ve(1+1)**(5-2) 8'dir. Parantezleri ayrca deyimleri daha kolay okumak iinkullanabilirsiniz, (minute * 100) / 60 rneinde olduu gibi, sonucu dadeitirmemi olursunuz.

    2. s alma daha az ncelie sahiptir, 2**1+1 ifadesi 3'tr 4 deil, ve 3*1**3ifadesi de 3'tr 27 deil.

    3. arpma ve Blme ayn ncelie sahiptir, ve Toplama ve karmadan (kibunlar da ayn ncelie sahiptir) yksek nceliklidir. 2*3-1ifadesi 4 yerine 5retir, ve 2/3-1 ifadesi -1'dir, 1 deil (tamsay blmede 2/3=0 olduunuhatrlayalm).

    4. Ayn ncelie sahip ilelerin deerlendirilmesinde soldan saa kural izlenir.dakika*100/60 ifadesinde, arpma ilemi nceliklidir 5900/60 sonucuna yolaar, bu ifade de 98'i retir. Eer ileler sadan sola deerlendirilecekolsayd sonu 59*1 olacaktr, bu da 59'u, yanl bir sonucu retecekti.

    22

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    24/207

    2.8 Karakter dizisi zerindeki ilemlerGenel olarak, karakter dizileri zerinde matematiksel ilemler uygulanamaz, herne kadar karakter dizileri say gibi gzkse de. Aadaki deyimler geersizdeyimlerdir (mesaj'n karakter dizisi (string) tipinde olduunu varsayalm):

    mesaj-1 "Merhaba"/123 mesaj*"Merhaba" "15"+2

    Ancak, + ileci karakter dizileriyle almaktadr, ancak beklediiniz sonucuretmemektedir. Karakter dizileri iin, + ileci birletirme (concatenation) ,bunun anlam iki karakter dizisini u uca balamaktr, ilemini yapacaktr. rnein:

    meyve = "muz" iyi_pisirilmis = " fndk ekmei" print meyve + iyi_pisirilmis

    Bu programn kts muz fndk ekmei olacaktr. fndk'tan nceki boluk karakter

    dizisinin bir parasdr, ve birletirme ileminde birletirilen karakter dizileriarasnda boluk olmasn salyor.

    * ileci de karakter dizileri zerinde alr. Tekrarlama ilemini gerekletirir.rnein 'Elence'*3 ifadesi 'ElenceElenceElence' sonucunu retecektir.lenenlerden biri karakter dizisi, dieri de tamsay olmaldr.

    Dier taraftan, + ve * ileleri toplama ve arpma benzerliiyle daha rahatanlalabilir. 4*3 rneinin 4+4+4 ifadesine eit olmas gibi, karakter dizilerindede 'Elence'*3 ifadesinin 'Elence'+'Elence'+'Elence' ifadesine eit olmasnbekliyoruz ve eittir. Ancak, karakter dizisi birletirme ve tekrarlamasnn tamsaytoplama ve arpmasna gre nemli bir fark vardr. Toplama ve arpma ileminin

    sahip olduu ancak karakter dizisi birletirme ve tekrarlama ileminin sahipolmad bir zellik dnebiliyor musunuz?

    2.9 GirdiKlavyeden girdi alabilmek iin Python ierisinde tanml iki fonksiyon vardr:

    n = raw_input("Ltfen isminizi giriniz: ") print n n = input("Nmerik bir ifade giriniz: ") print n

    Bu betiin altrlmas aadaki gibi bir sonu retecektir:

    $ python tryinput.pyLtfen isminizi giriniz: Arthur, ngiltere KralArthur, ngiltere KralNmerik bir ifade giriniz: 7 * 3

    23

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    25/207

    21

    Her bir fonksiyon parantez ierisinde verilmi ifadenin gsterilmesini salar.

    2.10 Kompozisyonimdiye kadar programn elerini - deikenler, deyimler, ve cmleler - ayr ayrinceledik, bunlar nasl birletireceimizden bahsetmedik.

    Programlama dillerinin en kullanl zelliklerinden biri kk yapsal bloklarretmek ve bunlar birletirebilme (kompozisyon) zelliidir. rnein, saylar naslekleyeceimizi ve ekranda deeri nasl gstereceimizi biliyoruz; bu ikisinibirletirerek ayn anda gerekletirebiliriz:

    >>> print 17 + 320

    Gerekte, toplama ilemi grntlemeden nce yaplmaldr, bu yzden eylemlerayn anda olmamaktadr. Buradaki nemli nokta; saylar, karakter dizilerini vedeikenleri ieren herhangi bir deyim print cmlesi iinde kullanlabilir. Bununrneklerini daha nce grmtnz:

    print"Geceyarsndan beri geen dakika: ", saat*60+dakika

    stee bal olarak baz deyimleri atama cmlesinin sanda kullanabilirsiniz:

    yuzde = (dakika * 100) / 60

    Bu zellik u an etkileyici grnmeyebilir, ilerleyen srete kompozisyonun nekadar etkili olabileceini karmak hesaplamalar temiz ve ksaca yapabildiinizdegreceksiniz.

    Uyar: Baz deyimleri kullanmanza ynelik olarak kstlamalar vardr. rnein,atama cmlesinin sol taraf mutlaka deiken ismi olmaldr, deyim olamaz. Buyzden, aadaki geersiz bir ifadedir: dakika + 1 = saat.

    2.11 Yorumlar

    Programlar byyp, karmaklatka okunmas zorlamaktadr. Biimsel dilleryoundur ve kaynak kodun bir parasna bakp ne yaptn veya neden bunuyaptn anlamak olduka zordur.

    Bu nedenle, programlara kodu aklayan doal dilde notlar ve aklamalar yazmakiyi bir fikirdir. Bu notlara yorumlar ad verilmektedir, ve #iaretiyle belirtilir:

    # gecen saatin yuzdesini hesaplayalim

    24

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    26/207

    yuzde = (dakika * 100) / 60

    Bu durumda yorum bir satr eklinde gzkr. Yorumlar ayrca satr sonuna dayerletirilebilir:

    yuzde = (dakika * 100) / 60 # dikkat: tamsayi bolme

    # iaretinden itibaren satr sonuna kadar her ey yoksaylr - program zerinde biretkisi yoktur-. Yorumlarn amac ileride program okuyacak ve inceleyecekprogramclar iindir. Bu durumda, okuyucuya tamsay blme durumunu hatrlatmagrevi stlenmitir.

    2.12 Szlkdeer:

    Bir deikende saklanabilecek veya bir deyimde hesaplanacak bir say veya

    karakter dizisidir (veya daha sonra isimlendirilecek bir ey).tip:

    Deerler kmesidir. Bir deerin tipi, deyimler ierisinde nasl kullanabileceinibelirler. u ana kadar grdnz deerler tamsaylar (inttipi), kayan noktalsaylar (float tipi) ve karakter dizileridir (string tipi).

    int:Pozitif ve negatif tam saylar tutan Python veri tipidir.

    str:Karakter dizisi (string) tutan Python veri tipidir.

    float:Kayan noktal saylar saklayan Python veri tipidir. Kayan noktal saylar isel

    olarak iki para eklinde saklanr: bir taban ve bir st. Standart biimdegrntlendiinde, ondalk saylar gibi gzkrler. float kullandnzdayuvarlama hatalarna dikkat etmeniz gerekmektedir, ve yaklak deerbarndrrlar.

    deiken:Bir deeri temsil eden isimdir.

    atama cmlesi:Bir isime (deikene) deer atayan cmledir. Atama ilecinin , =, sol taraf birisimdir. Atama ilecinin sa taraf ise Python yorumlaycs tarafndandeerlendirilecek ve isime atanacak deeri retecek deyimdir. Atamailecinin sol ve sa taraflar arasndaki fark genellikle yeni programclarn

    kafasn kartrabilir. Aadaki atamada:

    n = n + 1

    25

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    27/207

    n deikeni = ilecinin iki tarafnda farkl grevler stlenir. Sa tarafta birdeerdir ve Python yorumlaycs tarafndan sol taraftaki isme atanmadannce deerlendirilecek deyimin bir ksmn oluturur.

    atama ileci:= Python'un temel atama ilecidir, ayn iareti kullanan matematikselkarlatrma ileci ile kartrlmamaldr.

    durum diyagram:Deikenlerin ve referans ettikleri deerlerin grafiksel bir gsterimidir.deiken ismi:

    Bir deikene verilen isimdir. Python'da deiken isimleri bir harf ile balayanharf (a..z, A..Z ve _) ve saylardan (0..9) serilerinden oluur. En iyiprogramlama pratiinde deiken isimleri program ierisindeki kullanmlarnanlatacak ekilde seilir, bylece program iin z belgeleme yapm olur.

    anahtar kelime:Derleyici tarafndan program ayrtrmak iin ayrlm kelimelerdir; anahtarkelimelerini - if, def, ve while gibi - deiken isimleri olarak kullanamazsnz.

    cmle:

    Python yorumlayc tarafndan yrtlebilecek ynergedir (komuttur).Cmlelerin rnekleri atama cmleleri ve print cmlesini ierir.deyim:

    Tek bir sonu deeri temsil eden deiken, ile ve deerlerin birkombinasyonudur.

    deerlendirme:Bir deyimi basitletirmek ve tek bir deer retmek iin srasyla ilemlerigerekletirmektir.

    ile:Toplama, arpma veya karakter dizisi birletirme gibi tek bir hesaplamaytemsil eden zel iarettir.

    ilenen:lecin zerinde ilem yapt deerlerden biridir.tamsay blme:

    Bir tamsayy baka bir tamsay ile blp, tamsay deer reten ilemdir.Tamsay blme sadece blnenin blende ka kere getiini bulan tam saylarretir, kalan yoksayar.

    ncelik kurallar:ok sayda ile ve ilenen ieren deyimlerin deerlendirilme srasnbelirleyen kurallar kmesidir.

    birletirme:ki ilenen u uca eklemedir.

    kompozisyon:Basit deyimleri ve cmleleri, karmak hesaplamalar temsil etmek iin biraraya getirip bileik cmleler ve deyimler oluturma zelliidir.

    yorum:Program ierisinde dier programclar (veya kaynak kodu okuyan herhangibiri iin) yazlm olan bilgilerdir ve programn almas zerinde bir etkisiyoktur.

    26

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    28/207

    2.13 Altrmalar1. Aadaki atama cmlelerini altrdnzda olanlar kaydedin:

    >>> print n = 7

    Peki bu?>>> print 7 + 5

    Ya bu?

    >>> print 5.2, "bu", 4 - 2, "u", 5/2.0

    print cmlesi iin genel bir kural dnebiliyor musunuz? print cmlesi nedndrmektedir?

    2. Tm i ve oyun oynamama Mustafa'y anlaysz yapmaktadr cmlesini elealn ve her kelimeyi farkl bir deikende saklayn, son olarak cmleyi tek birprint cmlesi yardmyla tek satrda yazdrn.

    3. 6*1-2 ifadesine parantez ekleyerek deerini 4'ten -6'ya dntrn.4. Daha nce alm bir koda yorum ekleyerek tekrar altrn, ve sonucu

    inceleyin.5. input ve raw_input arasndaki fark input girdi karakter dizisini

    deerlendirirken, raw_input deerlendirmemektedir. Aadakileriyorumlaycda snayn ve sonucu inceleyin:

    >>> x = input()3.14

    >>> type(x)

    >>> x = raw_input()3.14>>> type(x)

    >>> x = input()'The knights who say "ni!"'>>> x

    Aadakini trnak iaretleri olmadan denerseniz ne olur?

    >>> x = input()The knights who say "ni!">>> x

    27

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    29/207

    >>> x = raw_input()'The knights who say "ni!"'>>> x

    Her sonucu anlatn ve aklayn.6. Python yorumlaycsn balatn ve bruce+4 ifadesini bilgi istemine girin. Bu

    size bir hata verecektir:

    NameError: name 'bruce' is not defined

    bruce ismine bir deer atayn, bylece bruce + 4 10 deerini retebilsin.7. smi madlib.py bir program (Python betii) yazn, bu program kullancdan

    pepee isimler, yklemler, tmleler, sfatlar, oul isimler, gemi zamanyklemleri, vb. cmle eleri istesin ve daha sonra bu girilen ifadeleriszdizimi olarak doru ancak anlambilimsel olarak yanl bir paragraf retsin(rnekler iin http://madlibs.org adresini inceleyebilirsiniz).

    3. Fonksiyonlar

    3.1 Tanmlar ve kullanmProgramlama balamn, bir fonksiyon (ilev) belli bir ilemi gerekletirmekzere isimlendirilmi cmle (komut) serisidir. Bu ilem fonksiyon tanmndabelirlenmitir. Python'da, fonksiyon tanm iin szdizimi u ekildedir:

    defISIM( PARAMETRELISTESI ):

    CUMLELER

    Fonksiyonlar iin dilediiniz ismi kullanabilirsiniz, ancak deikenlerde de olduugibi Python anahtar kelimelerini kullanamazsnz. Parametre listesi fonksiyontarafndan kullanlmas gereken, varsa, bilgileri belirtmek iin kullanlr.

    Fonksiyon ierisinde herhangi sayda cmle bulunabilir, ancak def'e gre dahaierden balamalar gerekiyor. Bu kitaptaki rneklerde standart ieriden balama(indentation - girinti) olan drt boluk kullanlacaktr. Fonksiyon tanmlamalarbileik cmlelerin ilk rneidir, ileride de anlalaca gibi hepsinin kalb ayndr:

    1. Bir balk, bir anahtar kelime ile balar ve iki nokta st ste ile biter

    2. Bir gvde, bir veya daha fazla Python cmlesi ierir ve herbiri bala greeit oranda ieriden - Python standart 4 boluk karakteridir - balar.

    Bir fonksiyon tanmlamasnda, balktaki anahtar kelime deftir, bu ifade dahasonra fonksiyon ismi ve parantezlerle snrlanm parametrelerle izlenir. Tanmnsonunda iki nokta st ste vardr. Parametre listesi bo olabilir veya herhangi birsayda parametre ierebilir. Her iki durumda da parantezler olmazsa olmazdr.

    28

    http://madlibs.org/http://madlibs.org/
  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    30/207

    Yazacamz ilk fonksiyon rnekleri parametre iermeyecektir, bu yzden szdizimiu ekildedir:

    defyeni_satir(): print # herhangi bir arguman almayan print cumlesi yenibir satir yazar

    Bu fonksiyon yeni_satir ismindedir. Bo parantezler parametre almadn gsterir.Gvdesinde sadece bir cmle vardr, bu cmle yeni satr karakterini ekrandagstermektedir (bunun anlam bir bo satr braklmasdr, bo bir print cmlesikullanldnda oluan durumdur).

    Yeni bir fonksiyon tanmlamak o fonksiyonun almasn salamaz. Fonksiyonualtrabilmemiz iin bir fonksiyon ars yapmamz gerekir. Fonksiyonarlar, altrlacak fonksiyonun ismi ve onu takip eden parantez ierisindekifonksiyona aktarlacak olan deer listesinden - bunlara argman ad verilir -oluur. Bu argmanlar fonksiyon tanmndaki parametrelere elenir. lkrneklerimiz, bo parametre listesine sahip olduu iin, arlarmzda argmangndermeyeceiz. Ancak yine de parantezleri - ii bo olsa da - yazmaya devamedeceiz:

    print"lk satr."yeni_satir()print"kinci satr."

    Programn kts:

    lk satr.

    kinci satr.

    ki satr arasndaki ek boluk, yeni_satir() fonksiyon arsnn bir sonucudur. Eersatrlar arasnda daha fazla boluk isteseydik ne yapacaktk? Ayn fonksiyonutekrar tekrar aracaktk:

    print"lk satr."yeni_satir()yeni_satir()yeni_satir()print"kinci satr."

    Veya yeni satr yazan uc_satir isminde yeni bir fonksiyon yazabilirdik:

    defuc_satir(): yeni_satir() yeni_satir() yeni_satir()

    print"lk satr."uc_satir()

    29

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    31/207

    print"kinci satr."

    Bu fonksiyon cmle iermektedir, ve herbir cmle drt boluk karakteriieriden balamaktadr. Sonraki satr ieriden balamad iin Python onunfonksiyonun bir paras olmadn anlayacaktr.

    Bu program hakknda bir ka ey dikkatinizi ekmi olmal:

    Ayn yordam tekrar tekrar arabilirsiniz. Gerekte, bu ok olaandr veyapmanz yararldr.

    Bir fonksiyon arsnn, bir baka fonksiyonu armasn salayabilirsiniz;bu durumda uc_satir fonksiyonu yeni_satir fonksiyonunu armtr.

    imdiye kadar bu yeni fonksiyonlar yazmak iin neden bu kadar zahmetekatlandmz anlamam olabilirsiniz. Aslnda olduka fazla neden vardr,aadaki rnek iki nedeni gsterecektir:

    1. Yeni bir fonksiyon yaratma, size cmle gruplarna bir isim verme ans verir.Fonksiyonlar karmak hesaplamalar tek bir komutun arkasna saklayarakve ad kark komutlar yerine anlaml isimlere (Trke, ngilizce) sahip

    komutlar kullanmanz salayarak program basitletirirler.2. Yeni fonksiyonlar yaratmak programnz kltebilir. Fonksiyonlar tekrar

    eden kodlarn elenmesini salar. rnein, dokuz kere ekrana bo satryazacak komut yerine uc_satir fonksiyonunu kere ararak daha az kodyazm olursunuz.

    nceki kod paralarn biraraya getirip tryme1.py isimli bir betik ierisineyazdmzda, tm program aadaki gibi gzkecektir:

    defyeni_satir(): print

    defuc_satir(): yeni_satir() yeni_satir() yeni_satir()

    print"lk satr."uc_satir()print"kinci satr."

    Bu program iki fonksiyon tanmlamas iermektedir: yeni_satir ve uc_satir.Fonksiyon tanmlamalar dier cmleler gibi altrlrlar. Bu etkisi yeni bir

    fonksiyon yaratlmas eklindedir. Fonksiyon ierisindeki cmleler fonksiyonarm yapmadan iletilmezler ve fonksiyon tanmlamas herhangi bir ktretmez.

    Tahmin edebileceiniz gibi, bir fonksiyonu altrmadan nce yaratmanz gerekir.Baka bir ekilde aklayacak olursak, fonksiyon tanmlamas fonksiyonun ilkarsndan nce almaldr.

    30

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    32/207

    3.2 Yrtme akFonksiyonun ilk kullanmndan nce tanmlandndan emin olmak iin, cmlelerinyrtlme srasn bilmeniz gerekir, bu sraya yrtme ak (flow ofexecution) ad verilmektedir.

    Yrtme her zaman programn ilk satryla balar. Cmleler her seferinde biri

    olmak zere yukardan aaya doru srayla altrlr.Fonksiyon tanmlamalar programn yrtme akn deitirmezler, ancakfonksiyon ierisindeki cmlelerin fonksiyon arlana kadar yrtlmediiniunutmayn. Her ne kadar sklkla kullanlan bir yntem olmasa da, bir fonksiyonierisinde baka bir fonksiyon tanmlayabilirsiniz. Bu durumda ierideki fonksiyontanm, ierisinde tanmland fonksiyon arlana kadar yrtlmeyecektir.

    Fonksiyon armlar yrtme akndaki sapmalar gibidir. Sonraki cmleye gitmekyerine, ak arlan fonksiyon ierisindeki ilk cmleye atlar, fonksiyondaki tmcmleleri altrr daha sonra brakt yere (fonksiyonun arld satr) dner.

    Bu her ne kadar kolaym gibi grnse de, bir fonksiyonun baka bir fonksiyonuarabildiini dndnzde bu sapmalarn bir sre sonra takibi zorlaabilir.Dnn ki, bir fonksiyonun ortasndayken bir baka fonksiyon arlabilir. Ayrcabu yeni arlan fonksiyon ierisinde de bir baka fonksiyon ierisindeki cmlelerinyrtlmesine ihtiya duyulabilir. Bu byle gider!

    ansmz var ki, Python nerede kaldn tutmada olduka beceriklidir, bylece herfonksiyon yrtlmesi bittiinde, program kald yere geri dner. Programnsonuna geldiinde program sonlandrr.

    Bu sefil hikayenin anafikri nedir? Bir program okuduunuzda, ne yukardanaaya doru ne aadan yukarya doru okumayn. Bunun yerine, yrtmeakn takip edin.

    3.3 Parametreler, argmanlar, ve import cmlesiou fonksiyon argmanlara gereksinimi duyar, bu deerler fonksiyonun greviniyaparken kulland ve bir bakma bu grevi nasl yapacan belirlerler. rnein,bir saynn mutlak deerini bulmak istiyorsanz, hangi saynn mutlak deerinibulmak istediinizi belirtmeniz gerekir. Python bu i iin ierisinde mutlak deerhesaplayan bir fonksiyon barndrr:

    >>> abs(5)5

    >>> abs(-5)5

    Bu rnekte, abs fonksiyonuna gnderdiimiz argmanlar 5 ve -5'tir.

    Baz fonksiyonlar birden fazla argman alabilir. rnein Python ierisinde tanmlpow fonksiyonu iki argman alr, taban ve s. Fonksiyonun ierisinde bu deerlerparametre ad verilen deikenlere atanrlar.

    31

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    33/207

    >>> pow(2, 3)8>>> pow(7, 4)2401

    Birden fazla argman alan bir baka varolan fonksiyon max'tr.

    >>> max(7, 11)11>>> max(4, 1, 17, 2, 12)17>>> max(3*11, 5**3, 512-9, 1024**0)503

    max fonksiyonuna virgllerle ayrlm dilediiniz sayda argman gnderebilirsiniz.Gnderilen argmanlar arasndan en byk sayy bulup geri dndrecektir.Argmanlar basit deerler olabildii gibi deyim de olabilirler. Son rnekte 503dndrld, nk 33, 125 ve 1'den daha byktr (deyimler deerlendirilerek

    sonular fonksiyona geiyor).Kullanc tanml ve tek parametre ieren bir fonksiyon rnei:

    defiki_kere_yaz(bruce): print bruce, bruce

    Bu fonksiyon tek bir argman alr ve onu bruce isimli parametreye atar.Parametrenin deeri (bu noktada ne olduuna dair bir fikrimiz yok) iki kere yazlr,sonrasnda bir yeni satr ekranda gsterilir. bruce isminin seilmesinin nedeniparametrelere dilediiniz ismi verebileceinizi gstermek iindir. Elbette bruceisminden daha yaratc ve anlaml isimler semeniz kaynak kodun okunabilirlii

    asndan nemlidir.Etkileimli Python kabuu bize fonksiyonlarmz snamak iin elverili bir yolsalarlar. import cmlesini bir betik ierisinde tanmladmz fonksiyonlaryorumlayc oturumuna getirmek iin kullanabiliriz. Bunun nasl altn anlamakiin, iki_kere_yaz fonksiyonunun chap03.pyisimli bir betik ierisinde tanmlolduunu varsayalm. Etkileimli olarak snamak iin betii kendi Python kabukoturumumuza aktarrz::

    >>> from chap03 import *>>> iki_kere_yaz('Spam')Spam Spam

    >>> iki_kere_yaz(5)5 5>>> iki_kere_yaz(3.14159)3.14159 3.14159

    Bir fonksiyon armnda, argmann deeri ilgili parametreye fonksiyontanmlamasnda atanmaktadr. Gerekte bruce = 'Spam'

    32

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    34/207

    atamasiki_kere_yaz('Spam') arm yaplnca, bruce = 5 iki_kere_yaz(5) ve bruce= 3.14159 iki_kere_yaz(3.14159) arm yapldnda gerekleir.

    Yazlabilir herhangi bir argman iki_kere_yaz fonksiyonuna gnderilebilir. lkfonksiyon armnda, argman bir karakter dizisidir. kinci armda tamsay,nc armda kayan float tipindedir.

    sel (varolan) fonksiyonlar gibi iki_kere_yaz argman yerine deyim dekullanabiliriz:

    >>> iki_kere_yaz('Spam'*4)SpamSpamSpamSpam SpamSpamSpamSpam

    'Spam'*4 deyimi ilk nce deerlendirilip 'SpamSpamSpamSpam' eklindeiki_kere_yaz fonksiyonuna argman olarak geirilmektedir.

    3.4 KompozisyonMatematiksel fonksiyonlarda olduu gibi, Python fonksiyonlar da dizilebilir,

    bunun anlam bir fonksiyonun sonucu bir baka fonksiyona girdi olarak verilebilir.>>> iki_kere_yaz(abs(-7))7 7>>> iki_kere_yaz(max(3, 1, abs(-11), 7))11 11

    lk rnekte, abs(-7) deyimi 7 eklinde deerlendirilir ve iki_kere_yaz fonksiyonunaargman olarak verilir. kinci rnekte iki seviyeli bir dizme szkonusudur. lk olarakabs(-11) ifadesi 11 sonucunu rettii iin max(3,1,11,7) fonksiyonu 11 deeriniretir. Sonrasnda bu 11 deeriiki_kere_yaz(11) fonksiyonuna argman olarak

    geirilir ve sonu ekranda grntlenir.Ayrca deikenleri de argman olarak kullanabiliriz:

    >>> michael = 'Erik, yarm ar.'>>> print_twice(michael)Erik, yarm ar. Erik, yarm ar.

    Burada dikkat etmeniz gereken nemli bir nokta var. Argman olarak geirdiimizdeikenin isminin (michael) parametre ismi (bruce) ile bir ilgisi yok. arldyerde o deikenin isminin ne olduunun bir nemi yok, fonksiyon ierisinde(iki_kere_yaz) parametre ismi (bruce) kullanlmaktadr, herkesi bu isim (bruce) ilesesleniriz.

    3.5 Deikenler ve parametreler yereldirBir fonksiyon ierisinde bir yerel deiken yarattnzda, o deiken sadece ofonksiyon ierisinde varolur, fonksiyon dnda o deikeni kullanamazsnz.rnein:

    33

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    35/207

    defiki_kere_birlestir(part1,part2): cat = part1 + part2 iki_kere_yaz(cat)

    Bu fonksiyon iki argman alr, bu argmanlar birletirir ve sonucu iki kere ekrandagrntler. Bu fonksiyonu iki karakter dizisi ile arabiliriz:

    >>> chant1 = "Pie Jesu domine, ">>> chant2 = "Dona eis requiem.">>> iki_kere_birlestir(chant1, chant2)Pie Jesu domine, Dona eis requiem. Pie Jesu domine, Dona eis requiem.

    When iki_kere_birlestir bittiinde, cat deikeni yokedilir. Onu yazdrmayakalkrsak bir hata ile karlarz:

    >>> print catNameError: name 'cat' is not defined

    Parametreler de yereldir. rnein, iki_kere_yaz fonksiyonu dnda bruce ismiyletanml bir deiken yoktur. Kullanmaya kalkrsanz, Python yine ikayetedecektir.

    3.6 Yt diyagramlarHangi deikenlerin nerede kullanldn takip edebilmek iin, yt diyagramlarizmek faydal olabilir. Durum diyagramlar gibi, yt diyagramlar da herdeikenin deerini gsterir, ancak ayrca her deikenin ait olduu fonksiyonu dagsterirler.

    Her fonksiyon bir ereve ile temsil edilir. Bir ereve yan tarafnda fonksiyonun

    ismi ve ierisinde parametre ve deikenlerin bulunduu bir kutudur. nceki kodrneinin yt diyagram aadaki gibidir:

    Ytn sras yrtme akn gsterir. iki_kere_yaz iki_kere_birlestir tarafndanarlmtr ve iki_kere_birlestir __main__ (en stteki fonksiyonun zel ismidir)tarafndan arlmtr. Herhangi bir fonksiyonun dnda tanmladnzdeikenler __main__'e aittir.

    Her parametre ilgili argmanyla ayn deeri gsterir. Bu yzden, part1 chant1 ileayn deere, part2 chant2 ile ayn deere ve bruce cat ile ayn deere sahiptir.

    34

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    36/207

    Bir fonksiyon arm esnasnda bir hata oluursa Python fonksiyon ismini ve ofonksiyonu aran fonksiyonun ismini yazar, o fonksiyonu da aran fonksiyonismini, .... en stteki fonksiyona ulaana kadar tm arm yapan fonksiyonlaryazar.

    Bunun nasl altn grmek iin tryme2.py isminde ve ierii aadaki gibi olanbir betik yaratalm:

    defiki_kere_yaz(bruce): print bruce, bruce print cat

    defiki_kere_birlestir(part1,part2): cat = part1 + part2 iki_kere_yaz(cat)

    chant1 = "Pie Jesu domine, "chant2 = "Dona eis requim."iki_kere_birlestir(chant1, chant2)

    iki_kere_yaz fonksiyonu ierisine print cat cmlesini ekledik, ancak cat deikeniorada tanml olmad iin bu betik hata retecektir:

    Traceback (innermost last): File "tryme2.py", line 11, in cat_twice(chant1, chant2) File "tryme2.py", line 7, in cat_twice print_twice(cat) File "tryme2.py", line 3, in print_twice print catNameError: global name 'cat' is not defined

    Bu fonksiyon listesine geri izleme (traceback) ad verilmektedir. Hangi programdosyasnda, hangi satrda ve hangi fonksiyonlar iletirken hatann olutuuna dairbilgi verir. Ayrca hataya neden olan kod satrn da gsterir.

    Geri izleme ile yt diyagram arasndaki benzerlie dikkat edin. Bu bir rastlantdeil. Gerekte geri izlemenin bir baka ismi de yt izlemedir.

    3.7 Szlkfonksiyon (ilev):

    Baz faydal iler baarabilen isimlendirilmi cmle dizisidir. Fonksiyonlarparametre alabilir veya almayabilir, sonu retebilir veya retmeyebilir.

    fonksiyon tanm:Yeni bir fonksiyon yaratan cmledir, fonksiyonun ismini, parametrelerini veyrtecei cmleleri belirtir.

    bileik cmle:ki paradan oluan cmledir:

    35

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    37/207

    1. balk - cmlenin tipini belirleyen bir anahtar kelimeyle balar ve ikinokta stste ile biter.

    2. gvde - balktan eit oranda ieride yazlm olan bir veya daha fazlacmledir

    Bileik cmlenin szdizimi aadaki gibidir:

    anahtar_kelime deyim : cmle cmle ...

    balk:Bileik cmlenin ilk ksmdr. Bir anahtar kelime ile balar ve iki nokta st ste(:) ile biter.

    gvde:Bileik cmlenin ikinci ksmdr. Gvde balktan eit derecede ieridebalayan cmle dizilerinden oluur. Python topluluu tarafndan kullanlanstandart girinti 4 boluktur.

    fonksiyon arm:Fonksiyonu yrtmeye balatan cmledir. Fonksiyonun ismiyle balar veparantezler ierisindeki argmanlar (eer varsa) ile devam eder.

    yrtme ak:Bir programn almas srasnda cmlelerin yrtlmesi srasdr.

    parametre:Bir fonksiyon ierisinde kullanlan ve fonksiyona geirilen argman referanseden isim.

    ieri aktarma (import):

    Bir Python betii ierisinde tanmlanm fonksiyon ve deikenlerin baka bir

    betik ortamna veya Python kabuuna getirilmesi iin kullanlan cmledir.

    rnein, aadaki kodun tryme.py isimli bir betik ierisinde bulunduunudnelim:

    defprint_thrice(thing): print thing, thing, thing

    n = 42s = "And now for something completely different..."

    imdi tryme.py dosyasnn bulunduu dizin ierisinde bir Python kabuubalatalm:

    $ lstryme.py $ python>>>

    36

  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    38/207

    tryme.py ierisinde isim tanmlanmtr: print_thrice, n, and s. Eer ieaktarmadan (import) bu isimleri kullanmaya alrsak, bir hata oluur:

    >>> nTraceback (most recent call last): File "", line 1, in

    NameError: name 'n' is not defined>>> print_thrice("ouch!")Traceback (most recent call last): File "", line 1, in NameError: name 'print_thrice' is not defined

    tryme.py betiinden hereyi ie aktarrsak, ierisinde tanml hereyikullanabiliriz:

    >>> from tryme import *>>> n42>>> s'And now for something completely different...'>>> print_thrice("Yipee!")Yipee! Yipee! Yipee!>>>

    Dikkat etmeniz gereken nokta import cmlesinde .py uzantsnkullanmyorsunuz.

    argman:Bir fonksiyon arldnda, bu fonksiyona aktarlan deerdir. Bu deerfonksiyonda ilgili parametreye atanr.

    fonksiyon dizilimi (kompozisyon):Bir fonksiyon ktsn bir baka fonksiyona girdi olarak kullanmaktr.

    yerel deiken:Bir fonksiyon ierisinde tanml deikendir. Yerel deiken sadece kendifonksiyonu ierisinde kullanlabilir.

    yt diyagram:Fonksiyonlarn, deikenlerinin ve deikenlerin gsterdii deerleringrafiksel gsterimidir.

    ereve:Yt diyagramnda bir fonksiyon arsn temsil eden erevedir.Fonksiyonun yerel deikenleri ve parametrelerini ierir.

    geri izleme:Bir alma zaman hatas olutuunda alan fonksiyonlarn bir listesidir.Geri izleme ayrca yt izleme olarak ta adlandrlr. Bu listede fonksiyonlaralma zaman yt ierisindeki sraya gre bulunurlar.

    37

    http://en.wikipedia.org/wiki/Runtime_stackhttp://en.wikipedia.org/wiki/Runtime_stack
  • 7/31/2019 Think Python V2 -TURKCE-How to Think Like a Computer Scientist

    39/207

    3.8 Altrmalar1. Bir metin dzenleyici kullanarak tryme3.py bir Python betii yazn. Bu dosya

    ierisinde three_lines fonksiyonunu kullanarak dokuz bo satr retennine_lines isimli bir fonksiyon yazn. Daha sonra clear_screen isimli, ekrana25 adet bo satr yazp, ekran temizleyen fonksiyonu yazn. Programnzn

    son satrnda clear_screen fonksiyonuna bir ar yapmanz gerekiyor.2. tryme3.py programnn son satrn en ste tayn, clear_screenfonksiyonuna yaplan fonksiyon ars bylece fonksiyon tanmlamasndannce yaplm olacak. Program altrn ve ortaya kan hata mesajnkaydedin. Fonksiyon tanmlamalar ve fonksiyon arlar ile ilgili birbirlerinebal olarak kod ierisinde nerede bulunabileceklerine dair bir kuraloluturabilir misiniz?

    3. Hatasz alan bir tryme3.py kullanarak, new_line fonksiyon tanmlamasnthree_lines tanmlamasndan sonraya tayn. Bu program altrdnzdane olduunu gzlemleyin. imdi new_