Python Series - 3(if,elif and else)




Merhabalar, Python eğitimlerinde bugün "eğer" tabiriyle adlandırdığımız programlama dillerinin kök kavramlarını ve operatörlerini "en sadeleştirilmiş" şekilde göreceğiz.  Peki nedir bu sürekli gördüğüm if ve else ilişkisi ?


Şöyle ki programlama dillerinde olasılıklar mevcuttur. Örneklemek gerekirse, şu değişken 10 sayısından küçük ise eğer şunu yap değil ise eğer o zaman şunu yap gibi programlama dillerinde kök bir kavram olarak karşımıza çıkar peki şimdi bunları hem sayısal hemde fonksiyonel olarak basit şekilde özetlemeye çalışalım;

#!/usr/bin/python


degisken1 = 5
degisken2 = 6

if degisken1 > degisken2:
 print "degisken1 buyukmus"
else:

 print "degisken1 buyuk degilmis"

( Yukarıda 1 kez boşuk bırakıp print kullandım bunun nedeni üstte ki ifade alttaki de açıklaması demektir eğer print başa geçerse bu size hata olarak gere dönecektir dikkat ediniz.)

Yukarıda ki kod bloğuna göre çıktımız şu şekilde olacaktır;


'degisken1 buyukmus'

Değişkenleri karşılaştırarak bunu elde etmeye çalıştık bu sadece basit bir örnek şimdi geçmişten bugüne öğrendiğimiz şekliyle birde kullanmayı deneyelim;
#!/usr/bin/python

degisken1 = int(raw_input("Birinci sayiyi giriniz: "))
degisken2 = int(raw_input("ikinci sayiyi giriniz: "))

if degisken1 > degisken2:
 print "degisken1 buyukmus"
elif degisken1 == degisken2:
 print "iki sayi esit"
else:
 print "degisken1 buyuk degilmis"



Peki yukarıda ne yapmak istedik ? Çok basit aslında if,elif and else ifadeleriyle çıktımızı yönlendirdik. Eğer degisken1 eğer büyükse degisken2 ifadesinden o zaman "degisken1 buyukmus" mesajını ekrana yazdır. Birde alt koşulumuz olsun eğer bu iki ifade eşitse ki "elif" ifadesinde bunu belirttik bu ifade "else if" demektir o zamanda ekrana "iki sayi esit" diye yazdıracaktı. diğer olasılıkların hepsinde "else" ifadesi devreye girecek ve hepsini üstlenip "degisken1 buyuk degilmis" diye ekrana yazdıracaktı. Buraya kadar tamamdır ya operatörler ? 


Bunlar hakkında da bilgi sahibi olmak "zorundayız" çünkü operatörler bize her projede muhakkak lazım olacaktır. Peki nelerdir bu operatörler ? Bu operatörler bizim klavyemizden girdiğimiz matematiksel olarak anlam taşıyan +-*/= karakter topluluğudur bunlara aritmatik operatörler adı verilir geçen ders zaten bunlarla çalışmayı göstermiştik. Karşılaştırma operatörleri olarakta" <>!= ==" vs. gibi operatörleri kullanacağız. Mantıksal operatörler olarakta "and,not ve is" operatörlerini kullanacağız.Bu karakterler ile programlamaya geçiş sırası, eşitliği durumunda ki hal ve tavırları, string ekle çıkar, çoğalt vs. gibi şeylerde kullanabiliriz. 

Peki bizim genellikle ifadelerde kullandığımız karakterler nelerdir ve ne manaya gelirler?

OperatörAçıklamasıörnek
==İki değerin eşit olup olmadığını kontrol eder.(a == b) 
!=İki değerin eşitsizliklerini kontrol eder iki değer eşit değilse ona verdiğimiz komuta göre hareket eder.(a != b)
<>Yukarıda != operatörüyle aynı manaya gelir.(a <> b)
>İki değerden ilk değerin diğer değerden büyük olup olmadığını kontrol eder.(a > b)              
<İki değerden ilk değerin diğer değerden küçük olup olmadığını kontrol eder.(a < b)
>=İlk değer ikinci değerden büyük yahut eşitse ona göre hareket eder.(a >= b)
<=İlk değer ikinci değerden küçük yahut eşitse ona göre hareket eder.(a <= b) 



Artık bunları bildiğimize göre yukarıda detaylı olarak göstermek istediğimiz örneğimizi nasıl kısaltırız ?

#!/usr/bin/python

degisken1 = int(raw_input("Birinci sayiyi giriniz: "))
degisken2 = int(raw_input("ikinci sayiyi giriniz: "))

if degisken1 => degisken2:
 print "degisken1 buyuk ya da esit"
else:
 print "degisken1 buyuk degilmis"


Evet birden çok koşul ve operatör kullanmaktan bu sayede kurtulmuş olduk lakin bu mesaj tabi ki anlamlı olmayacaktır çünkü iki sayı aynı şekilde girildiğinde yine "degisken1 buyukmus" mesajı karşımıza gelecek. İnteger bir karakter kullanıyorsak eşitlikler için "elif" kullanmamız gerekir mantıken diğer türlü tatmin edici bir sonuç alamayız. 

Diğer fonksiyonlara bir göz gezdirerek anlamaya çalışalım;
#!/usr/bin/python

degisken1 = int(raw_input("Birinci sayiyi giriniz: "))
degisken2 = int(raw_input("ikinci sayiyi giriniz: "))

if degisken1 == degisken2:
 print "degiskenler esit"
else:
 print "degiskenler esit degilmis"

Peki burda ne yaptık aslında bu örnek karşılaştırma operatörlerini bize tam manasıyla anlatan bir örnek ama neden ? Şöyle ki karşılaştırma operatörlerinde ilk koşul ortama uygunsa çalışır değilse "elif" mevcutsa ona bakılır oda yoksa "else" ifadesi devreye girer ve yapılması gereken işlemi yapar. Biz burda iki ifadeyle işlemi hallettik "if ve else" kardeşler ile en kısa yoldan işlemlerimiz hallolmuş oldu.

Örnek bir script yazmak istedim aşağıda ki script

#!/usr/bin/python
import os,sys
from distutils.util import strtobool
songname = sys.argv[1]
cutime = sys.argv[2]
newname = sys.argv[3]
# Usage: python proj.py ~/Desktop/gerek/sila.mp3 45 sila45.mp3  #  Usagedetails: python proj.py ready.mp3 cuttime cutout.mp3
cutter = os.system('ffmpeg -t "'+cutime+'" -i "'+songname+'" -ab 256k "'+newname+'"')
def ques_ye(question):
    print ('%s [y]\n' % question)
    while True:
        try:
            return strtobool(raw_input().lower())
        except ValueError:
            print ('Bir cevap with \'y\' or \'n\'.\n')
#Bir kac soru ciktisi 
ques = ques_ye("islem tamam mi acaba?")
if cutter == 0:
  print "islem halloldu hadi bakalim"
else:
  print "bu iste bir hata var"

İki tane operatör kullandım burda temel olarak "if" ve "else" islem bittikten sonrada bir soru sormak istedim tek bir secenek biraktim ki detayli olarak devamini siz getirin "n" olursa ne yapmamiz lazım ? Yahut "bu iste bir hata var" ciktisi geldiğinde ".mp3" dosyanın bulunduğu destination folder için bir listeleme yapabilirmiydik? Olabilirdi onu yapmakta size kalmış olacak tabi ki "no" cevabı geldiğinde listelenebilsin vs. Burda mantıken şu var "0" çıktısı true "1" çıktısı false yani pozitif ve negatif anlamına gelir bu yüzden "cutter" değişkeninde herşeyin yolunda olup olmadığını öğrenmek için "0" ile sorguladım. 

Ve dahi ne kadar az operatör kullanırsak o kadar az yormuş oluruz projelerimizi bu yüzden projelerimizi hep en hafif şekilde yormadan ilerletmeliyiz ek olarak soru objesini ekledim ki sizde ilerletebilin. Lafı fazla uzatıpta kafanızı karıştırmak istemedim tam manasıyla işlemler böyle. Unutmadan girdiğimiz argumentleride check etmemiz gerekirse;

check = len(sys.argv[1]) # ilk argument değeri 

if check <= 4:
 print " [-] Girdiginiz degeri lutfen kontrol ediniz"
else:
 print " [+] girdi ok"

time.sleep(3) # import time paketini unutmayınız

Örnek olarak belirtmek istedim yazıda da belirttiğim gibi ne kadar çok fonksiyon kullanırsanız gereksiz yere o kadar çok yorulan bir uygulama elde etmiş olursunuz.

# Unutmadan script medya dosyalarında belirtilen süreyi kesip alır istediğiniz isimle istediğiniz dizine atar

Sevgiyle.







5 yorum

Author
avatar

sefa direkt olarak sys.argv[1] diye tanımlayamazmıydık ffmpeg içinde ki değişkenleri ?

Reply
Author
avatar

Merhabalar, elbette tanımlayabilirdik ama şu var ki değişkenlerle yürümek her zaman daha iyidir bir problem çıktığında değişkenler üstünden hareket ederek sorunları daha hızlı şekilde çözebiliriz.

Reply
Author
avatar

Güzel anlatım ffmpeg ile thumbnailer için bir kaç örnek verirsen iyi olur

Reply
Author
avatar

size ve montage set. gibi içeriklerde var bu thumbnail işinde öncelikel php bir script incelersen bununla ilgili varolan onun üstünden python'da ilerleyebilirsin diye düşünüyorum.Tabi bir kaç argopt eklemen gerekecek örneğin;

Multi files thumb yahut single thumb gibi peki nasıl?

Ya birden çok dosya oluşturup o dosya üstünden .vtt dosyadan okuyacak yahut tek bir dosya oluşturup onun üstünden parse ederek çekecek bunların eksi ve artı yönleriyle ilerlemen lazım. Birden çok dosya oluşturan script dağınıklık açısından aşırı derecede zor olacaktır lakin tek resim üzerinde parse eden scriptte de videoda resimler geç gelecektir vs.

Projelerin işleyişine göre algoritma çizerek hareket edersen dahada rahat edeceksin diye düşünüyorum.

Reply
Author
avatar

abi şunun devamını yaz artık bir aydır bekliyoruz

Reply