pyton'a giris (turgut uyar)

42
Python Giri¸ s H. Turgut Uyar Kasım 2013 2013 H. Turgut Uyar <[email protected]>

Upload: labsessions

Post on 23-Jun-2015

311 views

Category:

Technology


3 download

DESCRIPTION

Labsessions Kasım Ayından, Python Sunum'u.

TRANSCRIPT

Page 1: Pyton'a Giris (Turgut Uyar)

PythonGiris

H. Turgut Uyar

Kasım 2013

©2013 H. Turgut Uyar <[email protected]>

Page 2: Pyton'a Giris (Turgut Uyar)

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/

Page 3: Pyton'a Giris (Turgut Uyar)

Konular

1 Genel BilgilerGirisVeri TipleriUygulama

2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler

Page 4: Pyton'a Giris (Turgut Uyar)

Konular

1 Genel BilgilerGirisVeri TipleriUygulama

2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler

Page 5: Pyton'a Giris (Turgut Uyar)

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

Page 6: Pyton'a Giris (Turgut Uyar)

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

Page 7: Pyton'a Giris (Turgut Uyar)

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

Page 8: Pyton'a Giris (Turgut Uyar)

Konular

1 Genel BilgilerGirisVeri TipleriUygulama

2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler

Page 9: Pyton'a Giris (Turgut Uyar)

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

Page 10: Pyton'a Giris (Turgut Uyar)

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

Page 11: Pyton'a Giris (Turgut Uyar)

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]

Page 12: Pyton'a Giris (Turgut Uyar)

Konular

1 Genel BilgilerGirisVeri TipleriUygulama

2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler

Page 13: Pyton'a Giris (Turgut Uyar)

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)

Page 14: Pyton'a Giris (Turgut Uyar)

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!

Page 15: Pyton'a Giris (Turgut Uyar)

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

Page 16: Pyton'a Giris (Turgut Uyar)

Ornek: Mastermind

bilgisayar tutacak,insan bulmaya calısacak

renkler yerine rakamlar

rakam tekrarlanmıyor

hane sayısı degisken

Page 17: Pyton'a Giris (Turgut Uyar)

Konular

1 Genel BilgilerGirisVeri TipleriUygulama

2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler

Page 18: Pyton'a Giris (Turgut Uyar)

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

Page 19: Pyton'a Giris (Turgut Uyar)

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

Page 20: Pyton'a Giris (Turgut Uyar)

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]

...

Page 21: Pyton'a Giris (Turgut Uyar)

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]

Page 22: Pyton'a Giris (Turgut Uyar)

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

Page 23: Pyton'a Giris (Turgut Uyar)

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

Page 24: Pyton'a Giris (Turgut Uyar)

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

Page 25: Pyton'a Giris (Turgut Uyar)

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’]

Page 26: Pyton'a Giris (Turgut Uyar)

Konular

1 Genel BilgilerGirisVeri TipleriUygulama

2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler

Page 27: Pyton'a Giris (Turgut Uyar)

Fonksiyonlar

fonksiyon tanımı: def

cagrıda parametreler isimle gecirilebilir

def name(parameter1, parameter2, ...):

block

return expression

Page 28: Pyton'a Giris (Turgut Uyar)

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)

Page 29: Pyton'a Giris (Turgut Uyar)

Ornek: Tahmin Alma

def get_guess():

value = input("Make a guess: ")

guess = []

for c in value:

guess.append(int(c))

return guess

Page 30: Pyton'a Giris (Turgut Uyar)

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)

Page 31: Pyton'a Giris (Turgut Uyar)

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()

Page 32: Pyton'a Giris (Turgut Uyar)

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

Page 33: Pyton'a Giris (Turgut Uyar)

Konular

1 Genel BilgilerGirisVeri TipleriUygulama

2 Akıs DenetimiTemel YapılarFonksiyonlarOrnekler

Page 34: Pyton'a Giris (Turgut Uyar)

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

Page 35: Pyton'a Giris (Turgut Uyar)

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)

Page 36: Pyton'a Giris (Turgut Uyar)

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’

Page 37: Pyton'a Giris (Turgut Uyar)

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

Page 38: Pyton'a Giris (Turgut Uyar)

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)

Page 39: Pyton'a Giris (Turgut Uyar)

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))

Page 40: Pyton'a Giris (Turgut Uyar)

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))

Page 41: Pyton'a Giris (Turgut Uyar)

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

Page 42: Pyton'a Giris (Turgut Uyar)

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