10 Eylül 2017 Pazar

100 Adımda Python Programlama Kısım 3

PYTHON


51) Peki değişken atarken yanlışlıkla yukarıdaki yasak kelimelerden birini kullanırsak ne yapmamız gerekir? Bunun için komut penceresini yani etkileşimli kabuğu kapatıp açabilirsiniz, ya da aşağıdaki komutu kullanabilirsiniz. Örnek olarak len komutuna değişken atayalım ve sonra bu yanlıştan dönelim.

>>> len=5                        // 5 değerini len değişkenine atadık. (yapmamalıydık)
>>> len("elma")             // elma stringinin uzunluğunu ölçmeye kalktık ama hata aldık

Traceback (most recent call last):   
File "", line 1, in     
type("elma") 
TypeError: 'int' object is not callable

Şimdi bu hatadan dönüyoruz:

>>> del len                                                                   //işte bu kadar basit 
>>> len(“elma”)                                                          //her şey normale döndü. 
4

52) Bu arada değişken adlarında asla boşluk olmaz. Örnek;

>>>kullanıcı adı = “admin”              // yanlış
>>>kullanıcı_adı = “admin”             // doğru 


53) Bir sayının kuvvetini bulmak için aşağıdaki kodu yazın.

>>> 5**3                       //5’in 3. Kuvvetini hesaplayan kod, iki çarpı işareti yan yana                        125 

>>> pow(5,3)              //Diğer bir alternatif pow komutunu kullanmak
125 

54) Bir sayının karekökünü bulmak için aşağıdaki kodu yazın.

>>> 144**0.5                //Bir sayının 0.5. kuvveti o sayının kareköküdür  
12

55) Aşağıdaki kodun anlamı şudur. 11 sayısının 3. kuvveti olan 1331 sayısı 4‘e bölündüğünde kalan sayı 3’tür.

>>> pow(11,3,4) 3 

56) Bir değere iki veya daha fazla değişken atayabilirsiniz. Örnek;

>>> a=b=4                                     //hem a hem de b değişkenine 4 değerini atadık.                          >>> a+5
 9 
>>> b+5
 9 

57) Python’da değişken takası gerçekleştirebiliriz. Bir örnekle gösterelim. Bir şirkette Onur isimli kişi ürün müdürü olsun, Murat isimli kişi de insan kaynakları müdürü olsun.

>>> onur="ürün_müdürü"
>>> murat="insan_kaynakları_müdürü" 

Fakat daha sonra bu kişilerin unvanları kendi aralarında değiştiğinde bu işlemi çok basit bir kodla halledebilirsiniz.

>>> onur,murat=murat,onur                 //işte bu kadar basit 
>>> onur                                                    //onur bundan sonra insan kaynakları müdürü 'insan_kaynakları_müdürü'                             
>>> murat                                                 //murat bundan sonra ürün müdürü 
'ürün_müdürü'        
               
58) _  (alt çizgi işareti), yapılan son işlemin veya girilen son öğenin değerini tutma işlevi görür.

>>> 10+5                           // Son işlem olan 15 değerini hafızada tutup bize gösterdi            
15
 >>> _                                                          
15                         // O halde altçizgi ile 5’i topladığımızda sonucun 20 olması kaçınılmaz        
 >>> _+5                                      
 20                                      // Bundan sonra _ (yani son öğe) 15 değil 20 olmuştur  

59) print() fonksiyonu ekrana çıktı vermemizi sağlar. Örnek;

 >>> print("Merhaba Dünya") 
Merhaba Dünya                                       // İyi ama print fonksiyonu olmadan da çıktı alamıyor 

muyduk dediğinizi duyar gibiyim.     
      
>>> "Merhaba Dünya"         
'Merhaba Dünya' 

Bu kodlar da aynı işi görmez mi? Cevap, hayır. Fark ettiyseniz alttaki Merhaba Dünya tek tırnak içine alınmış. Yani aslında bir çıktı değil.  İlerde programlarımızı dosyalara kaydedip çalıştırdığımızda, başında print() olmayan ifadelerin çıktıda görünmediğine şahit olacaksınız. Orijinal ekran çıktısı print() fonksiyonu ile gerçekleşir.

60) print() fonksiyonunda çift tırnak kullanmak şart değildir. Yani Merhaba Dünya ifadesini hem çift tırnak hem tek tırnak hem de üç tırnak içerisine alabiliriz. Örnek;

 >>> print("Merhaba Dünya")                                                       // çift tırnak            
Merhaba Dünya 
>>> print('Merhaba Dünya')                                                       // tek tırnak            
 Merhaba Dünya 
>>> print('''Merhaba Dünya''')                                                     // üç tırnak          
 Merhaba Dünya 

Görüldüğü üzere hepsini kullanabiliriz. Ancak Python’da karakter dizisi tanımlarken genellikle tek tırnak ve çift tırnak kullanıldığını unutmayın. O halde üç tırnak neden var sorusuna ise daha sonra yanıt verelim.
61) print() fonksiyonunda neden üç tırnak kullanmamız gerektiğini bir örnek üzerinde gösterelim. Diyelim ki aşağıdaki gibi bir çıktı almak istiyoruz.

              >>> print("""Python programlama dili Guido Van Rossum                      adlı Hollandalı bir programcı tarafından 90’lı                      yılların başında geliştirilmeye başlanmıştır. Çoğu                      insan, isminin "Python" olmasına bakarak, bu programlama                     dilinin, adını piton yılanından aldığını düşünür.                     Ancak zannedildiğinin aksine bu programlama dilinin                     adı piton yılanından gelmez.""") 

Böyle bir çıktı alabilmek için tek veya çift tırnak kullanmaya kalkışırsanız epey eziyet  çekersiniz. Bu tür bir çıktı vermenin en kolay yolu üç tırnakları kullanmaktır. Çünkü üç tırnaklı yapı öteki tırnak tiplerine göre biraz farklı davranır. Örnek;

 >>> print('''Game Over             
Insert Coin!''')             
Game Over            
 Insert Coin! 

Yukarıdaki kodların anlamı şu: Ben print komutunu ve üç tırnak işaretini kullanarak Game Over yazdım sonra enter tuşuna bastım, normalde tek tırnak veya çift tırnak kullansaydım enter tuşuna bastıktan sonra program hata verecekti ancak üç tırnak kullandığım için hata vermedi. Bunun anlamı yazmaya devam et demektir. Böylelikle çıktının devamı olan İnsert Coin! ifadesini yazdım ve üç tırnak ve parantez ile fonksiyonumu tamamladım. Tekrar enter tuşuna bastığımda ise üst üste satırlardan oluşan çıktımı elde ettim.

62) Bu arada üç tırnak ‘’’ ya da “”” şeklinde olabilir. İkisi de aynı işlevi görür.

63) Peki, neden bazen tek tırnak bazen de çift tırnak kullanmamız gerekiyor? Bunu bir örnekle gösterelim. Diyelim ki aşağıdaki gibi bir çıktı almak istiyoruz.

              İstanbul'un 5 günlük hava durumu tahmini

Dikkat ederseniz yukarıdaki ifadede bir kesme işareti var. Yani tek tırnak. O halde kritik  soru şu. İçinde tek tırnak işareti olan bir string’i tek tırnak içine almak mantıklı mı? Tabii ki değil çünkü programımız hata verecektir. Bu yüzden diğer bir alternatif olan çift tırnağı kullanmalıyız.

>>> print("İstanbul'un 5 günlük hava durumu tahmini")            
 İstanbul'un 5 günlük hava durumu tahmini 


64) print() fonksiyonu birden fazla parametre alabilir. Örnek:

>>> print ('Fırat' , 'Dicle')                               //virgül kullanarak iki ayrı string’i birleştirdik.          Fırat Dicle 

65) sep() fonksiyonunun ne anlama geldiğini öğrenelim. sep ifadesi, İngilizcede separator (ayırıcı, ayraç) kelimesinin kısaltmasıdır. Örnek:

 >>> print("http://", "www.", "google.", "com")             
http:// www. google. com 

// Yukarıdaki örnekte virgül işareti ile stringleri birleştirirken birer boşluk bırakıldığını fark etmişsinizdir. Ancak boşluk bırakılmasını her zaman istemeyiz. Yukarıdaki linkte boşluk olmaması gerekir. Yani bizim hedefimiz http://www.google.com yazdırmak. Bildiniz gibi linklerin boşluklu hali hiçbir işe yaramaz. İşte burada sep() fonksiyonu devreye girer. Aslında yukarıdaki kod şu şekildedir:

             >>> print("http://", "www.", "google.", "com", sep=" ") 

// Ancak buradaki sep=” “ ifadesi görünmezdir yani onu normalde kullanmayız o ancak arka planda çalışır ve default olarak virgüllerden sonra boşluk bırakır, ta ki amacımız değişene kadar. Çift tırnak işaretinin arasına boşluk değil de başka bir karakter koyarsak bu sefer virgüllerden sonra boşluk değil bu koyduğumuz karakter olacaktır. O halde çift tırnak arasına bir şey koymazsak virgüllerden sonra hiçbir boşluk olmayacaktır. Doğru kodumuzu yazalım.

>>> print("http://", "www.", "google.", "com", sep="")            //Bir boşluk nelere kadir 
   http://www.google.com 

66) sep=” “ ile sep=None  aynı anlama gelir.
 
67) bir mumdur iki mumdur üç mumdur dört mumdur… türküsünü sep ve print fonksiyonu kullanarak ekrana yazdıralım.

  >>>print("bir", "iki", "üç", "dört", "on dört", sep=" mumdur ")          
 
bir mumdur iki mumdur üç mumdur dört mumdur on dört 

             //virgüller arasına boşluk, mumdur ve tekrar boşluk koyduk. Yani sep=" mumdur " 

68)  print() fonksiyonunun end adlı özel bir parametresi daha bulunur. Tıpkı sep parametresi gibi, end parametresi de print() fonksiyonunda görünmese bile her zaman oradadır. sep parametresi print() fonksiyonuna verilen parametreler birleştirilirken araya hangi karakterin gireceğini belirliyordu. end parametresi ise bu parametrelerin sonuna neyin geleceğini belirler. Bunu bazı örneklerle açıklayalım.

             >>> print("Bilgisayar\nBilimi") 

            Bilgisayar 

            Bilimi 

\n parametresini far etmişsinizdir. Bu parametreye newline adı verilir. Görevi de yukarıda görüleceği gibi satırbaşı yaparak stringleri ayırmaktır. Örnek:


>>> print("Bugün günlerden Salı") 
Bugün günlerden Salı 

//Burada herhangi bir end parametresi göremiyoruz. Ancak Python yukarıdaki kodu aslında şöyle algılar: 

>>> print("Bugün günlerden Salı", end="\n") 

//Kısacası bu kodu yazdığımızda ve enter tuşuna bastığımızda print() fonksiyonu iki farklı işlem gerçekleştirir: 

1-Öncelikle karakter dizisini ekrana yazdırır. 
2-Ardından bir alt satıra geçip bize >>> işaretini gösterir. 

//Bunun ne demek olduğunu anlamak için end parametresinin değerini değiştirmemiz yeterli olacaktır: 

>>> print("Bugün günlerden Salı", end=".") 
Bugün günlerden Salı. 

// end fonksiyonu ile stringin sonuna bir nokta koymuş olduk. Aslında mesele bu kadar basit.


69) sys.stdout nedir? sys.stdout ‘standart çıktı konumu’ anlamına gelir. Standart çıktı konumu; bir programın, ürettiği çıktıları verdiği yerdir. Python öntanımlı olarak, ürettiği çıktıları ekrana verir. Eğer o anda etkileşimli kabukta çalışıyorsanız, Python ürettiği çıktıları etkileşimli kabuk üzerinde gösterir. Dolayısıyla Python’ın standart çıktı konumu etkileşimli kabuk veya komut satırıdır. Yani print() fonksiyonu yardımıyla bastığınız çıktılar etkileşimli kabukta ya da komut satırında görünecektir. Ama eğer istersek print() fonksiyonunun, çıktılarını ekrana değil, bir dosyaya yazdırmasını da sağlayabiliriz. Bunu daha sonraki örneklerle gösterelim.

70) print() fonksiyonu ile elde edilen çıktıları ekrana değil de bir dosyaya nasıl yazdırırız?

>>> dosya = open("deneme.txt", "w") 
>>> print("Bilgisayar Bilimi, Python”,file=dosya)
 >>> dosya.close() 

Gelin yukarıdaki kodları açıklayalım. Öncelikle deneme.txt adlı bir dosya oluşturduk ve bunu dosya adlı bir değişkene atadık. Burada kullandığımız open() fonksiyonuna çok takılmayın. Biz şimdilik bu şekilde dosya oluşturulduğunu bilelim yeter. Gördüğünüz gibi open() fonksiyonu da birtakım parametreler alabiliyor. Bu fonksiyonun ilk parametresi “deneme.txt” adlı bir karakter dizisi. İşte bu karakter dizisi bizim oluşturmak istediğimiz dosyanın adını gösteriyor. İkinci parametre ise “w” adlı başka bir karakter dizisi. Bu da deneme.txt dosyasının yazma kipinde (modunda) açılacağını gösteriyor. Oluşturduğumuz bu deneme.txt adlı dosya, o anda bulunduğunuz dizin içinde oluşacaktır. Bu dizinin hangisi olduğunu öğrenmek için şu komutları yazın:

>>> import os 
>>> os.getcwd() 
'C:\\Users\\Kullaciadi\\AppData\\Local\\Programs\\Python\\Python36' 

Dizine baktığınızda deneme.txt adlı bir dosya oluştuğunu göreceksiniz. Dosyayı açtığınızda Bilgisayar Bilimi, Python çıktısının yazılı olduğuna şahit olacaksınız.  Eğer dizin görünmüyorsa gizli olabilir bu durumda gizli dosyaları göster deyin.

Yukarıdaki kodu açıklamaya devam edelim.  Gördüğünüz üzere ikinci satırda  print() fonksiyonuna rağmen ekranda çıktı görünmedi. Çünkü print() fonksiyonunu ekrana değil dosyaya çıktı verecek şekilde ayarladık. Bu işlemi file adlı bir parametreye, dosya değişkenini atayarak yaptık. Son komut yardımıyla da, yaptığımız değişikliklerin dosyada görünebilmesi için ilk başta açtığımız dosyayı kapattık.

71) Tıpkı sep ve end parametreleri gibi, file parametresi de, siz görmeseniz bile her zaman print() fonksiyonunun içinde yer alır. Yani diyelim ki şöyle bir komut verdik:

>>>print("Tahir olmak da ayıp değil", "Zühre olmak da") 

Python aslında bu komutu şöyle algılar:

>>> print("Tahir olmak da ayıp değil", "Zühre olmak da", sep=" ", end="\n", file=sys.stdout) 

Yani parametrelerin arasına birer boşluk koyar (sep=" "), sonuna satır başı karakteri ekler         (end="\n") ve bu çıktıyı standart çıktı konumuna gönderir (file=sys.stdout).

72) flush() fonksiyonunu aşağıdaki örnekle açıklayalım.

>>> f=open("kisisel_bilgiler.txt","w") 
>>> print("Murat Yılmaz", file=f) 
>>> print("T.C. no: 56897136119", file=f) 
>>> print("Doğum yeri: Trabzon", file=f) 
>>> f.close() 

Yukarıdaki kodları daha önce öğrenmiştik. kisisel_bilgiler adlı bir txt dosyası oluşturduk. Ardından bu dosyaya sırasıyla yukarıda yazılı olan çıktıları gönderdik. Son olarak bu dosyayı kapatarak işlemi sonlandırdık. Ancak bu son dosyayı kapatma işlemi olmadan yukarıdaki çıktıları almamız mümkün. İşte flush() fonksiyonu burada devreye giriyor. O halde flush() fonksiyonunu kullanarak yeniden kodları yazalım.

>>> f=open("kisisel_bilgiler.txt","w") 
>>> print("Murat Yılmaz", file=f, flush=True) 
>>> print("T.C. no: 56897136119", file=f, flush=True) 
>>> print("Doğum yeri: Trabzon", file=f, flush=True) 

Burada yaptığımız şey sadece print() fonksiyonunun içine flush=True değerini koymak. flush() fonksiyonunun sadece iki değeri vardır. True or False.  flush() değeri default olarak False ayarlandığı için yapmak istediğimiz işlem için True değerini kendimiz vermek zorunda kaldık. Artık kodun sonuna f.close() koymak zorunda değiliz.

73) *(yıldız) parametresini anlatmak için bir soru soralım. Aşağıdaki gibi bir çıktı almak istersek nasıl bir kod yazmamız gerekir?

L.i.n.u.x 

Aslında cevabı daha önce öğrenmiştik.

>>>print("L", "i", "n", "u", "x", sep=".") 
L.i.n.u.x 

Ancak bunun daha basit bir yolu var.

>>>print(*"Linux", sep=".")  
L.i.n.u.x 

Bu örneklerden de gördüğünüz gibi * işaretini kullanarak Linux stringini parçalara böldük ve bu parçaların arasına sep() fonksiyonunu kullanarak nokta koyduk. Bu kadar basit.

74) sys.stdout modülünü (standart çıktı konumu) kalıcı olarak değiştirmek için aşağıdaki kodu yazalım.

>>> import sys                                     
>>> f =open("ödevler.txt", "w") 
>>> sys.stdout=f 
>>> print("İstanbul'un Fethi Slaytı", flush=True) 

Yukarıdaki kodu açıklayalım. İlk önce import sys komutu vererek sys modülünü içe aktardık. import sys önemli çünkü bu komutu vermezseniz bundan sonra sys ile ilgili yazacağınız hiçbir kod çalışmayacaktır. Bunu modüller konusu işlenirken daha iyi anlayacağız. Daha sonra ödevler.txt adlı bir dosyayı “w” komutunu da kullanarak yazma kipinde oluşturduk ve bunu f değişkenine atadık. Asıl can alıcı kodu ise sys.stdout=f ile oluşturduk çünkü kalıcı dosyayı f değişkenine atayarak bundan sonra yazacağımız her şeyi ama her şeyi ödevler.txt dosyasına aktarma emri verdik. Son satırda ise basit bir print() emri vererek ödevler.txt dosyasına “İstanbul’un Fethi Slaytı” yazısını yazdırmış olduk.  Haliyle dosyayı kapatmaya ihtiyacı duymadık çünkü hemen akabinde flush=True değerini oluşturduk.

75) Peki standart çıktı konumunu, etkileşimli kabuktan çıkmadan veya programı kapatmadan eski haline döndürmenin bir yolu var mı? Elbette var. Yukarıdaki koda aşağıdaki kodu ekleyelim.

             f, sys.stdout = sys.stdout, f                      
                
             İşte bu kadar basit. Yaptığımız şey değişken takasından başka bir şey değil. 

KAYNAK:

Hiç yorum yok:

Yorum Gönderme

Öne Çıkan Yayın

Hibernate Nedir?

Hibernate Nedir? Veritabanı işlemlerinde bize yardımcı olan, obje kavramından uzaklaşmadan işimize devam etmemizi sağlayan bir yapı. Artık...