PDA

Tam Sürümünü Görmek İçin : Anahtar kelime?


dr0gb4
16/04/2007, 15:09
selam
ben yeni başladım Python a bu anahtar kelime olayı var önceden belirlenmiş kelimeler yazılıdıgında belirli cevapları verıyor bu konu hakkında bana örnek verebilirmisiniz.


dkoksal
16/04/2007, 15:10
Örnek verebilir misin, hiç bişi anlamadım.

dr0gb4
16/04/2007, 15:14
tabii mesele bu bi dökümanda buldum ama yapamadım
def kasapdukkani(etCinsi,*argumanlar, **anahtarKelimeler):
print "--", etCinsi, "var mi ?"
print "-- Maalesef", etCinsi, "kalmadı."
for arg in argumanlar:
print arg
print '-'*40
anahtarlar = anahtarKelimeler.keys()
anahtarlar.sort()
for ak in anahtarlar:
print ak, ':', anahtarKelimeler[ak]

hasanyasin
16/04/2007, 16:36
???

dkoksal
16/04/2007, 16:40
Yardımcı olmak istiyorum fakat yine anlamadığımı üzülerek belirtmek isterim.
Hangi amaçla kullanıyorsun bu kodu?
Sıkıntı nedir?
tabii mesele bu bi dökümanda buldum ama yapamadım
def kasapdukkani(etCinsi,*argumanlar, **anahtarKelimeler):
print "--", etCinsi, "var mi ?"
print "-- Maalesef", etCinsi, "kalmadı."
for arg in argumanlar:
print arg
print '-'*40
anahtarlar = anahtarKelimeler.keys()
anahtarlar.sort()
for ak in anahtarlar:
print ak, ':', anahtarKelimeler[ak]

dr0gb4
16/04/2007, 17:00
Yardımcı olmak istiyorum fakat yine anlamadığımı üzülerek belirtmek isterim.
Hangi amaçla kullanıyorsun bu kodu?
Sıkıntı nedir?
ya mesela buraya et varmı? yazınca o belirlenen kelimelerden cavap verıyor anahtar kelimeler koyuluyor melesa et , şeker vs gibi sordugunda cevap verıyor böyle bir kod
yeni başladım ögrenme amaclı kurcalıyorum fakat bunu yapamadım

hasanyasin
16/04/2007, 17:05
Ben şimdi anladım dr0gb4 neyi sormak istiyor:) Sanırım fonksiyon deklarasyonunu anlamamış...

Sevgili dr0gb4, Python'da fonksiyon parametreleri okumakta olduğunuz o kötü çevirili metinde belirtildiği gibi farklı şekillerde işlenebilir. Normalde, beklediğimiz sayıda argüman üzerinde işlem yaparız; ama Python bizi hiç uğraştırmadan çok daha esnek bir yapıya da imkan sağlar.


def fonksiyonumunAdi ( *parametreler ):
print "İlk parametre: ", str(parametreler[0])


Bu fonksiyona fonksiyonumunAdi(32,242,134,1,3,2131) gibi dilediğimiz sayıda parametre girebiliriz. Fonksiyonun içinde parametreler[] listesi bize tüm bu parametreleri sağlar.

Ayrıca eğer fonksiyon tanımlarken parametre listemize **anahtarlar diye ekleme yaparsak, anahtarlar nesnesi, anahtar=deger şeklinde fonksiyona girilen parametrelere erişebileceğimiz bir sözlük olacaktır.

dr0gb4
16/04/2007, 17:14
evet dogru anladın hasanyasin ama yok abi ya kafam basmadi benim bu duruma :)
çalışan bir örnek verebilirmisin :)

hasanyasin
16/04/2007, 17:21
Yazdığım iki satırlık şey de çalışan bir örnekti:)

Şimdi diyelim ki biz girilen tüm sayıların toplamını yazıp veren bir fonksiyon yazmak istiyoruz. Ne yaparız? def topla(a,b,c,d,e,f,g...) desek olmaz di mi:D Bu fonksiyona bir liste geçirebiliriz. Yani,
def topla(a): deriz ve a bir liste olur. Bu fonksiyonu çağıracağımız zaman topla([21,232,121]) şeklinde gireriz sayıları [] arasında yani bir liste olarak.

Lakin, biz şıklığa değer veren programcılar olarak diyoruz ki, adam bize liste girmesin, arka arkaya sıralanmış dilediği kadar parametre girsin.

İşte bunun için Python bize, parametreyi *prms şeklinde girmemiz hâlinde, prms diye bir liste (dizi) sağlar. Bu listede fonksiyona girilen tüm parametreler yer alır girildiği sırayla.


def topla(*a):
toplam=0
for i in a: toplam+=i
return toplam
Bu fonksiyonu topla(3,5,1,323,42) diye çalıştırdığımız zaman, fonksiyonun içindeki a dizisinde sırasıyla 3, 5, 1, 323 ve 42 yer alır. Yâni a[0] 3 değerine, a[3] ise 323 değerine sahip olur.

Bu kısmı anladık mı?

dr0gb4
16/04/2007, 17:26
evet anladım

hasanyasin
16/04/2007, 17:38
Nasıl ki bir parametreye *a dediğimiz zaman fonksiyon gövdesinde a diye bir listeyle fonksiyona girilen parametrelere sırayla ulaşabiliyoruz, aynı şekilde **a girersek eğer, o zaman da fonksiyona anahtar=deger şeklinde girilen parametreleri içeren bir sözlük elde ederiz a nesnesinde.


def otolar(**modeller):
araclar=modeller.keys()
for arac in araclar:
print "Araç:", arac, "- Model: ", modeller[arac]
Fonksiyonunu otolar(Ford=2004, Mercedes=2002, Fiat=2006) diye çağırabiliriz ve bize


Araç: Mercedes - Model: 2002
Araç: Fiat - Model: 2006
Araç: Ford - Model: 2004
diye çıktı verir.

dr0gb4
16/04/2007, 17:51
bende bir sorun olabilirmi
bu şekilde çalıştırmak için ugrasıyorum


def otolar(Ford=2004, Mercedes=2002, Fiat=2006):
araclar=modeller.keys()
for arac in araclar:
print "Araç:", arac, "- Model: ", modeller[arac]

hasanyasin
16/04/2007, 18:04
Satır başının yeri önemlidir. Python'da bloklar, girintiyle belirlenir. Yani C'de { ve } arasına alarak belirttiğimiz bir bloğu, Python'da satırların başını aynı hizada tutarak belirtiriz.

dkoksal
18/04/2007, 10:56
python da indentation diye aratırsanız çok fazla kod örneği bulabilirsiniz net üzerinde,
faydalı olabilir diye düşünerek bir ftp kod örneğini aşağıda inceleyebilirsiniz.

from ftplib import FTP

def handleDownload(block):
file.write(block)
print ".",

try:
ftp = FTP('195.***.12')
print 'Welcome to Matt''s ftplib example'
print 'Logging in.'
print ftp.login('turkcell','Turc');
except:
print 'FTP baglantisi kurulamadi'

directory = ''
ftp.cwd(directory)
ftp.retrlines('LIST')

filename = 'www.ear'
file = open(filename, 'wb')
print 'Getting ' + filename
ftp.retrbinary('RETR ' + filename, handleDownload)
print 'Closing file ' + filename
file.close()

print 'Closing FTP connection'
print ftp.close()