28 Nisan 2013 Pazar

Operatörler ve Matematiksel İşlemler

Bu bölümde, programlamayla az çok uğraşmış herkesin hiç yabancılık çekmeyeceği bir konuya değineceğiz. Çünkü  “Operatörler ve matematiksel işlemler” konusu hemen her programlama dilinde aynıdır. Lafı çok uzatmadan yazımıza ilk olarak operatörlerden başlayalım.





Matematiksel Operatörler

Python daki matematiksel operatörler herhangi bir hesap makinesindekiyle aynıdır. Bunlar, numerik klavyemizde de yan yana yer alan /, *, -, + operatörleridir.


Hemen basit bir örnek verelim:
>>>a=5+7 
>>>print a
12
>>>
Aynı işlemler değişkenler ile de yapılabilir:
>>>a=5 
>>>b=a+7 
>>>print b
12
>>>
Bununla beraber oldukça karmaşık ifadeler de yazabilirsiniz:
>>>a=(3+4+21)/7 
>>>b=(9*4)/(2+1)-6 
>>>print(a*b)-(a+b) 
14
>>>
Bu operatörler sadece rakamlarla kullanılabilir mesela aşağıdaki örnekler karşımıza hata mesajları getirir.

“Merhaba” + 5                                “14” + 3          

*Burada önemli olan nokta “14” ün sayı olarak değil bir String ifade olarak işleme sokulmasıdır.

Not: Yine her programlama dilinde olduğu gibi Python da işlem önceliğine dikkat eder. Bir diğer dikkat edilmesi gereken husus ise bölme işleminde karşımıza çıkar. İki integer sayıyı böldüğümüzde  eğer bir kalan oluşursa Python bunu göz ardı eder.
>>>13/6
2
>>>
Bu sorundan iki sayıdan birini float dediğimiz yani türkçe tabiriyle kayan noktalı halde yazarak kurtulabiliriz.
>>>13/6.0
2.1666666666666665
>>>
Tabi her seferinde böyle virgüllü sayımı yazacağız diye soracak olursanız bunun da kolayı var :). Komut satırında da olsak text editör de de olsak şu komutu araya bir yere sıkıştırmak yeterlidir:
from __future__ import division
Eğer komut satırında isek Python bir dahaki açılışına kadar virgüllü sayıları es geçmez. :).. “__” işaretini nasıl yapacağım diyorsanız “_” işaretini iki kere ard arda koymanız yeterli arkadaşlar :).

Örnek olması açısından küçük bir örnek de String ifadeler için yapalım.
>>>a=”Hel”
>>>b=”lo”
>>>c=a+b
>>>print c
'Hello'
>>>c=c+” world”
>>>print c
'Hello world'
>>>
Matematiksel operatörlerde son olarak değineceğimiz kısım üs alma ve mod işlemi.
Bu işlemlerden mod almayı halletmek için Python ' % ' işaretini kullanır. Ancak üs alma işlemi dğer programlama dillerinden biraz farklıdır. Python da üs alma (a^b) işlemini ' ** ' yardımıyla yaparız. Hemen örnek verecek olursak:
>>>13%2
1
>>>2**3
8
>>>3**2
9
>>>
İlişkisel Operatörler
Bir diğer operatör türümüzde ilişkisel operatörler dediğimiz yapılardır. Bunlar == (eşit mi?), != (farklı mı), < (küçük mü?), > (büyük mü?), <= (küçükeşit mi?), >= (büyükeşit mi?) gibi işaretlerdir. Bu operatörler basit karşılaştırma işlemleri yaparlar ve yaptıkları işlemin sonucunda 'true' ya da 'false' değerleri döndürürler. Hemen örneklerimizde görelim arkadaşlar:
>>>4>=9 
False 
>>>’abc’!=’def’ 
True 
>>>x=’abc’ 
>>>x==’abc’ 
True
>>>14!=9
True
>>>
Unutmadan yine operatörler konusunda bahsedilmesi gereken +=, -=, *=, /= c operatörlerini ele alalım.Bu operatörler hızlı bir şekilde değişkenin değerini işleme tabi tutup ardından tekrar değişkene atamak için kullanılır. Aşağıda ki örnekte iki işleminde aynı anlama geldiğini görebiliriz:
>>> x = 5 
>>> x = x + 6 
>>> print x 
11 
>>> y = 5 
>>> y += 6 
>>> print y 
11
>>>
Matematiksel Fonksiyonlar ve math Modülü


Evet arkadaşlar operatörleri bitirdikten sonra şimdi de matematiksel fonksiyonları tek bir çatı altında toplayan math modülünden bahsedelim. Bu konu modüller kısmında da anlatılabilirdi ama biz burada anlatmayı daha uygun gördük. Böylece math altındaki tüm fonksiyonları tek tek inceleyebiliriz.:)

Bu modülü kullanabilmemiz için öncelikle çalışmamıza import etmemiz gerekiyor:

>>>import math
>>>
Fonksiyonlar çağrılırken math.xxx şeklinde xxx kısmına fonksiyonlar yazılır.
Eğer math modülü altındaki tüm fonksiyonları görmek isterseniz:
>>>dir(math)       #yazarak veya
>>>help(math)     #yazarak görebilirsiniz.
help(math) kısmında ayrıca fonksiyonların özelliklerdinden kısa kısa bahsedilir.
Şimdi alfabetik sıraya göre bu fonksiyonları teker teker inceleyelim arkadaşlar.

-acos(x)
arccosinüs (cosinüs fonk. tersi) fonksiyonudur ve dönen değer radyan cinsindendir.
>>>math.acos(0)
1.5707963267948966
>>>
-acosh(x)
Hiperbolik kosinüs fonksiyonunun tersidir ve bu da radyan cinsinden bir değer döndürür.
>>>math.acosh(1)
0.0
>>>
-asin(x)
Arcsinüs fonksiyonudur. Dönüş değeri radyandır.
>>>math.asin(1)
1.5707963267948966
>>>
-asinh(x)
Hiperbolik arcsinüs fonksiyonudur.
>>>math.asinh(0)
0.0
>>>
-atan(x)
arctanjant fonksiyonudur.
>>>math.atan(1)
0.7853981633974483
>>>
-atan2(y,x)
Sonuç olarak y/x in arctanjantını verir. Neden atan(y/x) bize yetmiyor mu derseniz atan2(y,x) fonksiyonu işaret karışıklığını gidermek için kullanılabilir.
>>>atan2(5,5)  # 5/5=1 olduğundan
 0.7853981633974483
>>>
-atanh(x)
X değerinin Hiberbolik arctanjantını radyan cinsinden veren fonksiyondur.
>>>math.atanh(0)
0.0
>>>
-ceil(x)
ceil in kelime anlamı ingilizce de tavanla ilgilidir. Bu fonksiyonda adının hakkını vererek aldığı parametreye en yakın büyük tam sayıyı bize verir.
>>>math.ceil(3.56843)
4.0
>>>math.ceil(-3.56843)
-3.0
>>>
-copysign(x, y)
Bu fonksiyon kısaca y nin işaretini x e kopyalar diyebiliriz. Geri dönüş değeri yine x tir.
>>>math.copysign(2.56,-3)
-2.56
>>>
-cos(x)
İlkokuldan beri bildiğimiz kosinüs fonksiyonu :). Burada parametre olarak radyan değer girilir arkadaşlar.
>>>math.cos(0.5235987755982988)
0.8660254037844387
>>>
-cosh(x)
Hiperbolik cosinüs fonksiyonudur.
>>>math.cosh(1)
1.5430806348152437
>>>
-degrees(x)
Radyan cinsinden girilen değerin açı olarak verir. Yukarıda radyan olarak kullandığımız değerlerin karşılığını görelim isterseniz :).
>>>math.degrees(1.5707963267948966)
90.0
>>>math.degrees(0.5235987755982988)
30.0
>>>
-exp(x)
Bu fonksiyon bize e^x işlemini yapmaktadır.
>>>math.exp(2)
7.38905609893065
>>>
-expm1(x)
Bu fonksiyonun exp(x) ten tek farkı sonucu 1 çıkarıp vermesidir. Yani e^x-1 işlemini yapar.
>>>math.expm1(2)
6.38905609893065
>>>
-fabs(x)
Girilen değerin mutlak değerini verir.
>>>math.fabs(-3.26)
3.26
>>>
-factorial(x)
Fonksiyonumuz x! i bulur. Tabi negatif yazmamaya dikkat ediyoruz. :)
>>>math.factorial(4)
24
>>>
-floor(x)
Floor türkçede zemin anlamına gelmektedir. Bu fonksiyonda aldığı değeri en yakın küçük tam sayıya yuvarlar.
>>> math.floor(3.56843) 
3.0 
>>> math.floor(-3.56843) 
-4.0 
>>>
-fmod(x,y)
fmod(x,y) fonksiyonu, a sayısının b sayısına bölümünden kalanı veren bir fonksiyondur. a%b işlemiyle aynıdır ama fmod ile ondalıklı sayılarıda kullanabiliriz.
>>> math.fmod(5,3)
2.0
>>> math.fmod(6,3.2)
2.8
>>>
-frexp(x)
Bu fonksiyon bize verilen değerin karakteristiğini ve mantisini veriyor. Sonu olarak bize (m,k) şeklinde bir değer döndürüyor. Burada m mantis, k karakteristiktir.
>>>math.frexp(7)
(0.875, 3)
>>>
-hypot(x,y)
Evet sizinde tahmin ettiğniz gibi girilen değerlere karşılık gelen hipotenüs uzunluğunu bulur. Öklid in dik üçgen kanunundaki sqrt(x*x+y*y) işleminin sonucudur aslında.
>>>math.hypot(3,4)
5.0
>>>
-isinf(x)
Ne kadar işiniz düşer bilinmez ama bu fonksiyonumuz da bir sayının sonsuz olup olmadığını kontrol ederek bize true ya da false değer döndürür.

-isnan(x)
Bu fonksiyonunda girilen parametrenin belirsizlik durumunu kontrol eder. Yani (sonsuz/sonsuz), (sonsuz*0) gibi.
-ldexp(x,y)
Bu fonksiyonumuz da x*(2**y) işlemini döndürür. (** işlemi üs alma işlemiydi hatırlarsanız.)
>>>math.ldexp(3,2)
12.0
>>>
-log(x,y)
Logaritması alınacak sayı x tir. Tabanımız ise y değeridir.
>>>math.log(8,2)
3.0
>>>
-log10(x)
Girilen parametrenin 10 tabanındaki logaritmasını alır.
>>>math.log10(1000)
3.0
>>>
-log1p(x)
Bu fonksiyon 1+x değerinin e tabanındaki logaritmasını alır:
>>> math.log1p(4) 
1.6094379124341003
>>>
-modf(x)
Girilen değerin ondalık kısmını ve tam kısmını birbirinden ayırıp geri döndürür.Girilen sayı tam sayı da ondalıklı sayı da olabilir.
>>> math.modf(6.5) 
(0.5, 6.0) 
>>>
-pow(x,y)
xy işlemini yapan fonksiyonumuzdur. Bu fonksiyonu ayrıca math modülünü import etmeden de kullanabilirsiniz.
>>>math.pow(5,3)
125
>>>pow(2,3)
8
>>>
-radians(x)
Girilen açı değerinin radyan karşılığını verir:
>>> math.radians(180) 
3.141592653589793 
>>>
-sin(x)
Bildiğimiz sinüs fonksiyonudur. Tabi hep olduğu gibi burada da değer olara radyan giriyoruz.
>>> math.sin(1.0471975511965976) 
0.8660254037844386 
>>>
-sinh(x)
Hiperbolik sinüs fonksiyonudur. Sinüs te nasıl değeri radyan cinsinden alıyorsa burada da radyan cinsinden geri döndürür.
>>>math.sinh(1)
1.1752011936438014
>>>
-sqrt(x)
Bir çok programlama dilinde aynı olan bu fonksiyonumuz eğer aşinalığınız varsa karekök alan fonksiyon olduğunu anlamışsınızdır. :)
>>>math.sqrt(81)
9.0
>>>
-tan(x)
Yine klasik trigonometrik fonksiyonlardan bir tanesi olan tanjant fonksiyonu.
>>>math.tan(1)
1.5574077246549023
>>>
-tanh(x)
Hiperbolik tanjant fonksiyonudur.
>>>math.tanh(0)
0.0
>>>
-trunc(x)
Evet bu fonksiyonda modülümüzde yer alan son fonksiyonumuzdu arkadaşlar. Ne işe yarıyor diye soracak olursanız girilen sayımızın ondalık kısmını atıp elinde kalan değeri bize geri döndürür. Yaprığı işin yuvarlamayla ilgisi yoktur yani. Örneğimiz rahatlıkla açılar bu durumu:
>>>math.trunc(12.6)
12
>>>math.trunc(-12.6)
-12
Son olarak da bilgi olması açısından Pyhon' umuzun e ve Pi sabitlerinin sayı değerlerini verelim.
e = 2.718281828459045
pi = 3.141592653589793
Bu bölümde matematik modülünü işledik ve tüm fonksiyonlarımızı inceleme imkanı bulduk. Şimdi dışarı çıkıp temiz bir hava alabilirsiniz :)...

Kaynaklar:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-189-a-gentle-introduction-to-programming-using-python-january-iap-2011/


-  >>>help()
   help>math

www.google.com

http://www.istihza.com/py2/math.html

16 yorum :

  1. Teşekkürler. Oldukça yararlı bir yazı.

    YanıtlayınSil
  2. Emeğinize sağlık

    YanıtlayınSil
  3. hocam merhaba,

    cok yararli bir yazi fakat ben alistirmalar yaparken bu print olayi nedir ve ben de neden gorunmuyor.Hello orneginde c=a+b de sonuc hello cikmiyor.
    a="hel"
    b="lo"
    a+b sonucu hello olarak cikiyor.Basit bir seyde bile nerde hata yapiyor olabilirim.

    YanıtlayınSil
    Yanıtlar
    1. a+b yi de üçüncü bir değişken olarak tanımlamayı atlıyor olabilir misiniz? yani devamında c= a+b
      print c
      demek gerek.

      Sil
    2. Parantez kullanmayı denersen sorun çözülecektir. Örneğin;
      a=1
      b=2
      c=a+b
      print (c) gibi print("Hello World") gibi.

      Sil
  4. >> & | % x X d s H h Bunlar daha önemli bence...

    YanıtlayınSil
  5. Bunu Öğrenmemizdeki amaç nedir ??

    Alttaki Operatörleri Öğrenmesem eksiğim olurmu işime yarıyacakmı bunlar ?

    YanıtlayınSil
  6. abi şu programda hata var açılmıyor normal niye

    import math

    while True:

    secenek1 = "(+) toplama"

    secenek2 = "(-) cikarma"

    secenek3 = "(*) carpma"

    secenek4 = "(/) bolme"

    secenek5 = "(ü) üs alma"

    secenek6 = "(k) karekök"

    secenek7 = "(a) dairenin alanını hesaplama"

    print "Yapmak istediginiz islemin numarasini giriniz"

    print secenek1

    print secenek2

    print secenek3

    print secenek4

    print secenek5

    print secenek6

    print secenek7

    soru = raw_input(":")

    if soru == "+":

    sayi1 = input("Ilk sayiyi girin")

    sayi2 = input("Ikinci sayiyi girin")

    print sayi1, "+", sayi2, "=", sayi1 + sayi2

    if soru == "-":

    sayi3 = input("Ilk sayiyi girin")

    sayi4 = input("Ikinci sayiyi girin")

    print sayi3, "-", sayi4, "=", sayi3 - sayi4

    if soru == "*":

    sayi5 = input("Ilk sayiyi girin")

    sayi6 = input("Ikinci sayiyi girin")

    print sayi5, "X", sayi6, "=", sayi5 * sayi6

    if soru == "/":

    sayi7 = input("Ilk sayiyi girin")

    sayi8 = input("Ikinci sayiyi girin")

    print sayi7, "/", sayi8, "=", sayi7 / sayi8

    if soru == "ü":

    sayi9 = input("tabanı giriniz")

    sayi0 = input("üsü giriniz")

    print math.pow(sayi9,sayi0)

    if soru == "k":

    sayia = input("karekökü alınacak sayıyı giriniz")

    print math.sqrt(sayia)

    if soru == "a":

    sayib = input("yarıçapın uzunluğunu giriniz")

    print sayib * sayib * math.pi

    YanıtlayınSil
  7. Merhabalar ;

    math.modf(x) fonksiyonun çıktılarını başka değişkenlere atamak istersek nasıl olacak. Dizi şeklinde mi düşünmemiz gerekir. Çünkü gelen çıktı 2 farklı değer

    YanıtlayınSil
    Yanıtlar
    1. Merhabalar,
      Oncelikle sorun icin tesekkur ederim.
      Burada o fonksiyonun donen degerinin tipini kontrol ettigimizde:
      >> type(math.modf(6.5))

      Bana su sekilde bir sonuc dondü:
      >>

      Yani bu demek oluyor ki bize donen tip zaten "demet" oluyor. Demetler konusunu yine ben yazmıştım başka bir yazıda. Bu fonksiyonu çağırırken bir x değişkenine atarsan su sekide:
      >>x = math.modf(6.5)

      Bu x icindeki elemanlara x[0], x[1] ile ulasabilirsin.
      Basarılar dilerim.
      Tesekkürler

      Sil
  8. sadece virgülden sonraki ondalık kısmı yazan basit bir komut fonksiyon yok mu. Örneğin // işlemi float sayıyı tam sayı yapıyor yani tam kısmı veriyor gibi yine float sayının sadece virgülden sonrasını gösteren komut baktım göremedim hiçbir yerde. Evet yukarı da da belirtildiği gibi float sayının tam ve ondalık kısmını ayırıp döndüren komut var ama ben sadece ondalığı döndüren komut soruyorum.

    YanıtlayınSil
  9. Virgüllü gırilen bi sayıyı derece dakika saniye olarak gösteren bir komut varmı

    YanıtlayınSil
  10. Merhaba;

    Windows'ta dosya içinde
    #import math
    math.acos(0)
    yazıyorum. Fakat;

    Traceback (most recent call last):
    File ".\Selam01.py", line 80, in
    math.acos(0)
    NameError: name 'math' is not defined
    hatası dönüyor.

    YanıtlayınSil
  11. yaşım 13 matematik konularını bilmiyorum bi kısmını biliyorum 7yim pandemi döneminde çalışmaya çalışıyorum ama matematik olaylarını illa ezberlemek gerekiyor mu

    YanıtlayınSil