Upload
labsessions
View
296
Download
3
Tags:
Embed Size (px)
DESCRIPTION
Labsessions Kasım Ayından, Python Sunum'u.
Citation preview
License
You are free to:
Share – copy and redistribute the material in any medium orformat
for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as youfollow the license terms.
Under the following terms:
Attribution – You must give appropriate credit, provide a link to thelicense, and indicate if changes were made. You may do soin any reasonable manner, but not in any way thatsuggests the licensor endorses you or your use.
NoDerivatives – If you remix, transform, or build upon the material, youmay not distribute the modified material.
No additional restrictions – You may not apply legal terms ortechnological measures that legally restrict others fromdoing anything the license permits.
For details: https://creativecommons.org/licenses/by-nd/4.0/
Konular
1 Genel BilgilerGirisVeri TipleriUygulama
2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler
Konular
1 Genel BilgilerGirisVeri TipleriUygulama
2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler
Ozellikler
basit yazım, yuksek ifade gucu: daha az kod satırı
dinamik tip sistemi, guclu tip denetimi
coklu paradigma: nesneye dayalı, fonksiyonel
zengin standart kitaplık, her alanda cok sayıda ek paket
Calısma Sekilleri
.py uzantılı kaynak kodu dosyaları: hello.py
calıstırma: python hello.py
etkilesimli calısma: REPL (Read-Eval-Print Loop)
kullanıcının yazdıgı ifade hesaplanır ve sonuc basılır
>>> 5 + 8
13
>>> x = 14 * 3
>>> x
42
Yazım Kuralları
bir satıra bir komut
bir satırı gecen komutlarda satır sonuna \
# isaretinden satır sonuna kadarki kısım acıklama
bloklar tutarlı girintileme ile belirlenir
Konular
1 Genel BilgilerGirisVeri TipleriUygulama
2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler
Temel Veri Tipleri
tamsayı (int)
kayan noktalı sayı (float)
mantıksal (bool): True, False
katar (str): degerler ’ ya da " ciftleri arasında
katardaki simgelere indisleriyle erisilebilir ama degistirilemez
karakter tipi yok: 1 uzunluklu katar
Koleksiyon Tipleri
liste (list): [i1, i2, ...]
coklu (tuple): (i1, i2, ...)
sozluk (dict): {k1: v1, k2: v2, ...}
kume (set): {i1, i2, ...}
coklularda eleman degistirilemez, eklenemez, cıkarılamaz
sozluklerde ve kumelerde elemanlar sırasız
kumelerde eleman, sozluklerde anahtar tekrarlanmaz
eleman sayısı: len(collection)
uyelik sorgulama: item in collection
Elemanlara Erisim
liste ve coklularda ilk elemanın indisi 0
indis aralıgı verilebilir (yarı acık): collection[start:end]
negatif indisler sondan baslayarak sayılır
>>> years = [2012, 1988, 1992, 2001, 1995, 2013]
>>> years[2:5]
[1992, 2001, 1995]
>>> years[2:]
[1992, 2001, 1995, 2013]
>>> years[:3]
[2012, 1988, 1992]
>>> years[-1]
2013
>>> years[:-2]
[2012, 1988, 1992, 2001]
Konular
1 Genel BilgilerGirisVeri TipleriUygulama
2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler
Giris - Cıkıs
cıkıs: print(output1, output2, ...)
giris: input(prompt)
print("Hello, world!")
name = input("What is your name? ")
print("Hello", name)
Katar Formatlama
format_str % (v1, v2, ...)
format_str.format(v1, v2, ...)
>>> ’Today: %d.%d.%d’ % (30, 11, 2013)
’Today: 30.11.2013’
>>> ’Today: {0}.{1}.{2}’.format(30, 11, 2013)
’Today: 30.11.2013’
>>> name = ’Alan’
>>> print(’Hello %s!’ % name)
Hello Alan!
Paketler
bir paketi kullanmak icin: import package
paketten bir isme erisim: package.name
>>> import math
>>> math.pi
3.141592653589793
>>> math.sin(math.pi / 2)
1.0
Ornek: Mastermind
bilgisayar tutacak,insan bulmaya calısacak
renkler yerine rakamlar
rakam tekrarlanmıyor
hane sayısı degisken
Konular
1 Genel BilgilerGirisVeri TipleriUygulama
2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler
Secme
secme: if
if condition:
block
if condition:
block_true
else:
block_false
coklu secme yok
if condition_1:
block_1
elif condition_2:
block_2
...
else:
block_else
Yineleme
kosul uzerinden yineleme:while
while condition:
block
koleksiyon uzerinden yineleme:for
for item in collection:
block
en ic donguden cıkma:break
sonraki yinelemeye atlama:continue
Aralıklar
aralık olusturma: range(start, end, step)
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(7, 10))
[7, 8, 9]
>>> list(range(4, 10, 2))
[4, 6, 8]
indis uzerinden yineleme:
for i in range(len(collection)):
item = collection[i]
...
Ornek: Sır Secme
import random
n_items = 4
secret = []
i = 0
while i < n_items:
element = random.randrange(0, 10)
secret.append(element)
i += 1
print(secret)
ornek ekran cıktısı: [8, 4, 0, 0]
Ornek: Sır Secme (Tekrarsız)
secret = []
i = 0
while i < n_items:
element = random.randrange(0, 10)
unused = True
for item in secret:
if element == item:
unused = False
break
if unused:
secret.append(element)
i += 1
Yinelemeden Cıkıs
for dongulerinin else kısmı var
break ile cıkılmazsa calıstırılır
for item in collection:
block
if condition:
break
else:
block_if_no_break
Ornek: Sır Secme (Tekrarsız)
secret = []
i = 0
while i < n_items:
element = random.randrange(0, 10)
for item in secret:
if element == item:
break
else:
secret.append(element)
i += 1
Ornek: Sır Secme (Tekrarsız)
>>> import random
>>> choices = list(range(10))
>>> n_items = 4
>>> random.sample(choices, n_items)
[5, 1, 0, 3]
>>> choices = [’red’, ’green’, ’blue’, ’cyan’,
... ’magenta’, ’yellow’, ’black’, ’white’]
>>> n_items = 3
>>> random.sample(choices, n_items)
[’cyan’, ’yellow’, ’green’]
Konular
1 Genel BilgilerGirisVeri TipleriUygulama
2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler
Fonksiyonlar
fonksiyon tanımı: def
cagrıda parametreler isimle gecirilebilir
def name(parameter1, parameter2, ...):
block
return expression
Ornek: Sır Secme
def get_secret(choices, n):
secret = random.sample(choices, n)
return secret
choices = list(range(10))
n_items = 4
secret = get_secret(choices, n_items)
secret2 = get_secret(n=3, choices=choices)
Ornek: Tahmin Alma
def get_guess():
value = input("Make a guess: ")
guess = []
for c in value:
guess.append(int(c))
return guess
Ornek: Tahmin Degerlendirme
def evaluate_guess(guess, secret):
plus = 0
for i in range(len(secret)):
if guess[i] == secret[i]:
plus += 1
minus = 0
for i in range(len(secret)):
for j in range(len(secret)):
if (i != j) and (guess[i] == secret[j]):
minus += 1
return (plus, minus)
Ornek: Bir Denemeli Oyun
def main():
choices = list(range(10))
n_items = 4
secret = get_secret(choices, n_items)
print("I have selected a secret.")
guess = get_guess()
(plus, minus) = evaluate_guess(guess, secret)
print(’%d+%d-’ % (plus, minus))
main()
Alıstırma
kullanıcı sırrı bulana ya da oyunu bırakana kadar tekrarlansın
kullanıcı oyunu bırakacaksa tahmini bos bıraksın
kullanıcı sırrı bulursa kac kerede buldugu yazılsın
kullanıcı oyunu bırakırsa kac kereden sonra bıraktıgıve sırrın ne oldugu yazılsın
Konular
1 Genel BilgilerGirisVeri TipleriUygulama
2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler
Ornek: Rasgele Tahmin
tahmin eden oyuncuyu da bilgisayar oynasın
rasgele tahmin yapsın
def get_guess(choices, n):
guess = random.sample(choices, n)
return guess
Ornek: Rasgele Tahmin (Tekrarsız)
aynı tahmini birden fazla kere yapmasın
onceki tahminler bir listede tutulsun
def get_guess(choices, n, guesses):
guess = random.sample(choices, n)
while guess in guesses:
guess = random.sample(choices, n)
return guess
# in main()
guesses = []
while ...:
guess = get_guess(choices, n_items, guesses)
guesses.append(guess)
Ornek: Rasgele Tahmin (Tekrarsız)
onceki tahminler bir kumede tutulsun
guesses = set()
while ...:
guess = get_guess(choices, n_items, guesses)
guesses.add(guess)
TypeError: unhashable type: ’list’
Ornek: Rasgele Tahmin (Tekrarsız)
listeler kume elemanı ya da sozluk anahtarı olamaz
coklular olabilir
def get_guess(choices, n, guesses):
guess = tuple(random.sample(choices, n))
while guess in guesses:
guess = tuple(random.sample(choices, n))
return guess
degismeyecek diger listeler de coklu olsa daha iyi:choices, secret
Ornek: Gecerli Tahmin
onceki tahminlerle celisen tahmin yapmasın
olası tum sırları ve onceki tahminleri alsın
tahminlerle birlikte degerlendirmeleri de tutulmalı → sozluk
all_secrets = ...
guesses = {}
while ...:
guess = get_guess(all_secrets, guesses)
(plus, minus) = evaluate_guess(guess, secret)
guesses[guess] = (plus, minus)
Ornek: Olası Tum Sırları Olusturma
all_secrets = []
for d1 in choices:
for d2 in choices:
if d2 == d1:
continue
for d3 in choices:
if d3 in (d1, d2):
continue
for d4 in choices:
if d4 in (d1, d2, d3):
continue
all_secrets.append((d1, d2, d3, d4))
Ornek: Olası Tum Sırları Olusturma
onceki yansıdaki gercekleme cok kotu
hem uzun hem de hane sayısına sıkı baglı
>>> import itertools
>>> choices = tuple(range(3))
>>> n_items = 2
>>> tuple(itertools.permutations(choices, n_items))
((0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1))
Ornek: Gecerli Tahmin
daha onceki tahminlerle celismeyen ilk tahmin
def get_guess(all_secrets, guesses):
guess = ()
for candidate in all_secrets:
for prev in guesses:
if evaluate_guess(prev, candidate) != \
guesses[prev]:
break
else:
guess = candidate
break
return guess
Alıstırmalar
tahmin eden oyuncu deterministik davranıyor
sayı secen oyuncu buna gore secebilir: 8241
tekrarlı rakamlara izin verilsin
all_secrets her seferinde bastan taranmasın