pyton'a giris (turgut uyar)

Post on 23-Jun-2015

311 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

PythonGiris

H. Turgut Uyar

Kasım 2013

©2013 H. Turgut Uyar <uyar@tekir.org>

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

top related