Python ile Hesap
Friday, May 4th, 2007Sayılar
¸Simdi bazı basit komutlar deneyelim. Yorumlayıcıyı çalı¸stırın ve birincil komut satırının gelmesini bekleyin ‘>>> ’ Yorumlayıcı basit bir hesap makinesi olarak i¸s görürebilir: istedi ˘giniz herhangi bir ifadeyi yazın ve yorumlayıcı sonucu verecektir. ˙I¸sleçler ( +,-,*,/ ) ço ˘gu programlama dillerindekine benzer çalı¸sır (Pascal ve C de oldu ˘gu gibi mesela) . Ifadeleri gruplamak için parantezler de kullanılabilir. Örnekler:
2+2
4
>>> # Bu bir açıklama
… 2+2
4
>>> 2+2 # bu da komutlarla aynı satırda bir açıklama
4
>>> (50-5*6)/4
5
>>> # Tam sayı bölme i¸slemlerinde ise:
… 7/3
2
>>> 7/-3
-3
C de oldu ˘gu gibi e¸sit i¸sareti(‘=’) bi de ˘gi¸skene de ˘ger atamak için kullanılır. Atamanın de ˘geri çıkı¸sta yazılmaz:
>>> genislik = 20
>>> yukseklik = 5*9
>>> genislik * yukseklik
900
Karma¸sık sayılar da desteklenmektedir. Sayıların sanal kısımları ‘j’ veya ‘J’ eki ile yazılır. Gerçek kısmı sıfır ol- mayan karma¸sık sayılar ‘(gerçek + sanalj)’ ¸seklinde yazılırlar ya da ‘complex(gerçek, sanal’ fonksiyonu ile yaratılırlar.
>>> 1j * 1J
(-1+0j)
>>> 1j * complex(0,1)
(-1+0j)
>>> 3+1j*3
(3+3j)
>>> (3+1j)*3
(9+3j)
>>> (1+2j)/(1+1j)
(1.5+0.5j)
Karma¸sık sayılar daima iki kayar noktalı sayı ile ifade edilirler; biri gerçek di ˘ger sanal kısım için. Z gibi bir karma¸sık sayının gerçek ya da sanal kısımlarına eri¸smek için Z.real ve Z.imag kullanılır.
a=1.5+0.5j
>>> a.real
1.5
>>> a.imag
0.5
Tam sayı veya kayar noktalıya dönü¸stürme fonksiyonları ( float(), int() ve long() ) karma¸sık sayılar için çalı¸smazlar; bir karma¸sık sayıyı gerçek bir sayıya dönü¸stürmenin do ˘gru bir yolu mevcut de ˘gildir. abs(z) ile karma¸sık ayının büyüklü ˘günü ve z.real ile gerçek kısmını elde edebilirsiniz.
>>> a=3.0+4.0j
>>> float(a)
Traceback (most recent call last): File “<stdin>”, line 1, in ?
TypeError: can’t convert complex to float; use e.g. abs(z)
>>> a.real
3.0
>>> a.imag
4.0
>>> abs(a) # sqrt(a.real**2 + a.imag**2)
5.0
>>>
Etkile¸simli kipte son yazdırılan de ˘ger _ de ˘gi¸skenine atanır. Yani Python’u hesap makinesi olarak kullanırken bazen i¸slemlere ¸su ¸sekilde devam etmek daha kolaydır :
vergi= 17.5 / 100
>>> fiyat= 3.50
>>> fiyat * vergi
0.61249999999999993
>>> fiyat + _
4.1124999999999998
>>> round(_, 2)
4.1100000000000003
>>>
Bu de ˘gi¸sken (_) kullanıcı tarafından salt okunur olarak kabul edilmelidir. Buna kasıtlı olarak de ˘ger atamayın. Bu aynı isimli bir yerel (local) de ˘gi¸sken yaratır.
Karakter Dizileri
Sayılara ek olarak, Python karakter dizileri üzerinde de i¸slemler yapabilir. Karakter dizileri farklı ¸sekillerde ifade edilebilir. Tek veya çift tırnak i¸sareti içine alınabilirler:
>>> ’karakter dizisi’
’karakter dizisi’
>>> “Python\’un gücü”
“Python’un gücü”
>>> “doesn’t”
“doesn’t”
>>> ’”Yes,” he said.’
’”Yes,” he said.’
>>> “\”Yes,\” he said.”
’”Yes,” he said.’
>>> ’”Isn\’t,” she said.’
’”Isn\’t,” she said.’
Karakter dizileri birkaç ¸sekilde birden fazla satıra yayılabilirler. Yeni satırlar ters e ˘gik çizgi ile ¸söyle gösterilebilirler:
merhaba = “Bu C de de kullandı˘gınıza benzer\n\
birkaç satır kaplayan bir karakter dizisi.\n\ Yeni satırın ba¸sındaki
girintinin belirgin oldu˘guna dikkat\
edin.\n”
print merhaba
import string
>>> ’str’ ’ing’ # <- Bu do˘gru
’string’
>>> string.strip(’str’) + ’ing’ # <- Bu da do˘gru
’string’
>>> string.strip(’str’) ’ing’ # <- Bu geçersız !!! File “<stdin>”, line 1, in ?
string.strip(’str’) ’ing’
^ SyntaxError: invalid syntax
C de oldu ˘gu gibi, Python’da da karakter dizileri indislenebilirler ( index ). Karakter dizisinin ilk karakterinin indisi sıfırdır. Python’da ayrı bir karakter veri tipi yoktur. Bir karakter tek karakterli bir karakter dizisidir. Icon dilinde (70’li yıllarda Ralph ve Marge Griswold’ün geli¸stirdi ˘gi Pascal benzeri bir SNOBOL4 türevi) oldu ˘gu gibi karakter dizilerinin bölümleri dilim gösterimi “[ : ]” ile ifade edilebilirler.
>>> kelime[4]
’o’
>>> kelime[0:2]
’Al’
>>> kelime[2:4]
’oo’
C dilinden farklı olarak, Python’da karakter dizileri de ˘gi¸stirilemezler. Bir karakter dizinin indislenen bir konumuna de ˘ger atamaya çalı¸smak hatadır:
>>> kelime[0] = ’x’
Traceback (most recent call last): File “<stdin>”, line 1, in ?
TypeError: object doesn’t support item assignment
>>> kelime[:1] = ’Splat’
Traceback (most recent call last): File “<stdin>”, line 1, in ?
TypeError: object doesn’t support slice assignment
Listeler
Python’da di ˘ger veri tiplerini bir gruba almayı sa ˘glayan birkaç bile¸sik veri tipleri vardır. Bunların en kullanı¸slı olan- larından biri listelerdir. Listeler kare parantez içine virgül ile birbirinden ayrılmı¸s de ˘gerlerden (eleman) olu¸surlar. Liste elemanlarının aynı tip olması gerekmez
>>>a = [’salam’, ’zeytin’, 100, 1234]
>>> a
[’salam’, ’zeytin’, 100, 1234]
Listeler de karakter dizileri gibi indislenebilir. ˙Indisler sıfırdan ba¸slar. Listeler dilimlenebilir, birle¸stirilebilir vs..
>>> a[0]
’salam’
>>> a[3]
1234
>>> a[-2]
100
>>> a[1:-1]
[’salam’,100]
>>> a[:2] + [’yumurta’, 2*2]
[’salam’,’zeytin’, ’yumurta’, 4]
>>> 3*a[:3] + [’Oley!’]
[’salam’, ’zeytin’, 100, ’salam’, ’zeytin’, 100,’
salam’,zeytin’,100,’Oley!’]
De ˘gi¸stirilemez (mutable) olan karakter dizilerinin aksine, listelerin her bir elemanı de ˘gi¸stirilebilir:
>>> a
[’salam’, ’zeytin’, 100, 1234]
>>> a[2] = a[2] + 23
>>> a
[’salam’, ’zeytin’, 123, 1234]
Liste dilimlerine de atama yapılabilir ve bu listenin boyunu da de ˘gi¸stirilebilir.
>>>
# Bazı elemanları de˘gi¸stir:
… a[0:2] = [1, 12]
>>> a
[1, 12, 123, 1234]
>>> # Bazı elemanları sil:
… a[0:2] = []
>>> a
[123, 1234]
>>> # Listenin içine elemanlar ekle:
… a[1:1] = [’bletch’, ’xyzzy’]
>>> a
[123, ’qwerty’, ’xyzzy’, 1234]
>>> a[:0] = a # Listenin kopyasını listenin ba¸sına ekle
>>> a
[123, ’qwerty’, ’xyzzy’, 1234, 123, ’qwerty’, ’xyzzy’, 1234]
Yerle¸sik fonksiyon len() listeler ile de çalı¸sır: