28 Haziran 2007 Perşembe

çizgi izleyen robotumuz

itü ve boğaziçi robot günlerine katıldı. itüde finale kaldı.

26 Haziran 2007 Salı

Python yapay sinir ağı modülü

yeni savaşımım bu kodla olucak. pythonda yapay sinir ağı çalışması (bpnn.py) bakalım çözebilcem mi=)

# Back-Propagation Neural Networks
#
# Written in Python. See http://www.python.org/
# Placed in the public domain.
# Neil Schemenauer

import math
import random
import string

random.seed(0)

# calculate a random number where: a <= rand < b
def rand(a, b):
return (b-a)*random.random() + a

# Make a matrix (we could use NumPy to speed this up)
def makeMatrix(I, J, fill=0.0):
m = []
for i in range(I):
m.append([fill]*J)
return m

# our sigmoid function, tanh is a little nicer than the standard 1/(1+e^-x)
def sigmoid(x):
return math.tanh(x)

# derivative of our sigmoid function
def dsigmoid(y):
return 1.0-y*y

class NN:
def __init__(self, ni, nh, no):
# number of input, hidden, and output nodes
self.ni = ni + 1 # +1 for bias node
self.nh = nh
self.no = no

# activations for nodes
self.ai = [1.0]*self.ni
self.ah = [1.0]*self.nh
self.ao = [1.0]*self.no

# create weights
self.wi = makeMatrix(self.ni, self.nh)
self.wo = makeMatrix(self.nh, self.no)
# set them to random vaules
for i in range(self.ni):
for j in range(self.nh):
self.wi[i][j] = rand(-2.0, 2.0)
for j in range(self.nh):
for k in range(self.no):
self.wo[j][k] = rand(-2.0, 2.0)

# last change in weights for momentum
self.ci = makeMatrix(self.ni, self.nh)
self.co = makeMatrix(self.nh, self.no)

def update(self, inputs):
if len(inputs) != self.ni-1:
raise ValueError, 'wrong number of inputs'

# input activations
for i in range(self.ni-1):
#self.ai[i] = sigmoid(inputs[i])
self.ai[i] = inputs[i]

# hidden activations
for j in range(self.nh):
sum = 0.0
for i in range(self.ni):
sum = sum + self.ai[i] * self.wi[i][j]
self.ah[j] = sigmoid(sum)

# output activations
for k in range(self.no):
sum = 0.0
for j in range(self.nh):
sum = sum + self.ah[j] * self.wo[j][k]
self.ao[k] = sigmoid(sum)

return self.ao[:]


def backPropagate(self, targets, N, M):
if len(targets) != self.no:
raise ValueError, 'wrong number of target values'

# calculate error terms for output
output_deltas = [0.0] * self.no
for k in range(self.no):
error = targets[k]-self.ao[k]
output_deltas[k] = dsigmoid(self.ao[k]) * error

# calculate error terms for hidden
hidden_deltas = [0.0] * self.nh
for j in range(self.nh):
error = 0.0
for k in range(self.no):
error = error + output_deltas[k]*self.wo[j][k]
hidden_deltas[j] = dsigmoid(self.ah[j]) * error

# update output weights
for j in range(self.nh):
for k in range(self.no):
change = output_deltas[k]*self.ah[j]
self.wo[j][k] = self.wo[j][k] + N*change + M*self.co[j][k]
self.co[j][k] = change
#print N*change, M*self.co[j][k]

# update input weights
for i in range(self.ni):
for j in range(self.nh):
change = hidden_deltas[j]*self.ai[i]
self.wi[i][j] = self.wi[i][j] + N*change + M*self.ci[i][j]
self.ci[i][j] = change

# calculate error
error = 0.0
for k in range(len(targets)):
error = error + 0.5*(targets[k]-self.ao[k])**2
return error


def test(self, patterns):
for p in patterns:
print p[0], '->', self.update(p[0])

def weights(self):
print 'Input weights:'
for i in range(self.ni):
print self.wi[i]
print
print 'Output weights:'
for j in range(self.nh):
print self.wo[j]

def train(self, patterns, iterations=1000, N=0.5, M=0.1):
# N: learning rate
# M: momentum factor
for i in xrange(iterations):
error = 0.0
for p in patterns:
inputs = p[0]
targets = p[1]
self.update(inputs)
error = error + self.backPropagate(targets, N, M)
if i % 100 == 0:
print 'error %-14f' % error


def demo():
# Teach network XOR function
pat = [
[[0,0], [0]],
[[0,1], [1]],
[[1,0], [1]],
[[1,1], [0]]
]

# create a network with two input, two hidden, and one output nodes
n = NN(2, 2, 1)
# train it with some patterns
n.train(pat)
# test it
n.test(pat)



if __name__ == '__main__':
demo()

24 Haziran 2007 Pazar

python kodları.2

x üssü n i hesaplayalım:


  • n sıfırsa 1 çıktısı ver
  • n mod 2 de 0 yani çift sayı ise
  • x in x le çarpımını n/2 sayısıyla bu fonksiyonda yeniden çalıştır.
  • böylece n/2k=1 e kadar xler kademeli olarak çarpılmış olacaktır.
  • n tek sayı ise (yukardaki işlemlerden sonra elde ettiğimiz n/2k=1 de dahil)
  • x çarpanını ayırıp n i çift sayı haline getirir ve çift sayılardaki işlemi uygular.

fields madalyalı bloglar

fields madalyası sahibi iki matematikçinin blogları

python kodları.1

sıfırdan n e kadar olan sayıların toplanması:



def ile topla isimli ve n girdili bir fonksiyon tanımlanmıştır.

sonuc=0 ve i=1 tanımlamaları yapılmıştır. bunlar ilerde kullanılacak değişkenlerdir. while ile i nden küçük ve eşit olduğu sürece çalışacak bir döngü oluşturulmuştur. her döngüde sonuç i ile toplanıp değeri arttırılacak ve i bir arttırılacaktır bölece i ne kadar artar ve return sonuc ile döngüden çıkıp sonucu elde eder.
mesela n=5 için döngüye bakalım:

  • sonuc=s=0 ve i=1, i nden küçük ve döngü başlar:
  • s= 0+1, i =1+1=2, n den küçük döngüye devam,
  • s=1+2, i=2+1=3, yine nden küçük
  • s=3+3, i=3+1, yine,
  • s=6+4, i=4+1=5, n e eşit son bir döngü daha,
  • s=10+5, i=5+1=6 ve nihayet n den büyük ve döngüden çıkar.
  • return sonuc a gelir ve cevabı geri döndürür.

python kodları.0

bi sitede python kodları buldum. burada da anlayabildiklerimi yazmaya çalışacağım.


ilki faktöriyel hesaplama:


def ile fonksiyon tanımlanmış fonksiyonun adı faktoryel kullanılan girdi de n dir.

eğer n sıfıra eşitse program 1 çıktııs verir ve biter bunu return komutu sağlar.
sıfırdan farklı bir değerse n faktoryal (n-1) fonksiyonu ile çarpılıp işlem biter. ancak faktoryel n-1 sıfırdan farklı ise o fonksiyonda da (n-1) le faktoryel(n-1 - 1) işlemi vardır ve bu sıfıra kadar gider. sonuç olarak n(n-1)(n-2)(n-3)...(n-(n-2))(n-(n-1) e kadar sürer işlemimiz ve bu da n! e eşittir.

23 Haziran 2007 Cumartesi

pythona devam II


Tüpler listeye benzer ama içerikleri değiştirilemez. Tüpün elemanları parantez içerisinde sıralanır. Program akışını hızlandırdıkları için programlarda dizilerin yerine kullanılırlar.



Sözlükler listelere benzerler ancak verilerin konumlarını 0 dan başlayan sayılar yerine kendimiz belirleyebiliriz. Bu konum kelimelerine anahtarlar denir. Sözlükteki anahtarları keys() fonksiyonu ile buluruz.

bilgi.keys() gibi.

bilgi.has_key('aranan anahtar') bir anahtarın o sözlükte olup olmadığını bulmamızı sağlar. varsa True yoksa False cevabını verir.

sözlüteki değerleri görüntülemek için values() fonksiyonunu kullanırız.

bilgi.values() gibi.

items() bir sözlükteki anahtar, değer ikililerini (tüplerini) elde etmemizi sağlar.

bilgi.items() şeklinde kullanılır.



yazılarda bahsedilen listeler sözlükler vetüpler iç içe kullanılabilinir.

get() ile sözlükteki bir anahtarın değerini getirir. eğer sözlükte o anahtar yoksa birşey yapmaz, hata vermez. get(x,y) de ise sözlükte eğer x anahtarı yoksa y ye geçer.

del() ile bir anahtarı sözlükten silebiliriz.

clear() ile bir sözlükteki bütün anahtarları ve bağlantılarını silebiliriz.



uptade() ile bir sözlükteki anahtarların değeri başka sözlüktekilerle değiştirilebilir.

>>> sos1={'ahe':2.999,'veha':11111,'dela':222}
>>> sos2={'ahe':3,'veha':0}
>>> sos1.update(sos2)
>>> sos1
{'dela': 222, 'veha': 0, 'ahe': 3}
>>>

9 Haziran 2007 Cumartesi

scheme eskizlerine devam.

Teach Yourself Scheme in Fixnum Days

kaynağına bakıyorum ordan da bazı karalamalar.

ilk iş merhaba dünya olayına girişmişler=)


;ilk program
(begin
(display "Merhaba, Dünya!")
(newline))

noktalı virgül yorumdur.





Boolean cebir elemanları 1 = #t (true dan), 0= #f (false dan) olarak tanımlanmıştır.

not boolean tersi işlemidir. sıfırsa bir birse sıfıra çevirir.

(not #f)              =>  #t
(
not #t) => #f
(
not "Hello, World!") => #f

boolean? boolean cebiri için tanımlanmış ifade olup olmadığına bakar.

(boolean? #t)              =>  #t
(
boolean? "Hello, World!") => #f

scheme de number kavramı (sayı) bütün tam sayıları (integers), rasyonel sayıları (rationals),
reel (reals) ve karmaşık (complex) sayıları kapsar. bir verinin sayı olup olmadığı number?
sorgusu ile yapılır. diğer veri yapısı sorguları da aşağıdaki gibidir.

(
number? 42) => #t
(
number? #t) => #f


(complex? 2+3i) => #t

(
real? 2+3i) => #f
(
real? 3.1416) => #t
(
real? 22/7) => #t
(
real? 42) => #t

(
rational? 2+3i) => #f
(
rational? 3.1416) => #t
(
rational? 22/7) => #t

(
integer? 22/7) => #f
(
integer? 42) => #t


#b ikili sistemi temsil eder. #b1100 yazdığımızda onluk sisteme dönüştürülür (12).
#o sekizlik, #x ise 16lık hex sistemini temsil eder.

eqv? eşit olup olmadığını test eder.

(eqv? 13 13)
(eqv? 13 #t)
(eqv? 13 #f)
(eqv? 13 13.0)

ayrıca sayılar için = de kullanılır
.

(= 42 42)   =>  #t
(
= 42 #f) -->ERROR!!!
(
= 42 42.0) => #t



(< 3 2) => #f
(
>= 4.5 3) => #t
büyüklük küçüklük ve büyük eşitlik gibi ifadeler normal matematikteki
gibidir.

(< 3 2)    =>  #f
(
>= 4.5 3) => #t

üssünü almak expt ile olur.

(expt 2 3) => 8
(
expt 4 1/2) => 2.0

ilk ifade yoksa - de ilk ifade sıfırmış gibi / de de 1 miş gibi
davranır.

(- 4) => -4
(
/ 4) => 1/4
maksimum ve minumum değerleri bulmak için max ve min
kullanılır.

(max 1 3 4 2 3) =>  4
(
min 1 3 4 2 3) => 1


karakterler /# ön ekiyle tanımlanırlar. #\c , c karakteridir. #\newline ,
#\tab gibi kullanılabilirler. space tuşu #\ veya #\space şeklinde gösterilebilir.

Bir verinin karakter olup olmadığı char? ile sorgulanabilir.

(char? #\c) =>  #t
(char? 1)
=> #f
(char? #\;)
=> #t

karakterlerin karşılaştırılması da
char=?, char, char<=?, char>?,
char>=? şekillerinde yapılabilir.

(char=? #\a #\a)  =>  #t
(char #\a #\b) => #t
(char>=? #\a #\b) => #f

karakterleri büyüklük küçüklük hassasiyeti olmadan karşılaştırma yapmak
için char-ci kullanılır.

(char-ci=? #\a #\A) => #t
(char-ci #\a #\B) => #t

küçük harflerin büyük harflere dönüştürülmesi char-upcase, büyüklerin de küçük
harflere dönüştürülmesi char-downcase komutları ile yapılır.

(char-downcase #\A) => #\a
(char-upcase #\a) => #\A

Semboller değişken tanımlamakta kullanılırlar. sembolleri belirtmek için
quote veya ' kullanılır. (buraları ben de pek anlamadım.)

(quote xyz)
=> xyz

'E

(quote E)

sorgulaması symbol? ile yapılır.

(symbol? 'xyz) => #t
(symbol? 42) => #f


Shceme de sembollerin büyük küçük duyarlılığı yoktur.


(eqv? 'Calorie 'calorie)
=> #t
define ile global değişken ataması yapabiliriz.

(define xyz 5)

xyz
=>  5

set! ile değişkenin değerini değiştirebiliriz.

(set! xyz #\c)

xyz
=> #\c

string harfleri birleştirmeyi sağlar.

(string #\M #\e #\r #\h #\a #\b #\a)
=>"Merhaba"

string-ref ise istenen sıradaki harfi verir.

(define aa "Merhaba ; Merhaba!")

(string-ref aa 9)
=>#\space

(string-ref aa 0)
=>#\M

(string-ref aa 1)
=>#\e
string-append ile ekleme yapabiliriz

string-append aa " mrb." " slm.")
=>"Merhaba ; Merhaba! mrb. slm."

define ve string i birlikte kullanarak da tanımlama yapabiliriz.

(define mrb (string #\M #\e #\r #\h #\a #\b #\a))
mrb
=>"Merhaba"

string-set! ile dizideki karakterlerden istediğimizi değiştirebiliriz.

(string-set! mrb 1 #\i)
mrb
=>"Mirhaba"


matematik dünyasında sonsuz listelerle ilgili bir makale
bir makale buldum.




7 Haziran 2007 Perşembe

Matematik Dünyası


Yeni sayısı sonunda bayime geldi. Aslında bilgi üniversitesi evime yakın ve dergi çıkalı baya oldu ama yine de bayiden almak daha güzel. Kapak konusu olarak kesirli diziler ve gerçel sayıları seçmişler. bakalım neler varmış içinde.

6 Haziran 2007 Çarşamba

scheme karalamalar


sicp kitabı ile schemeyi kurcalıyorum bakalım noolcak =)

MIT nin GNU schemesini kullanamadım (run emacsdakinden farklıydı bulamadım) onun yerine DrScheme kullanıyorum. dosyalar .scm olarak kaydediliyor. Dili içgüdüsel olarak standart seçtim (Language: Standard (R5RS).)

linuxda açmak için badis@badis-laptop:~$ drscheme yazmanız yeterlidir.
kaydettiğiniz betiği de badis@badis-laptop:~$ drscheme betikadi.scm şeklinde geri çağırıp üstünde çalışabilirsiniz.


(+ 333 234)
567
(* 12 5 4)
240
(- 11 3 )
8
(+ (* 4 5) (- 4 6))
18
(+(* 3(+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))
57

(- 4 5 6 7)
-14

en son yaptığımız çıkarmada ilk elemandan diğer üçünü çıkarmaktadır. schemede common lisp deki gibi önce komut ardından listenin elemanları geliyor.


tanımlamaları define ile yaparız.

(define boy 20)
boy
(* 5 boy)


(define pi 3.141592654)
(define yaricap 5)
(define cevre (* 2 pi yaricap))
cevre
(define alan (* pi yaricap yaricap))
alan



(* (+ 2 (* 4 6))
(+ 3 5 7))

bu işlemin ağacına bakalım: 3,5,7 bir dallanma 4,6 ayrı ancak 2 ile birleşiyor. aşağıda agacı mevcuttur kitaptan copy paste edilmiştir.
(kendime not okulun sitesinde bulduğum ağaç slaytlarına çalış devre teorisinde gördüğün graflar yetmeyecektir, teorini güçlendir!)



bana muhteşem gelen bir şey okudum az önce. fonksiyonu anında tanımlıyoruz ve anında kullanabiliyoruz. çok güzel bir özellik bence.

temel yapısı:

(define (fonksiyon-adı paramatre1 par2..) (işlem par1 par2..))


(define (kare x) (* x x))
(kare 7)
(kare (+ 4 5))
(kare (kare 4))
(define (kareler-toplamı x y)(+ (kare x) (kare y)))
(kareler-toplamı 6 8)
(define (f z)
(kareler-toplamı (* z z) (* z 4)))
(f 5)


DrScheme'nin güzel bir özelliği de imleç paranteze geldiğinde parantezin bitimine dek renklendirmesi böylece hata yapmamı önlüyor. Dallanmanın nasıl olduğunu kolayca anlamamı sağlıyor.

matlab'a giriş

merhaba arkadaşlar bu dönem matlabi ders olarak aldım ve geliştirmek istiyorum. karşılıklı öğrenme amacı güden bir programım olucak. matlabi matematikteki sembolleri kullanarak program yazabildiğimiz, simülasyonlar, 3d çizimler, değişik kontrol sistemleri tasarlayabileceğimiz bir programlamlama dili olarak düşünebiliriz. c tabanında yazılmıştır. c ile etkileşimli kullanılabilir. yüksek seviyede bir dildir. burada kullandığımız yüksek terimi makina diline olan uzaklığıdır. neyse şimdi başlayabiliriz.

matlabde kafanıza bişi takılıyosa

help bişi bişi yazın o konu hakkında bilgi gelecektir.

matlabın açılımı matrix laboratory dir, matrisler üzerine kurmuşlar programı. programın babası da elektrik mühendisi ve matematikçiymiş.
yani sen bir sayı girdiğinde o bunu matris olarak algılıyor. matris işlemlerini de kolaylaştırıyor.

ama öncelikle farklı olan matematiksel işaretleri gösterelim:

* çarpma

/ bölme

^ üs alma 2^3=8 gib
pi yazınca pi sayısının aslına yakın yuvarlanmış bir sayı gelir.i

virgülden sonraki sayıları göstermek için nokta kullanılır.

| bu işaret mantıksal ifadelerde işe yarıyacak ben c çalışırken bulmam baya bi zaman almıştı >< a="rand(4,4)" a="randn(3,3)" x="3+4i" x="3+4j" ans="0,9273" x="3-4i)">> a=rand(4,4)

a =

0.9355 0.0579 0.1389 0.2722
0.9169 0.3529 0.2028 0.1988
0.4103 0.8132 0.1987 0.0153
0.8936 0.0099 0.6038 0.7468

şimdi tersini alalım:

>> inv(a)

ans =

-1.5054 3.6825 -1.4860 -0.4013
5.3255 -7.0376 3.9063 -0.1473
-20.0637 22.9531 -8.5486 1.3769
17.9531 -22.8718 8.6384 0.7080

determinantı:

>> det(a)

ans =

-0.0154

transpozesi:

>> a'

ans =

0.9355 0.9169 0.4103 0.8936
0.0579 0.3529 0.8132 0.0099
0.1389 0.2028 0.1987 0.6038
0.2722 0.1988 0.0153 0.7468

özdeğer bulma:

>> eig(a)

ans =

1.6101
-0.0489
0.3363 + 0.2878i
0.3363 - 0.2878i

şeklinde olur.

polinom eşleniğini bulmak için

p=poly(a)

p =

1.0000 -2.2338 1.1673 -0.2529 -0.0154

buraki sayılar polinomun katsayılarıdır.

x^4-2.2338x^3+1.1673x^2-02529x-0.0154 anlamındadır.

polinomun köklerini bulma:

>> roots(p)

ans =

1.6101
0.3363 + 0.2878i
0.3363 - 0.2878i
-0.0489

özdeğerle aynı olduğu görülür.

dizi oluşturma

>> x=1:5

x =

1 2 3 4 5

0,5er artımla dizi oluşturma:

>> x=1:0.5:5

x =

Columns 1 through 7

1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000

Columns 8 through 9

4.5000 5.0000

y=x^3 olmaz x kare matris olmadığı için sorun çıkar. elemanter çarpım için

y=x.^3 '.' kullanılır.

5 Haziran 2007 Salı

kurallarım

1- yanımda çocuk taklidi yapmayın. en yakındaki kesici aletle gırtlağınızı keserim.

2-hayvanlara zarar vermeyin. topunuzu keserim.

3-içeceğime dokunmayın.

4-bilimi nerde kullanıcaz zaten bunları deyip küçümsemeyin. en azından yanımda.

5-büyük harfle konuşmayın.

6-zeki olduğunuzu düşünmeyin. elbet daha zekisi çıkar.

7-aptallaşmayın.

8-yüzünüze aşırı makyaj yapmayın. aşırı jöle de sürmeyin.

9-dünyayı takmıyorum deyip imaj yapmayın takmayan adam imajı da ***lemez kendini de.

10-adam gibi için.

11-denizde yüzün, işemeyin.

12-bana inanın.

13-gözlerinizi sigarayla yakmaya çalışmayın.

python kitabından notlar I

kitabı yeni aldım geri dönüp bakabilmek için notlarım:

3. Bölüm:

>>> a=8
>>> a=a+22
>>> a
30


burada a ya a+22 ifadesi atanmıştır.

>>> c="çağdaş"
>>> c
'\xc3\xa7a\xc4\x9fda\xc5\x9f'
>>> print c
çağdaş

cümle değişkenlere Türkçe karakter atarken sorun çıkmıyor sadece python onu nasıl algıladığını belirtiyor. print c yazınca olması gerektiği gibi görünüyor.

>>> merhaba="Adana'ya ilk gelişiniz mi?"
>>> print merhaba
Adana'ya ilk gelişiniz mi?

kesme işaretiyle ayırmamız gereken bir yer olduğu için, en dışa tırnak işareti koyduk.

>>> arkadasim='"Burada dalmak çok güzel olur baksana cam gibi yukardan bakınca dip görünüyor" dedi.'
>>> print arkadasim
"Burada dalmak çok güzel olur baksana cam gibi yukardan bakınca dip görünüyor" dedi.

Burada alıntı yapmamız gerekti ve en dışa kesmeleri koyduk.

>>> a=9
>>> b="5"
>>>
>>> a=3
>>> b="9"
>>> c=a+b

Traceback (most recent call last):
File "", line 1, in
c=a+b
TypeError: unsupported operand type(s) for +: 'int' and 'str'

buradaki hata

>>> c=a+int(b)
>>> print c
12

yada

>>> c=str(a)+b
>>> print c
39

şeklinde çözülür.

int fonksiyonu cümle değerlerini tamsayıya çevirmek için kullanılır.

>>> int("765")
765

noktalı değerlerde float kullanılır.

>>> float("383.2")
383.19999999999999

str fonksiyonu ise ondalık veya tam sayıları cümle (string) değerlerine çevirmemizi sağlar.

>>> str("234")
'234'
>>> str(1321)
'1321'
>>> str(123.45)
'123.45'

>>> a=14
>>> a.__str__()
'14'

a.__str__() tarzı işlemler nesne modelinde kullanılır.

len() cümlenin uzunluğunu verir.

>>> len("Nasılsın komşu?")
18

>>> "Nasılsın komşu?".__len__()
18

Türkçe karakterlerin 2 olarak değeri olduğunu gördüm.

listeler

>>> p=['ysa', 'perl', 'ga']
>>> p[1]
'perl'
>>> p[:]
['ysa', 'perl', 'ga']
>>> p
['ysa', 'perl', 'ga']
>>> p[0]; p[2]
'ysa'
'ga'
>>> p=p+['pascal']
>>> p
['ysa', 'perl', 'ga', 'pascal']

>>> p[-1]
'pascal'
>>> p[-3]
'perl'

>>> p[1:3]
['perl', 'ga']
>>> p[1:2]
['perl']
>>> p[0:3]
['ysa', 'perl', 'ga']

>>> p.append('frp')
>>> p
['ysa', 'perl', 'ga', 'pascal', 'frp']

listeler birer nesnedir, nesnelerin özelliklerini görmek için dir(nesne) komutu kullanılır.

>>> p=p+['perl']
>>> p
['ysa', 'perl', 'ga', 'pascal', 'frp', 'perl']
>>> p.count('perl')
2

count() bir listedeki bir elemanın kaç tane bulunduğunu verir.

>>> p.extend(['common lisp','fortran'])
>>> p
['ysa', 'perl', 'ga', 'pascal', 'frp', 'perl', 'common lisp', 'fortran']

extend() 'le iki liste toplanır.

index() listedeki bir elemanın yerini verir. eğer birden fazla varsa ilk konumunu verir. olmayan bir elemanı sorgularsanız hata verir.

['ysa', 'perl', 'ga', 'pascal', 'frp', 'perl', 'common lisp', 'fortran']
>>> p.index('perl')
1

insert() listenin istenen yerine ekleme yapmak için kullanılır.

>>> p.insert(3,'scheme')
>>> p
['ysa', 'perl', 'ga', 'scheme', 'scheme', 'pascal', 'frp', 'perl', 'common lisp', 'fortran']

pop() listenin son elemanını siler.

>>> p.pop()
'fortran'
>>> p
['ysa', 'perl', 'ga', 'scheme', 'scheme', 'pascal', 'frp', 'perl', 'common lisp']

remove() eleman silmek için kullanılır. birden fazla varsa o elemandan ilkini çıkrarır.

>>> p.remove('perl')
>>> p
['ysa', 'ga', 'scheme', 'scheme', 'pascal', 'frp', 'perl', 'common lisp']

reverse() , diziyi ters çevirir.

>>> p.reverse()
>>> p
['common lisp', 'perl', 'frp', 'pascal', 'scheme', 'scheme', 'ga', 'ysa']

sort() listenizi sayılardan başlamak üzere alfabetik olarak sıralar.

['common lisp', 'perl', 'frp', 'pascal', 'scheme', 'scheme', 'ga', 'ysa']
>>> p=p+[16, 233]
>>> p
['common lisp', 'perl', 'frp', 'pascal', 'scheme', 'scheme', 'ga', 'ysa', 16, 233]
>>> p.sort()
>>> p
[16, 233, 'common lisp', 'frp', 'ga', 'pascal', 'perl', 'scheme', 'scheme', 'ysa']

len() listenizin kaç elemandan oluştuğunu bulursunuz

>>> len(p)
10

>>> p.__len__()
10

listeyi tamsayıyla çarpma listenin ardarda yazılmasıdır.

>>> x=['y','z']
>>> x*3
['y', 'z', 'y', 'z', 'y', 'z']
>>> x
['y', 'z']

yaptığımız işlemde x'i 3 le çarptık ama x'e başka bir değer atamadık. liste toplamında da bu böyledir.

>>> x
[1, 3, 5]
>>> y=x
>>> y.append(7)
>>> x
[1, 3, 5, 7]
>>> y
[1, 3, 5, 7]

buradali y=x x'e y etiketinin verildiğidir. ikisi ayrı nesneler olmuyor. onun için y'yi x den ayrıca kopyalamak gerekir.

>>> import copy
>>> x=[1,3,5]
>>> y=copy.deepcopy(x)
>>> y.append(7)
>>> y
[1, 3, 5, 7]
>>> x
[1, 3, 5]

şeklinde sorunumuz çözülür.

Tüpler listeye benzer ama içerikleri değiştirilemez. Tüpün elemanları parantez içerisinde sıralanır.

komik filmler

sakar şakir






hacı hoca


4 Haziran 2007 Pazartesi

python'a giriş

bu aralar bu dile başladım (beraberinde common lisp ve scheme ye de bakmaya çalışıyorum). Pythonda öğrenebildiklerimi burda aktarmaya çalışacağım. python özgür yazılımdır. (açık kaynak, gnu). nesneye yönelimli bir dildir. öncelikle yüklemekle başlayabiliriz.

son sürümü şimdilik 2.5.1 dir. küçük bişidir.

buradan indirebilirsiniz..

linuxlarda hazır gelmektedir konsola python yazın gelicektir. ancak idle adında editörü de mevcuttur. ben ubuntu kullanıyorum ve kurduğumda idle yoktu, paket yöneticisinden kolayca yükledim. windows sürümünde dökümanları ve idle'yla birlikte gelmektedir.

yükleme işlemi bittikten sonra konsola idle yazın gelicektir. (uygulamalar>programlama>idleden de açabilirsiniz ama konsoldan açmak kadar sağlıklı olmadığı tecrübe edilmiştir)

karşımıza aşağıdaki gibi bir pencere gelmesi lazım.





şimdi ilk işimiz yazılımın kutsal olayını gerçekleştirmek.

>>>print "merhaba, dünya!"

yazın.

>>> 1 + 1
2
>>> a=3
>>> b=5
>>> a*3
9
>>> a,b = 5,20
>>> a+b
25

direkt x=10 gibi tanımlamalar yapabilirsiniz. yada a,b örneğinde olduğu gibi iki değişkeni de aynı anda tanımlayabilirsiniz.

>>> u=v=d=11 şeklinde de tanımlama yapabilmeniz mümkün.




>>> type(3.2)

>>> type("asasasas")

>>> type(33)


şekinde verilerin tipini öğrenebiliriz.

type fonksiyonu harf karakterleri direkt tanımaz hata verir. bu yüzden direkt yazmak yerine onları da tanımlayabiliriz. evet sırf zevk için yapabiliriz bunu.

>>> asasas= "epoke pythonda da mı var?"
>>> print asasas
epoke pythonda da mı var?
>>> type(asasas)


virgüllü değerler:

>>> 7/3
2

veya

>>> 5/6
0

yazarsak virgülden sonrasını hiç tanımadığını görürüz. virgüllü sayıları elde etmek için

>>> 7.0/3
2.3333333333333335
>>> 5/6.0
0.83333333333333337

şeklinde işlemlerimizi yapabiliriz.





idle' de yazdığınız betikleri direkt kaydedemezsiniz. çünkü orası etkileşimli bir ortamdır ve yazdıklarınız python tarafından anında yorumlanır.

sorunu çözmek çok basit, menüden File>New window u seçip oraya yazarsınız ve orada yazdıklarınızı kaydedip daha sonra tekrar çalıştırabilirsiniz.

şimdi değişken atamalardan devam edelim.

değişkenimizi atarken (kilo=5 gibi) karakterler arasında boşluk bırakmamalıyız onun yerine _ altçizgi kullanabiliriz.
dikkat etmemiz gereken diğer bir nokta da bazı anahtar kelimelerin değişken adı olarak kullanılamaması.

29 tane anahtar kelime vardır:

and else import raise
assert except in return
break exec is try
class finally lambda while
continue for not yield
def from or
del global pass
elif if print

Matematiksel ifadelerde öncelik parantez içlerinindir. Daha sonra üslü ifadeler gelir. Pythonda üslü ifadeler a**b şeklinde gösterilir. Matlab'de kullanılan ^ işareti kullanılmaz. o işaret iki sayının farkının mutlak değerini elde etmek için kullanılır. Üslü ifadelerden sonra çarpım (*) ve bölüm (/) işlemleri aynı öncelik sırasına sahiptirler. Bu iki işlemden sonra da toplama ve çıkarma gelir.

Karakterlerden oluşan elemanlar kendi aralarında toplanabilir, bu yan yana dizilmeleri şeklinde olur. Karakter elemanı bir sayıyla çarpılırsa ardarda çarpıldığı sayı kadar yazdırılır. Ancak karakter ve sayılar arasında toplama çıkarma ve ölme yapılamaz.


>>> a="Ali"
>>> b=" ata"
>>> c=" bak."
>>> print a+b+c
Ali ata bak.
>>> "Ali bak"*3
'Ali bakAli bakAli bak'
>>> "Ali bak. "*5
'Ali bak. Ali bak. Ali bak. Ali bak. Ali bak. '




Klavye girişleri:

Programınızda kullanıcıdan bilgi almak veya bazı fonksiyonların değerlerini kullanıcıdan istemek için girdi istenebilir. Pythonda input ve raw_input fonksiyonlarıyla bu girişler yapılabilir. input sayısal değerler için raw_input ise karakter girişi iin kullanılır. raw_input fonksiyonunda Türkçe karakterler sorun çıkarmaktadır.

>>> k=raw_input('bir cümle giriniz:')
bir cümle giriniz:Merhaba
>>> k
'Merhaba'
>>> l=input('bir sayı giriniz')
bir sayı giriniz148
>>> l
148

Kodunuzun neresinde hangi işlemleri yaptığınızı hatırlamak için yada başkaları tarafından kolay anlaşılır olması için # karakteri ile yorumlar koyabilirsiniz.

>>> #yorumların programda etkisi yoktur.


 
eXTReMe Tracker