Geçen haftanın ilerisi
Geçen hafta, Ödev 1 ve float
Ders programı
Ders programı: Ders 1 bitti, bugün Ders 2
Beş sütunlu ders programı, soldan sağa. Sağ üstte Salı, 18.00, E4. Ders 1, 20 Ekim (üstünde petrol mavisiyle bitti yazıyor, başlığı gri): bilgisayar, print(), error messages, int (turuncu), float (hardal sarısı), variable; Ödev 1, 25 Ekim Pazar 23.59. Ders 2, 27 Ekim (üstünde bugün yazıyor, açık mavi ve çivit mavisi çerçeveyle vurgulu): str (yeşil), input(), f-string, index, slicing, bool (deniz yeşili), if / elif; Ödev 2, 1 Kasım Pazar 23.59. Ders 3, 3 Kasım: while, for, break, continue, try / except, assert; Ödev 3, 8 Kasım Pazar 23.59. Ders 4, 10 Kasım: import, def, return, scope, None (bej), class; Ödev 4, 15 Kasım Pazar 23.59. Ders 5, 17 Kasım: list (vişneçürüğü), tuple (mavi gri), aliasing, dict (kahverengi), set (zeytin yeşili), file; Ödev 5, 22 Kasım Pazar 23.59. Alt satır: Her Ödev, dersten sonraki Pazar 23.59'a kadar teslim edilir.
Salı, 18.00, E4
bitti
Ders 1
20 Ekim
bilgisayar
print()
error messages
int
float
variable
Ödev 1
25 Ekim Pazar
23.59
bugün
Ders 2
27 Ekim
str
input()
f-string
index, slicing
bool
if / elif
Ödev 2
1 Kasım Pazar
23.59
Ders 3
3 Kasım
while
for
break
continue
try / except
assert
Ödev 3
8 Kasım Pazar
23.59
Ders 4
10 Kasım
import
def
return
scope
None
class
Ödev 4
15 Kasım Pazar
23.59
Ders 5
17 Kasım
list
tuple
aliasing
dict
set
file
Ödev 5
22 Kasım Pazar
23.59
Her Ödev, dersten sonraki Pazar 23.59'a kadar teslim edilir.
Geçen hafta
Geçen hafta: Ders 1'in özeti
Ders 1'in tek sayfalık özeti, Ders 1'deki sırayla beş kutu. Üst sıra solda print() ve comment: kod panelinde gri # total credits satırı, yanında Python okumaz; altında print("AGNO:", 2.94) satırı ("AGNO:" str, yeşil; 2.94 float, hardal sarısı); Çıktı panelinde yalnızca AGNO: 2.94. Üst sıra sağda Error messages: print("Selam" satırında kapanmayan parantez kırmızı işaretli, yanında çalışmadan önce bulunur, altında kırmızıyla SyntaxError: '(' was never closed; prnt("Selam") satırında prnt kırmızı işaretli, yanında satırı çalışınca bulunur, altında kırmızıyla NameError: name 'prnt' is not defined. Alt sıra solda Value ve type: 7 (int, turuncu) ve 2.94 (float, hardal sarısı) kutuları, altlarında int ve float etiketleri; print(type(2.94)) satırından bir okla <class 'float'>. Ortada Arithmetic operators, her biri bir okla sonucuna: 7 + 2 sonuç 9, 7 - 2 sonuç 5, 7 * 2 sonuç 14, 7 / 2 sonuç 3.5; ikinci sütunda 7 // 2 sonuç 3, 7 % 2 sonuç 1, 2 ** 3 sonuç 8. 3.5 float, hardal sarısı; öteki sonuçlar int, turuncu. Sağda Variable: x = 5 satırı; lacivert x isim etiketinden 5 (int, turuncu) kutusuna bir ok, okun üstünde gösterir.
print() ve comment
# total credits
print("AGNO:" , 2.94 )
Python okumaz
Çıktı
AGNO: 2.94
Error messages
print
(
"Selam"
çalışmadan önce bulunur
SyntaxError: '(' was never closed
prnt
(
"Selam"
)
satırı çalışınca bulunur
NameError: name 'prnt' is not defined
Value ve type
7
int
2.94
float
print(type(2.94 ))
<class 'float'>
Arithmetic operators
7 + 2
9
7 - 2
5
7 * 2
14
7 / 2
3.5
7 // 2
3
7 % 2
1
2 ** 3
8
Variable
x = 5
x
gösterir
5
int
Ödev 1 ve beklenen çıktı
Çıktınızdaki satır Toplam kredi: 9 ile
Toplam kredi: 9aynı
Toplam kredi 9farklı: iki nokta yok
Toplam kredi : 9farklı: iki noktadan önce boşluk var
toplam kredi: 9farklı: küçük t
Çıktı, beklenen çıktıyla karakter karakter aynı olmalı.
kontrol.py
Run penceresi
✗ 1. Not kartı
4. satır beklenen: 'Toplam kredi: 9', sizinki: 'Toplam kredi 9'
✓ 2. Hatalı satırlar
✓ 3. Bir milyon saniye
✓ 4. AGNO'ya bir ders eklemek
✓ 5. Dört tane 4
4 / 5 görev geçti.
Ödevi göndermeden önce kontrol.py'yi bir kez çalıştırın; Ödev 2'de de var.
Python ne yazdırır?
credits = 3
points = credits * 3.0
print(points, points / credits)
9 3
9.0 3
9.0 3.0
9 3.0
int ile float'ın çarpımı float'tır; / da her zaman float verir.
int ve float
int ve float: sorular ve cevapları
Üstte soru: Öğrenci sayısı, boy, AGNO: hangisi int, hangisi float? Altında iki başlık: solda turuncu zeminde int, kaç tane?; sağda hardal sarısı zeminde float, ne kadar?. Bir tıklamayla cevaplar çıkar: int altında öğrenci sayısı ve 27 (turuncu), float altında boy 1.75 ve AGNO 2.94 (hardal sarısı). Altta ince bir çizgiden sonra soru satırları: solda print(type(7)), print(type(7.0)); bir tıklamayla yanlarında <class 'int'>, <class 'float'> çıkar. Sağda print(type(10 // 2)) ve print(type(10 / 2)); bir tıklamayla daha <class 'int'> ve <class 'float'> çıkar.
Öğrenci sayısı, boy, AGNO: hangisi int, hangisi float?
int
kaç tane?
float
ne kadar?
öğrenci sayısı
27
boy
1.75
AGNO
2.94
print(type(7 ))
print(type(7.0 ))
print(type(10 // 2 ))
print(type(10 / 2 ))
<class 'int'>
<class 'float'>
<class 'int'>
<class 'float'>
Sayarken int, ölçerken float.
Bilgisayarın bozuk paraları
Cüzdanın paraları ve bilgisayarın paraları
Elle çizilmiş gibi basit bir resim, üç bölme. Birinci bölme, Cüzdanınız: 5 TL, 10 TL ve 20 TL yazan üç banknot, altında 1 TL, 50, 25, 10 ve 5 yazan, gittikçe küçülen beş bozuk para; en altta arada para yok yazıyor. İkinci bölme bir tıklamayla çıkıyor, Bilgisayar: yanan bir ampulün yanında 1 ve voltaj var, sönük bir ampulün yanında 0 ve voltaj yok yazıyor. Üçüncü bölme bir tıklamayla daha çıkıyor, Kesir için: gittikçe küçülen dört hardal sarısı para, üstlerinde 1/2, 1/4, 1/8 ve 1/16 yazıyor, sonda üç nokta; altında hep yarıya bölünür yazıyor.
Cüzdanınız
5 TL
10 TL
20 TL
1 TL
50
25
10
5
arada para yok
Bilgisayar
1
voltaj var
0
voltaj yok
Kesir için
1/2
1/4
1/8
1/16
…
hep yarıya bölünür
Bilgisayarda yalnızca 1 ve 0 var; kesir için paraları yarım, çeyrek, sekizde bir…
0.75 ve 0.1
0.75 ve 0.1 bilgisayarın paralarıyla, satır satır
Üç sütunlu tablo: Para, 0.75, 0.1. Başta yalnızca başlık ve para satırları görünür: yarım (0.5), çeyrek (0.25), sekizde bir (0.125), on altıda bir (0.0625), otuz ikide bir (0.03125). Tıklamalarla 0.75 sütunu dolar: yarım için al, kalan 0.25; çeyrek için al, kalan 0. Sonra 0.1 sütunu satır satır: yarım, çeyrek ve sekizde bir için fazla, alma; on altıda bir için al, kalan 0.0375; otuz ikide bir için al, kalan 0.00625 ve üç nokta. Al hücreleri petrol mavisi, fazla hücreleri gri. En son binary (ikilik taban) satırı çıkar, altında alınan 1, alınmayan 0: 0.75 için 0.11, 0.1 için 0.0001100110011 ve üç nokta.
Para
0.75
0.1
yarım (0.5)
çeyrek (0.25)
sekizde bir (0.125)
on altıda bir (0.0625)
otuz ikide bir (0.03125)
al, kalan 0.25
al, kalan 0
fazla, alma
fazla, alma
fazla, alma
al, kalan 0.0375
al, kalan 0.00625, …
binary (ikilik taban)
alınan 1, alınmayan 0
0.11
0.0001100110011…
0.75 tam ödenir; 0.1 hiç bitmez.
0.1 + 0.2
print(0.1 + 0.2)
print(round(0.1 + 0.2, 2))
Çıktı
0.30000000000000004
0.3
Genel biçim
round(<sayı> , <noktadan sonra kaç basamak> )
Python'un hatası değil: paralar yarıya bölünerek gidiyor. round() yuvarlar.
Parayı kuruşla tutmak
total_tl = 0.10 + 0.20
total_kurus = 10 + 20
print(total_tl, total_kurus)
Çıktı
0.30000000000000004 30
Parayı kuruş olarak int tutun: int'ler tam tutulur.
Ders 2'nin hedefi
2A: metinle çalışmak 2B: programa karar verdirmek
strcomparison: ==, <, >=
input(), type conversion: int(), float()bool: True, False
f-string: f"{gpa:.2f}" and, or, not
string methods: strip(), upper() if ve else
index, len(), slicing elif
Bu hafta bu iki şeyi öğreneceksiniz.
Aklınızda kalsın: klavyeden gelen her şey str'dir.
Ders 2'nin hedef programı
Hedef programın parçaları
Solda PyCharm Run penceresi, beş satır: Ders kodu: mat123 / Kredi: 4 / Puan (0-100): 66 / MAT123: 66 puan, katsayı 2.50, geçti / 4 x 2.50 = 10.00; kullanıcının yazdığı kısımlar petrol mavisi. Sağda yukarıdan aşağı etiketler, her biri düz bir çizgiyle çıktıdaki yerine bağlı. Bu yarının etiketleri çivit mavisi düz çerçeveli: 3. input() ilk satırdaki Ders kodu: sorusuna, 4. int() Kredi: 4 satırına, 6. strip(), upper() MAT123'ün üstündeki ayraca, 5. f-string, :.2f son satırdaki 10.00'ın altındaki ayraca. Aradan sonraki etiketler gri kesik çerçeveli: 11. elif katsayı 2.50'nin üstündeki ayraca, 10. if ve else geçti kelimesinin altındaki ayraca. En altta örnek: düz çerçeve 2A, kesik çerçeve 2B.
Run penceresi
Ders kodu: mat123
Kredi: 4
Puan (0-100): 66
MAT123: 66 puan, katsayı 2.50, geçti
4 x 2.50 = 10.00
3. input()
4. int()
6. strip(), upper()
11. elif
10. if ve else
5. f-string, :.2f
2A
2B
Bugünkü konular bu programda birleşir.
2A konuları
1. Reassignment ve dynamically typedx = 5, x = x + 1, b = a
2. str"MAT101", ASCII, "ab" * 3, TypeError
3. input()Run penceresi, her zaman str
4. Type conversionint(), float(), str(), round()
5. f-stringf"...{...}", :.2f
6. String methods ve immutable strstrip(), upper(), replace()
7. Index, len() ve slicingcode[0], len(), code[0:3]
1. Reassignment ve dynamically typed
İsmin gösterdiği value değişir
x = 5
x = 5: okunuşu ve memory resmi, adım adım
Solda kod paneli: x = 5 (5 turuncu, int). Sağda iki boş sütun: İsimler ve Value'lar. Bir tıklamayla solda Okunuşu tablosu çıkar: Matematikte satırı x eşittir 5; açık mavi vurgulu Python'da satırı x'e 5'i ata. Bir tıklamayla daha sağdaki resim çıkar: İsimler sütununda lacivert x etiketi, Value'lar sütununda 5 (int, turuncu); x'ten 5'e açık mavi şeritli bir ok, yani x artık 5'i gösterir.
x = 5
İsimler
Value'lar
Okunuşu
Matematikte
x eşittir 5
Python'da
x'e 5'i ata
x
5
int
x = 5 bir assignment'tır: x artık 5'i gösterir.
x = 2 + 3
x = 2 + 3: önce sağ taraf, sonra isim, adım adım
Solda kod paneli: x = 2 + 3 (2 ve 3 turuncu, int). Sağda iki boş sütun: İsimler ve Value'lar. Birinci tıklama: 2 + 3'ün altında 1 numaralı ayraç ve 'önce' satırı: 2 + 3 hesaplanır, 5 çıkar; Value'lar sütununda 2 + 3 yazısından inen bir ok ve açık mavi bantlı yeni value 5 (int, turuncu). İkinci tıklama: x'in altında 2 numaralı ayraç ve satırı: x, 5'i gösterir; İsimler sütununda lacivert x etiketi ve x'ten 5'e açık mavi şeritli ok.
x = 2 + 3
İsimler
Value'lar
1
1
2 + 3 hesaplanır, 5 çıkar
2 + 3
5
int
2
2
x, 5'i gösterir
x
Önce sağ taraf hesaplanır, sonra x sonucu gösterir.
Reassignment
Assignment ve reassignment yan yana, adım adım
Sol yarı Assignment: kod x = 5; lacivert x etiketi 5'i (int, turuncu) bir okla gösterir. Sağ yarı Reassignment: başta aynısı, kod x = 5 ve x 5'i gösterir. Birinci tıklama: kodun ikinci satırı x = 10 ve açık mavi bantlı yeni value 10 (int, turuncu), 5'in altında. İkinci tıklama: x'ten 10'a açık mavi şeritli yeni ok; x'ten 5'e giden eski okun üstünde bir çarpı. 5 yerinde kalır.
Assignment
x = 5
x
5
int
Reassignment
x = 5
x
5
int
x = 10
10
int
Aynı isme yeni bir value atamak, oku yeni value'ya taşır.
x = x + 1
x = x + 1: önce sağ taraf, sonra isim, adım adım
Solda kod paneli: x = 5 ve x = x + 1 (sayılar turuncu, int). Sağda İsimler ve Value'lar sütunları; başta lacivert x etiketi 5'i (int, turuncu) bir okla gösterir. Birinci tıklama: ikinci satırda x + 1'in altında 1 numaralı ayraç ve satırı: x + 1 hesaplanır, 6 çıkar; Value'lar sütununda 5 + 1 yazısından inen bir ok ve açık mavi bantlı yeni value 6 (int, turuncu), 5'in sağ altında. İkinci tıklama: soldaki x'in altında 2 numaralı ayraç ve satırı: x, 6'yı gösterir; x'ten 6'ya açık mavi şeritli yeni ok, 5'e giden eski okun üstünde bir çarpı. 5 yerinde kalır.
x = 5
x = x + 1
İsimler
Value'lar
x
5
int
1
1
x + 1 hesaplanır, 6 çıkar
5 + 1
6
int
2
2
x, 6'yı gösterir
Sağ taraf x'in eski value'sunu okur; sonra ok yeni value'ya taşınır.
Matematikte x = x + 1'in çözümü yoktur.
rest = rest % 3600
# a day is 86400 seconds
rest = 1000000 % 86400
print(rest)
# an hour is 3600 seconds
rest = rest % 3600
print(rest)
Çıktı
49600
2800
Bazılarınız bugünün ilk konusunu ödevde zaten yaptı: aynı isme yeni bir value.
Reassignment adım adım
b = a, b'yi aynı value'ya bağlar; a taşınınca b yerinde kalır.
Dynamically typed (dinamik tipli)
Dynamically typed: type value'dadır, isimde değil
Solda lacivert x isim etiketi; altındaki type yuvası boş ve üstü çizili, altında isimde type yok yazıyor. x'ten 7 değerine (int, turuncu) giden eski ok gri ve kesikli; 7'nin altındaki yuvada int yazıyor. x'ten "yedi" değerine (str, yeşil) giden yeni ok, çivit mavisi çerçeveli açık mavi şeridin üzerinde; "yedi"nin altındaki yuvada str yazıyor. Sağda çıktı paneli: <class 'int'> ve <class 'str'>. Özet: x önce 7'yi (int, turuncu), sonra "yedi"yi (str, yeşil) gösterir; type'lar value'ların altında, ismin altında type yok.
isimde type yok
x
7
int
"yedi"
str
x = 7
x = "yedi"
Çıktı
<class 'int'>
<class 'str'>
Type value'dadır, isimde değil; bu yüzden Python dynamically typed bir dildir.
2. str
Metin değerleri, tırnaklar, + ve *
str
str: karakterlerin sırası
data-focus chars durumu: solda "MAT101" (str, yeşil), bir okla yan yana altı yeşil kutuya ayrılıyor: M, A, T, 1, 0, 1; kutuların üstünde bir ayraç ve karakterler sırayla yazısı, altında type etiketi str. Altı kutu açık mavi, çivit mavisi çerçeveli bir bandın içinde. Sağda iki kod satırı, print("MAT101") ve print(type("MAT101")), altında Çıktı paneli: MAT101 ve <class 'str'>. data-focus small durumu: altta iki satır daha görünür; "A" (str, yeşil) tek bir yeşil kutuya, A harfine gider, yanında str; "" (str, yeşil) kesik çizgili boş bir yeşil kutuya gider, yanında boş str. Bu iki kutu açık mavi, çivit mavisi çerçeveli bandın içinde; üst satır gri ve soluk.
karakterler sırayla
"MAT101"
M
A
T
1
0
1
str
print("MAT101")
print(type("MAT101"))
Çıktı
MAT101
<class 'str'>
"A"
A
str
""
boş str
str, tırnak içine yazılmış metindir: karakterlerin sırası.
Programdaki metinler
Programdaki metinler str'dir
Üç sütun. Ad: "Mehmet" (str, yeşil), klavyeden gelir. Ders kodu: "MAT123" (str, yeşil), transkriptten gelir. Mesaj: "AGNO: " (str, yeşil), programın kendisinden gelir. Mehmet, MAT123 ve AGNO: değerleri; üçü de str, yeşil. Altta ince bir çizgiden sonra soru: Öğrenci numaranız rakamlardan oluşuyor: int mi, str mi? Bir tıklamayla cevap çıkar: yeşil kutuda "12345678", str, hesap yapılmaz.
ad
"Mehmet"
str
klavyeden
ders kodu
"MAT123"
str
transkriptten
mesaj
"AGNO: "
str
programın kendisinden
Öğrenci numaranız rakamlardan oluşuyor: int mi, str mi?
"12345678"
str
hesap yapılmaz
Ad, ders kodu, ekrandaki mesaj: programdaki her metin bir str'dir.
Tırnak içinde tırnak
print("Ankara'da")
print('"Merhaba" dedi')
Çıktı
Ankara'da
"Merhaba" dedi
Tırnaklar sınırdır; içerideki tırnak değerin parçasıdır
Üstte "Ankara'da" yazısı. Dıştaki iki çift tırnak gri; ikisinden üstteki sınır yazısına birer çizgi çıkar: tırnaklar str'nin nerede başlayıp bittiğini gösterir. İçerideki harfler ve kesme işareti yeşil, yani str'nin parçası (str, yeşil); kesme işareti açık mavi, çivit mavisi çerçeveli bir bantta, altında değerin içinde yazısı. Altta '"Merhaba" dedi' yazısı: dıştaki iki tek tırnak gri, alttaki sınır yazısına bağlı; içerideki çift tırnaklar ve metin yeşil, str'nin parçası.
sınır
"
Ankara
'
da
"
değerin içinde
' "Merhaba" dedi '
sınır
Tırnaklar değerin parçası değildir; içeride öbür tırnak durabilir.
Escape character (kaçış karakteri)
print("Hoca \"Merhaba\" dedi")
Çıktı
Hoca "Merhaba" dedi
Ters bölü (\) sonraki karakterin anlamını değiştirir: \" metni bitirmez, metnin içinde bir tırnak olur.
\n ve \t
print("Hacettepe\nÜniversitesi")
print("1\tAli")
Çıktı
Hacettepe
Üniversitesi
1 Ali
\n satır sonudur, \t bir tab boşluğudur.
print() ve satır sonu
print("Hacettepe")
print()
print("Üniversitesi")
Çıktı
Hacettepe
Üniversitesi
print() yazdığının sonuna kendisi bir \n ekler; boş print() yalnızca o \n'yi yazar.
Karakterler ve sayılar
Karakterler ve sayılar: 65 ile "A" belleğe nasıl gider
Üstte soru: Bilgisayarda yalnızca 1 ve 0 var: "A" nasıl saklanır? Sağda uzun bir çivit mavisi blok: bellek, yalnızca 1 ve 0. Üst satır, sayı: 65 (int, turuncu) bir okla doğrudan belleğe gider. Alt satır, karakter: "A" (str, yeşil) başta tek başına durur, bellekle arası boştur. Bir tıklamayla arası dolar: "A" bir oka, açık mavi bantla vurgulanmış küçük bir tabloya gider, tabloda "A" ile 65 yan yana; oradan 65 (int, turuncu) ve belleğe. Son tıklamada altta büyük yazıyla kural: Her karaktere, anlaşılmış bir tablodan bir sayı verilir.
Bilgisayarda yalnızca 1 ve 0 var: "A" nasıl saklanır?
bellek
yalnızca 1 ve 0
sayı
65
int
doğrudan
karakter
"A"
str
tablo
"A"
65
65
int
Her karaktere, anlaşılmış bir tablodan bir sayı verilir.
ASCII
ASCII tablosundan bir parça, satır satır
İki küçük tablo yan yana. Solda büyük harf: başta boş hücreler, tıklamalarla "A" 65, "B" 66, "C" 67. Sağda küçük harf: "a" 97, "b" 98, "c" 99. Harfler yeşil (str), sayılar turuncu (int). Son tıklamada sağda, tablonun dışında, gri kesik çizgili iki hücre: "ç" ve 231, üstünde ASCII'de yok, altında: Python'un str'si ç, ş, ğ'yi de tutar.
büyük harf
küçük harf
"A"
65
"B"
66
"C"
67
"a"
97
"b"
98
"c"
99
ASCII'de yok
"ç"
231
Python'un str'si ç, ş, ğ'yi de tutar.
ASCII, İngilizce harflere, rakamlara ve işaretlere sayı veren bir tablodur.
ord()
ord(): karakterden sayıya, adım adım
Üstte Genel biçim: ord(<karakter>). Altında üç satır, her biri bir str kutusundan ord() etiketli okla bir int kutusuna gider. Başta yalnızca ilk satır: "A" (str, yeşil) 65 (int, turuncu). Bir tıklamayla ikinci satır: "a" 97, yanında küçük a başka bir karakter, başka bir sayı. Bir tıklamayla üçüncü satır: "B", okun ucunda gri kesik çizgili boş bir kutu ve yanında ord("B") ne verir? Son tıklamada kutuya 66 (int, turuncu) gelir, yanında: tabloda A'dan sonra B.
Genel biçim
ord(<karakter> )
"A"
str
ord()
65
int
"a"
str
ord()
97
int
küçük a başka bir karakter, başka bir sayı
"B"
str
ord()
ord("B" ) ne verir?
66
int
tabloda A'dan sonra B
ord(), bir karakterin tablodaki sayısını verir.
chr()
chr(): sayıdan karaktere, ord()'un tersi
Üstte Genel biçim: chr(<sayı>). Ortada "A" (str, yeşil) ve 65 (int, turuncu); üstten "A"dan 65'e giden ok, üstünde ord(). Bir tıklamayla alttan 65'ten "A"ya dönen ok, altında açık mavi bantla vurgulanmış chr(). Son tıklamada altta iki kod satırı yan yana: print(ord("a")) 97 yazar, print(chr(97)) a yazar.
Genel biçim
chr(<sayı> )
"A"
65
str
int
ord()
chr()
print(ord("a" ))
97
print(chr(97 ))
a
chr() ters yöne gider: sayıdan karakteri verir.
ord() ve chr()
B'nin sayısına 1 eklenirse chr() hangi harfi verir?
char ve str
Tek karakter de str: "A" ve "MAT101"
Üstte iki değer yan yana. Solda "A" bir oka ve tek bir yeşil hücreye (str) gider; hücre ve str etiketi açık mavi, çivit mavisi çerçeveli bantta; altında 1 karakter. Sağda "MAT101" altı yeşil hücreye gider: M, A, T, 1, 0, 1, yanında str, altında 6 karakter. İnce bir çizginin altında kod: print(type("A")) yanında <class 'str'>. Bir tıklamayla print(type(chr(65))) ve <class 'str'>, yanında chr() da str verir. Bir tıklamayla daha print(type("")) ve <class 'str'>, yanında boş str: hiç karakteri yok.
"A"
A
str
1 karakter
"MAT101"
M
A
T
1
0
1
str
6 karakter
print(type("A" ))
<class 'str'>
print(type(chr(65 )))
<class 'str'>
chr() da str verir
print(type("" ))
<class 'str'>
boş str: hiç karakteri yok
Python'da char yok: tek karakter de str'dir.
C, C++ ve Java'da tek karakterin type'ı char'dır.
Data types
value
Numbers (sayılar)
Integral
Real
Sequences (diziler)
Immutable
str"7"rangeDers 3 tupleDers 5
Mutable
Set types (kümeler)
Mappings
None
bu derste daha önce sonraki derslerde
+ ve str
+ işlemcisi ve str, satır satır
Üç satırlık + ve str resmi, her tıklamada bir satır. Her satırda yeşil str kutuları, aralarında + işareti ve sağda sonucu gösteren bir ok; sonuç kutusunun altında type etiketi str ve print()'in yazdığı satır, tırnaksız. Başta 1. satır: "Hacettepe" + " " + "Üniversitesi" sonucu "Hacettepe Üniversitesi" (str, yeşil); ortadaki kutu tek bir boşluk tutar, boşluk ortasında çivit mavisi bir nokta olan küçük bir hücreyle gösterilir; sonuç açık mavi, çivit mavisi çerçeveli bir bantta; yazdırılan satır Hacettepe Üniversitesi. Birinci tıklama, 2. satır: "Hacettepe" + "Üniversitesi" sonucu "HacettepeÜniversitesi" (str, yeşil), yazdırılan satır HacettepeÜniversitesi; solunda: Boşluk kendiliğinden eklenmez. Bant bu satırın sonucuna geçer. İkinci tıklama, 3. satır: lacivert name ismi "Mehmet" (str, yeşil) değerini gösteriyor; ince bir çizginin sağında "Merhaba " (sondaki boşluk noktalı hücreyle) + name sonucu "Merhaba Mehmet" (str, yeşil); yazdırılan satır Merhaba Mehmet; solunda: + ile sabit metin ve bir variable tek mesajda birleşir. Bant bu satırın sonucuna geçer.
"Hacettepe"
+
"
"
+
"Üniversitesi"
"Hacettepe Üniversitesi"
str
Hacettepe Üniversitesi
"Hacettepe"
+
"Üniversitesi"
"HacettepeÜniversitesi"
str
HacettepeÜniversitesi
Boşluk kendiliğinden eklenmez.
name
"Mehmet"
"Merhaba
"
+
name
"Merhaba Mehmet"
str
Merhaba Mehmet
+ ile sabit metin ve bir variable tek mesajda birleşir.
+ iki str'yi arka arkaya ekler.
* ve str
* işlemcisi ve str
İki satır. Üstte "ab" (str, yeşil) * 3: ok, yan yana üç "ab" kopyasına gider, aralarında + işaretleri ve altlarında 3 kez yazan bir köşeli ayraç var; ikinci ok sonuca gider: "ababab" (str, yeşil), çivit mavisi çerçeveli açık mavi şeritte, altında str etiketi ve yazdırılan satır ababab. Altta "=" (str, yeşil) * 20: ok bir çıktı kutusuna gider, içinde yirmi tane = işareti, altında 20 karakter yazan bir köşeli ayraç.
"ab"
* 3
"ab"
+
"ab"
+
"ab"
3 kez
"ababab"
str
ababab
"="
* 20
====================
20 karakter
str * n, aynı str'yi n kez arka arkaya yazar.
+ ve * işlemcileri ve type
Operator aileleri
Kursta görülecek dört operator ailesi, dört sütun. Arithmetic, 7 operator: + - * / // % **; bu derste başlığı açık mavi ve çivit mavisi çerçeveyle vurgulu. Comparison, 6 operator: == != < > <= >=. Logical, 3 operator: and or not. Membership, 1 operator: in. Bu üç ailenin hücreleri gri kesikli, yazıları gri, başlıklarının sağında hangi derste görüleceği yazıyor: Ders 1'de Ders 2, Ders 2'de 2B. + ve * hücrelerinde Ders 2A için boş bir ikinci satır yeri var (str ile).
+
str ile
-
*
str ile
/
//
%
**
Arithmetic 7
Ders 2 2B
==
!=
<
>
<=
>=
Comparison 6
Ders 2 2B
and
or
not
Logical 3
Ders 2 2B
in
Membership 1
Ders 2 2B
Aynı işaret, iki yanındaki value'ların type'ına göre başka bir iş yapar.
str ve TypeError
print("A" - "B")
str'den str çıkarılamaz.
Şimdilik str ile yalnızca + ve * kullanıyoruz.
Önce hangi satır okunur?
Çıktı
Traceback (most recent call last): File "…/python-kurs/example.py", line 1, in <module> print("A" - "B") ~~~~^~~~~2 TypeError: unsupported operand type(s) for -: 'str' and 'str' 1
TypeError
TypeError, satır satır okunuşu
Üstte gri bir kod panelinde print("Hacettepe" + 1); "Hacettepe" yeşil (str), 1 turuncu (int). Altında Çıktı panelinde traceback'in beş satırı aynen: Traceback (most recent call last):, File "…/python-kurs/example.py", line 1, in <module>, print("Hacettepe" + 1), altında + işaretinin tam altında bir şapka ve iki işlenenin altında dalgalı çizgiler, en altta kırmızı: TypeError: can only concatenate str (not "int") to str. Birinci tıklama: son satırda 1 numaralı işaret, önce son satır. İkinci tıklama: şapkalı satırda 2 numaralı işaret, hata + işlemcisinde. Üçüncü tıklama: altta "Hacettepe" (str, yeşil) ve 1 (int, turuncu) arasında, + işaretinin üstünde kırmızı çarpı. Sağda: Bir yanda str, öbür yanda int.
print("Hacettepe" + 1 )
Çıktı
Traceback (most recent call last):
File "…/python-kurs/example.py", line 1, in <module>
print("Hacettepe" + 1 )
~~~~~~~~~~~~^~~
TypeError: can only concatenate str (not "int") to str
1
önce son satır
2
hata + işlemcisinde
"Hacettepe"
str
+
1
int
Bir yanda str, öbür yanda int.
Python metin ile sayıyı kendiliğinden birleştirmez.
3. input()
Programa klavyeden değer vermek
input()
input() klavyeden değer alır
Soldan sağa: klavye bloğunda m, i, l, l, e, t tuşları ve altında Enter tuşu. Klavyeden bir ok input("Kime selam? ") yazan kutuya gider. Oradan Enter'dan sonra yazan bir ok "millet" değerine gider: millet (str, yeşil), çivit mavisi çerçeveli açık mavi şeritte, altında str etiketi. En sağda lacivert name ismi, ondan "millet" değerine bir ok. Altta Run penceresi: Kime selam? satırında yazılan millet petrol mavisi. Özet: klavyeden millet yazılıyor; input() "millet" değerini (str, yeşil) veriyor; name ismi ona ok ile bağlı.
klavye
m
i
l
l
e
t
Enter
input("Kime selam? ")
Enter'dan
sonra
"millet"
str
name
Run penceresi
Kime selam? millet
input() soruyu yazar, Enter'ı bekler, yazılanı str olarak verir.
input() adım adım
Önce biriniz adını söylesin; input() da sorar, bekler, cevabı alır. Program aynı, değer her çalıştırmada başka.
Run penceresinde girdi
Cevap, Run penceresine tıklanıp yazılır ve Enter ile gider; Stop programı durdurur.
input() ve type
value = input("Sayı: ")
print(type(value))
Çıktı
Sayı: 5
<class 'str'>
input() her zaman str verir
Soldan sağa: 5 tuşundan bir ok input("Sayı: ") yazan kutuya, oradan bir ok "5" değerine gider: 5 (str, yeşil), çivit mavisi çerçeveli açık mavi şeritte, altında str etiketi. Sağında lacivert value ismi, ondan "5" değerine bir ok. Daha sağda ve biraz aşağıda 5 (int, turuncu), altında int etiketi, üstü iki kırmızı çizgiyle çarpı biçiminde çizilmiş; yanında kırmızı: bu değil. Altta Run penceresi: Sayı: satırında yazılan 5 petrol mavisi, sonraki satır <class 'str'>. Özet: 5 (str, yeşil); yanında üstü kırmızıyla çizilmiş 5 (int, turuncu).
5
input("Sayı: ")
"5"
str
value
5
int
bu değil
Run penceresi
Sayı: 5
<class 'str'>
Rakam yazılsa da: klavyeden gelen her şey str'dir.
input() ve TypeError
age = input("Yaş: ")
print(age + 1)
Çıktı
Yaş: 19 Traceback (most recent call last): File "…/python-kurs/example.py", line 2, in <module>2 print(age + 1) ~~~~^~~ TypeError: can only concatenate str (not "int") to str 1
Yazılan 19 bir str; 1 ile toplanamaz.
Python ne yazdırır?
value = input("Sayı: ") # user types 5
print(value + value)
print(type(value))
55
<class 'str'>
10
<class 'int'>
5 5
<class 'str'>
TypeError
input() "5" str'ini verir; iki str + ile arka arkaya eklenir.
4. Type conversion
Bir type'tan öbürüne geçmek
Type conversion (tip çevirimi)
Type conversion: üç kutu
Type conversion (tip çevirimi) için yan yana üç kutu, her biri çivit mavisi çerçeveli ve numaralı. 1 Otomatik: 3 (int, turuncu) artı 4.0 (float, hardal sarısı), aşağı bir okla 7.0 (float, hardal sarısı). 2 Açıkça: int("4") okla 4 (int, turuncu); float("3.25") okla 3.25 (float, hardal sarısı); str(4) okla "4" (str, yeşil). 3 Çevrilemeyen: int("abc") kırmızı bir okla kırmızı çerçeveli ValueError kutusuna gider. data-focus all durumunda vurgu yoktur ve alt bant boştur. data-focus auto durumunda 1. kutu kalın çivit mavisi çerçeveyle öne çıkar, 2. ve 3. kutu gri ve soluktur; altta print(3 + 4.0) ve print(type(3 + 4.0)) satırları ve Çıktı panelinde 7.0 ile <class 'float'> yazar. data-focus fail durumunda 3. kutu kalın çivit mavisi çerçeveyle öne çıkar, 1. ve 2. kutu gri ve soluktur; altta üç satır ve kırmızı son satırları: int("3.5"): ValueError: invalid literal for int() with base 10: '3.5'; float("3,5"): ValueError: could not convert string to float: '3,5'; int("abc"): ValueError: invalid literal for int() with base 10: 'abc'.
1
Otomatik
3
+
4.0
int
float
7.0
float
2
Açıkça
int("4")
4
float("3.25")
3.25
str(4)
"4"
3
Çevrilemeyen
int("abc")
ValueError
print(3 + 4.0)
print(type(3 + 4.0))
7.0
<class 'float'>
int("3.5")
ValueError: invalid literal for int() with base 10: '3.5'
float("3,5")
ValueError: could not convert string to float: '3,5'
int("abc")
ValueError: invalid literal for int() with base 10: 'abc'
Type conversion, bir değerden başka type'ta yeni bir değer üretmektir.
Otomatik çevirim
Type conversion: üç kutu
Type conversion (tip çevirimi) için yan yana üç kutu, her biri çivit mavisi çerçeveli ve numaralı. 1 Otomatik: 3 (int, turuncu) artı 4.0 (float, hardal sarısı), aşağı bir okla 7.0 (float, hardal sarısı). 2 Açıkça: int("4") okla 4 (int, turuncu); float("3.25") okla 3.25 (float, hardal sarısı); str(4) okla "4" (str, yeşil). 3 Çevrilemeyen: int("abc") kırmızı bir okla kırmızı çerçeveli ValueError kutusuna gider. data-focus all durumunda vurgu yoktur ve alt bant boştur. data-focus auto durumunda 1. kutu kalın çivit mavisi çerçeveyle öne çıkar, 2. ve 3. kutu gri ve soluktur; altta print(3 + 4.0) ve print(type(3 + 4.0)) satırları ve Çıktı panelinde 7.0 ile <class 'float'> yazar. data-focus fail durumunda 3. kutu kalın çivit mavisi çerçeveyle öne çıkar, 1. ve 2. kutu gri ve soluktur; altta üç satır ve kırmızı son satırları: int("3.5"): ValueError: invalid literal for int() with base 10: '3.5'; float("3,5"): ValueError: could not convert string to float: '3,5'; int("abc"): ValueError: invalid literal for int() with base 10: 'abc'.
1
Otomatik
3
+
4.0
int
float
7.0
float
2
Açıkça
int("4")
4
float("3.25")
3.25
str(4)
"4"
3
Çevrilemeyen
int("abc")
ValueError
print(3 + 4.0)
print(type(3 + 4.0))
7.0
<class 'float'>
int("3.5")
ValueError: invalid literal for int() with base 10: '3.5'
float("3,5")
ValueError: could not convert string to float: '3,5'
int("abc")
ValueError: invalid literal for int() with base 10: 'abc'
int ile float birlikte kullanılınca sonuç float olur.
int(), float() ve str()
int(), float() ve str() ile çevirim ve sonrası
Açıkça type conversion, üç satır, her satırda değer, function kutusu ve sonuç oklarla bağlı, type etiketi kutunun sağında. Satır 1: "4" (str, yeşil), int() kutusu, 4 (int, turuncu). Satır 2: "3.25" (str, yeşil), float() kutusu, 3.25 (float, hardal sarısı). Satır 3: 4 (int, turuncu), str() kutusu, "4" (str, yeşil). Altta gri bir kod panelinde print(int("4"), float("3.25"), str(4)); sağdaki Çıktı panelinde 4 3.25 4. Tıklayınca kod panelinin ikinci satırı print(int("4") + 1, float("3.25"), str(4) + "4") ve Çıktı'nın ikinci satırı 5 3.25 44 gelir; 44 açık mavi, çivit mavisi çerçeveli bir bantta, yanında str + str. En altta: Çevrilen değer, yeni type'ının işlemcileriyle kullanılır.
"4"
str
int()
4
int
"3.25"
str
float()
3.25
float
4
int
str()
"4"
str
print(int("4"), float("3.25"), str(4))
Çıktı
4 3.25 4
print(int("4") + 1, float("3.25"), str(4) + "4")
5 3.25
44
str + str
Çevrilen değer, yeni type'ının işlemcileriyle kullanılır.
Type'ın adı parantezle yazılınca değeri o type'a çevirir.
"5" ve int("5")
"5", strint("5"), int
yazdırmak print("5") # → 5print(int("5")) # → 5
+print("5" + "3") # → 53print(int("5") + 3) # → 8
*print("5" * 2) # → 55print(int("5") * 2) # → 10
-print("5" - 3) # → TypeErrorprint(int("5") - 3) # → 2
Ekranda ikisi de 5 yazar; farkı işlemler gösterir.
int() ve round()
int() keser, round() yuvarlar
3'ten 4'e bir sayı doğrusu, her 0.1'de bir çentik. Uçlarda 3 ve 4 (int, turuncu noktalar ve turuncu rakamlar); 3.9 (float, hardal sarısı nokta ve rakam). 3.9'dan iki ok çıkar: sola giden alçak ok 3'te biter, üstünde int() kesirli kısmı atar yazar; sağa giden yüksek ok 4'te biter, üstünde round() en yakına yuvarlar yazar ve bu ok açık mavi, çivit mavisi çerçeveli bir bantta. Altta print(int(3.9), round(3.9), round(3.2)) satırı ve Çıktı panelinde 3 4 3.
3
4
3.9
int()
kesirli kısmı atar
round()
en yakına yuvarlar
print(int(3.9), round(3.9), round(3.2))
Çıktı
3 4 3
İkinci sayı yazılmazsa round() en yakın tam sayıya yuvarlar; int() kesirli kısmı atar.
ValueError
Type conversion: üç kutu
Type conversion (tip çevirimi) için yan yana üç kutu, her biri çivit mavisi çerçeveli ve numaralı. 1 Otomatik: 3 (int, turuncu) artı 4.0 (float, hardal sarısı), aşağı bir okla 7.0 (float, hardal sarısı). 2 Açıkça: int("4") okla 4 (int, turuncu); float("3.25") okla 3.25 (float, hardal sarısı); str(4) okla "4" (str, yeşil). 3 Çevrilemeyen: int("abc") kırmızı bir okla kırmızı çerçeveli ValueError kutusuna gider. data-focus all durumunda vurgu yoktur ve alt bant boştur. data-focus auto durumunda 1. kutu kalın çivit mavisi çerçeveyle öne çıkar, 2. ve 3. kutu gri ve soluktur; altta print(3 + 4.0) ve print(type(3 + 4.0)) satırları ve Çıktı panelinde 7.0 ile <class 'float'> yazar. data-focus fail durumunda 3. kutu kalın çivit mavisi çerçeveyle öne çıkar, 1. ve 2. kutu gri ve soluktur; altta üç satır ve kırmızı son satırları: int("3.5"): ValueError: invalid literal for int() with base 10: '3.5'; float("3,5"): ValueError: could not convert string to float: '3,5'; int("abc"): ValueError: invalid literal for int() with base 10: 'abc'.
1
Otomatik
3
+
4.0
int
float
7.0
float
2
Açıkça
int("4")
4
float("3.25")
3.25
str(4)
"4"
3
Çevrilemeyen
int("abc")
ValueError
print(3 + 4.0)
print(type(3 + 4.0))
7.0
<class 'float'>
int("3.5")
ValueError: invalid literal for int() with base 10: '3.5'
float("3,5")
ValueError: could not convert string to float: '3,5'
int("abc")
ValueError: invalid literal for int() with base 10: 'abc'
Sayıya benzemeyen bir str çevrilemez: ValueError.
Ariane 5'in ilk uçuşu (1996)
Fotoğraf: Deadpan (Wikimedia Commons kullanıcısı), “Ariane 501 Fragment”, Wikimedia Commons, kamu malı. Boyutu küçültüldü.
Yazılım bir float'ı küçük tam sayı kutusuna sığdıramadı; roket parçalandı.
Python'da int taşmaz; tehlike ValueError.
input() ve int()
input() ve int(): içten dışa
İç içe çağrının içten dışa çalışması. data-focus int durumu: üstte credits = int(input("Kredi: ")) satırı ve altında köşeli ayraçlar, üç numaralı adım. 1: input("Kredi: ") kısmının üstünde, "4" verir yazısı ve "4" (str, yeşil). 2: int(...) kısmının altında 4 (int, turuncu), yanında 4 verir; bu kutu açık mavi, çivit mavisi çerçeveli bir bantta. 3: credits = kısmının altında lacivert credits isim etiketi, oku 4 (int, turuncu) kutusunu gösterir. Altta print(credits * 2) satırı ve Çıktı panelinde Kredi: 4 (4 petrol mavisi, kullanıcının yazdığı) ve 8. data-focus float durumu aynı düzende: coefficient = float(input("Katsayı: ")); 1: "2.5" (str, yeşil); 2: 2.5 (float, hardal sarısı) bantta; 3: lacivert coefficient etiketi 2.5'i gösterir; altta print(coefficient * 4), Çıktı: Katsayı: 2.5 ve 10.0.
credits = int(input("Kredi: "))
1
"4" verir
"4"
str
2
4
int
4 verir
3
credits
print(credits * 2)
Çıktı
Kredi: 4
8
coefficient = float(input("Katsayı: "))
1
"2.5" verir
"2.5"
str
2
2.5
float
2.5 verir
3
coefficient
print(coefficient * 4)
Çıktı
Katsayı: 2.5
10.0
İç içe yazılınca önce input(), sonra int() çalışır.
input() ve float()
input() ve int(): içten dışa
İç içe çağrının içten dışa çalışması. data-focus int durumu: üstte credits = int(input("Kredi: ")) satırı ve altında köşeli ayraçlar, üç numaralı adım. 1: input("Kredi: ") kısmının üstünde, "4" verir yazısı ve "4" (str, yeşil). 2: int(...) kısmının altında 4 (int, turuncu), yanında 4 verir; bu kutu açık mavi, çivit mavisi çerçeveli bir bantta. 3: credits = kısmının altında lacivert credits isim etiketi, oku 4 (int, turuncu) kutusunu gösterir. Altta print(credits * 2) satırı ve Çıktı panelinde Kredi: 4 (4 petrol mavisi, kullanıcının yazdığı) ve 8. data-focus float durumu aynı düzende: coefficient = float(input("Katsayı: ")); 1: "2.5" (str, yeşil); 2: 2.5 (float, hardal sarısı) bantta; 3: lacivert coefficient etiketi 2.5'i gösterir; altta print(coefficient * 4), Çıktı: Katsayı: 2.5 ve 10.0.
credits = int(input("Kredi: "))
1
"4" verir
"4"
str
2
4
int
4 verir
3
credits
print(credits * 2)
Çıktı
Kredi: 4
8
coefficient = float(input("Katsayı: "))
1
"2.5" verir
"2.5"
str
2
2.5
float
2.5 verir
3
coefficient
print(coefficient * 4)
Çıktı
Katsayı: 2.5
10.0
Ondalıklı bir girdi için float() kullanılır.
int() tek başına
credits = input("Kredi: ")
int(credits)
print(credits * 2)
Çıktı
Kredi: 4
44
int() tek başına: sonuç kayboluyor
3. satırdan sonraki memory. Lacivert credits ismi, okla "4" değerini (str, yeşil) gösteriyor. Altında soluk, gri çerçeveli bir 4 (int, turuncu) duruyor; ona hiçbir ok gitmiyor, yanında kimse saklamadı yazıyor: int(credits) bu değeri üretti ama hiçbir isme bağlanmadı. "4" değerinden aşağı inen ok credits * 2 ifadesini gösteriyor ve çıktı panelindeki 44'e gidiyor; 44 çivit mavisi çerçeveli açık mavi bir bandın içinde. credits ismi "4" değerini (str, yeşil) gösteriyor; soluk 4 (int, turuncu) hiçbir isme bağlı değil; çıktı 44.
credits
"4"
str
4
int
kimse saklamadı
44
credits * 2
Sonucu saklanmayan çevirim hiçbir şeyi değiştirmez.
5. f-string
Değerleri metnin içine yerleştirmek
AGNO'yu iki basamakla yazmak
print("AGNO:", 26.5 / 9)
Çıktı
AGNO: 2.9444444444444446
AGNO: 2 basamak ve fazlası
2.9444444444444446 (float, hardal sarısı) değeri yan yana 18 hardal sarısı kutuda, her karakter bir kutuda: 2, nokta, sonra 16 basamak. Noktadan sonraki ilk iki basamak, 9 ve 4, düz bir ayraçla işaretli: 2 basamak. Kalan 14 basamak kesik çizgili bir ayraçla işaretli: fazlası. Altta type etiketi float. Kaynak satırı: Hacettepe Ü. Ön Lisans ve Lisans Eğitim-Öğretim ve Sınav Yönetmeliği, Madde 25/3.
2 basamak
fazlası
2
.
9
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
float
Hacettepe Ü. Ön Lisans ve Lisans
Eğitim-Öğretim ve Sınav Yönetmeliği,
Madde 25/3
Yönetmelik AGNO'yu iki basamakla yazar; Ders 1'in çıktısı uzun.
f-string
f-string'in parçaları ve süslü parantezde hesap
Gri bir kod panelinde print(f"Selam {name}") satırı; f"Selam ve kapanan tırnak str (yeşil). Numaralı işaretler: 1 f harfi, f-string; 2 Selam, olduğu gibi yazılır; 3 {name}, değeriyle değişir. {name} yuvası çivit mavisi çerçeveli açık mavi bir bantta. Altta lacivert name ismi okla "millet" değerini (str, yeşil) gösteriyor; o değerden yukarı, {name} yuvasına bir ok çıkıyor. Sağ üstte Çıktı panelinde: Selam millet. Tıklayınca altta ikinci bir kod satırı gelir: print(f"Bugün {2 + 3} ders var."); bant {2 + 3} yuvasına geçer. Altında 5 (int, turuncu) kutusundan yuvaya bir ok çıkar, 4 numaralı işaret: önce hesaplanır. Çıktı'nın ikinci satırı: Bugün 5 ders var. Sağ altta: Süslü parantezin içine bir hesap da yazılabilir.
print(f"Selam
{name}
" )
1
f-string
2
olduğu gibi yazılır
name
"millet"
str
3
değeriyle değişir
Çıktı
Selam millet
print(f"Bugün
{2 + 3}
ders var." )
5
int
4
önce hesaplanır
Bugün 5 ders var.
Süslü parantezin içine
bir hesap da yazılabilir.
f-string, tırnaktan önce f yazılan ve {} içine değer konan str'dir.
+ ve f-string
credits = 4
print("Kredi: " + str(credits))
print(f"Kredi: {credits}")
Çıktı
Kredi: 4
Kredi: 4
+ ile ve f-string ile aynı çıktı
İki yol, üstten alta. + ile: 4 (int, turuncu) bir okla str() kutusuna, oradan "4" değerine (str, yeşil) gider; altında "Kredi: " + "4" satırı. f-string ile: 4 (int, turuncu) bir okla doğrudan {credits} yuvasına gider. İki yol da aynı çıktı paneline varır: Kredi: 4. Çıktı paneli çivit mavisi çerçeveli açık mavi bir bantta.
+ ile
4
str()
"4"
"Kredi: " + "4"
f-string ile
4
{credits}
Kredi: 4
f-string sayıyı str()'ye gerek kalmadan metnin içine yazar.
Virgül ve f-string
print("Kredi:", 4)
print(f"Kredi: {4}")
print("[", 4, "]")
print(f"[{4}]")
Çıktı
Kredi: 4
Kredi: 4
[ 4 ]
[4]
Virgül ve f-string: soru ve kural
Soru: Her satır ne yazar? Dört satır çıktıdan sonra bir tıklamayla kural: Virgül araya boşluğu kendisi koyar; f-string'de her karakteri siz yazarsınız.
Her satır ne yazar?
Virgül araya boşluğu kendisi koyar;
f-string'de her karakteri siz yazarsınız.
{:.2f}
{:.2f} ile iki basamak
data-focus format durumu: solda gri kod panelinde gpa = 26.5 / 9 ve print(f"AGNO: {gpa:.2f}"), altında Çıktı: AGNO: 2.94. Sağda bir satır: 2.9444444444444446 (float, hardal sarısı) kutusu, okla :.2f kutusuna, oradan okla 2.94 çıktısına gider. 1 numaralı işaret .2 üzerinde: 2 basamak; 2 numaralı işaret f üzerinde: noktalı sayı olarak. 2.94 çıktısı çivit mavisi çerçeveli açık mavi bir bantta. Sağda altta soru: Bu satırda iki f var: ikisi aynı şey mi? Bir tıklamayla koddaki ilk f çivit mavisi bir halkayla işaretlenir ve iki satır çıkar: f"..." tırnaktan önceki f: f-string başlar; :.2f buradaki f: noktalı sayı olarak yaz. data-focus same durumu: kod paneli dört satır olur: gpa = 26.5 / 9, print(f"{gpa:.2f}"), print(gpa), print(f"{10.0:.2f}"); Çıktı: 2.94, 2.9444444444444446, 10.00. İlk satırın altında iki satır daha görünür. İkinci satır: aynı 2.9444444444444446 (float, hardal sarısı) kutusu biçim kutusu olmadan düz bir okla 2.9444444444444446 çıktısına gider, altında değer değişmedi yazar; bant bu float kutusuna geçer. Üçüncü satır: 10.0 (float, hardal sarısı) kutusu :.2f kutusundan geçip 10.00 olur, altında basamak sayısı sabit yazar.
gpa = 26.5 / 9
print(f"AGNO: {gpa:.2f}" )
Çıktı
AGNO: 2.94
gpa = 26.5 / 9
print(f" {gpa:.2f}" )
print(gpa)
print(f" {10.0 :.2f}" )
Çıktı
2.94
2.9444444444444446
10.00
2.9444444444444446
float
:.2f
2.94
1
2 basamak
2
noktalı sayı olarak
2.9444444444444446
2.9444444444444446
değer değişmedi
10.0
:.2f
10.00
basamak sayısı sabit
Bu satırda iki f var: ikisi aynı şey mi?
f" ..."
tırnaktan önceki f: f-string başlar
:.2f
buradaki f: noktalı sayı olarak yaz
:.2f değeri noktadan sonra iki basamakla gösterir.
Gösterim ve değer
:.2f değeri değiştirmez, adım adım
Solda gri kod panelinde dört satır: gpa = 26.5 / 9, print(f"{gpa:.2f}"), print(gpa), print(f"{10.0:.2f}"); altında Çıktı paneli, başta yalnızca 2.94. Sağda ilk satır: 2.9444444444444446 (float, hardal sarısı) kutusu :.2f kutusundan geçip 2.94 olur. Bir tıklamayla ikinci satır çıkar: aynı 2.9444444444444446 kutusu (çivit mavisi çerçeveli açık mavi bantta) biçim kutusu olmadan düz bir okla 2.9444444444444446 çıktısına gider, altında değer değişmedi yazar; Çıktı panelinde 2.9444444444444446 belirir. Bir tıklamayla daha üçüncü satır: 10.0 (float) :.2f kutusundan geçip 10.00 olur, altında basamak sayısı sabit; Çıktı panelinde 10.00. Kod panelinin altında soru: gpa'nın kendisi 2.94 mü oldu? En son, sorunun altında büyük harflerle: :.2f yalnızca gösterimi değiştirir; değer aynı kalır.
gpa = 26.5 / 9
print(f" {gpa:.2f}" )
print(gpa)
print(f" {10.0 :.2f}" )
Çıktı
2.94
2.9444444444444446
float
:.2f
2.94
gpa 'nın kendisi 2.94 mü oldu?
2.9444444444444446
2.9444444444444446
değer değişmedi
2.9444444444444446
10.0
:.2f
10.00
basamak sayısı sabit
10.00
:.2f yalnızca gösterimi değiştirir; değer aynı kalır.
round() ve :.2f
print(round(10.0, 2))
print(f"{10.0:.2f}")
Çıktı
10.0
10.00
round() ve :.2f: soru ve kural
Soru: AGNO'yu hep iki basamakla yazmak için hangisi? İki satır çıktıdan sonra bir tıklamayla kural: round() sondaki 0'ı yazmaz; :.2f hep iki basamak yazar.
AGNO'yu hep iki basamakla yazmak için hangisi?
round() sondaki 0 'ı yazmaz;
:.2f hep iki basamak yazar.
f harfini unutmak
f harfi unutulmuş bir SMS
Elle çizilmiş gibi basit bir resim. Solda büyük bir telefon ekranında tek bir mesaj var: "Sayın {name},". Sağda bir öğrenci telefonu tutuyor, öbür eliyle başını kaşıyor ve şaşkın bakıyor; konuşma balonunda "{name} kim?" yazıyor. En altta print("Sayın {name}") kodu var.
Sayın
{name},
{name} kim?
print("Sayın {name}")
f yoksa süslü parantezler metin olarak yazılır.
"Sayın {name}" diye başlayan SMS gibi.
name = "Ömer"
print("Sayın {name}")
print(f"Sayın {name}")
Çıktı
Sayın {name}
Sayın Ömer
6. String methods ve immutable str
Metni temizlemek ve değiştirmek
Method (metot)
print("mat101".upper())
Method çağrısının parçaları
Gri kod panelinde "mat101".upper() ifadesi; "mat101" str (yeşil). Numaralı işaretler: 1 "mat101", değer; 2 nokta; 3 upper, method'un adı; 4 parantezler. Sağa giden ok, çivit mavisi çerçeveli açık mavi bir bandın içindeki yeni "MAT101" değerine (str, yeşil) varır; yanında yeni str yazar, altında type etiketi str. En altta Çıktı panelinde MAT101. "mat101" (str, yeşil), nokta, upper ve parantezler; ok yeni "MAT101" değerine (str, yeşil) gidiyor.
"mat101" .upper()
1
değer
3
method'un adı
2
nokta
4
parantezler
"MAT101"
str
yeni str
Çıktı
MAT101
Method, bir değerin arkasına nokta ile yazılıp çalıştırılan bir işlemdir.
strip()
strip(), upper() ve lower()
data-focus strip durumu (S73): solda lacivert code isim etiketi, oku dokuz yeşil kutuya gidiyor (str, yeşil): iki boşluk, m, a, t, 1, 0, 1 ve bir boşluk; boşluklar kutunun ortasında çivit mavisi bir noktayla gösterilir. strip() etiketli ok aşağıdaki satıra iniyor: altı yeşil kutu, m, a, t, 1, 0, 1, kalın çivit mavisi bir çerçevenin içinde. Silinen üç boşluk eski yerlerinde kırmızı kesikli boş kutular olarak duruyor, altlarında silindi yazısı. Sağda Çıktı paneli: [ mat101 ] ve [mat101]. data-focus case durumu (S74): code etiketi Mat101 değerinin altı yeşil kutusuna gidiyor (str, yeşil). upper() etiketli ok aşağıda MAT101 satırına iniyor; bu satır kalın çivit mavisi çerçeveli. lower() etiketli ok sağa ve aşağı giderek mat101 satırına ulaşıyor. Rakamlar iki satırda da aynı kalıyor. Çıktı paneli: MAT101 ve mat101.
code
m
a
t
1
0
1
m
a
t
1
0
1
silindi
silindi
strip()
Çıktı
[ mat101 ]
[mat101]
code
M
a
t
1
0
1
M
A
T
1
0
1
m
a
t
1
0
1
upper()
lower()
Çıktı
MAT101
mat101
strip() baştaki ve sondaki boşlukları siler.
Köşeli parantezler yalnızca boşlukları görmek için.
upper() ve lower()
strip(), upper() ve lower()
data-focus strip durumu (S73): solda lacivert code isim etiketi, oku dokuz yeşil kutuya gidiyor (str, yeşil): iki boşluk, m, a, t, 1, 0, 1 ve bir boşluk; boşluklar kutunun ortasında çivit mavisi bir noktayla gösterilir. strip() etiketli ok aşağıdaki satıra iniyor: altı yeşil kutu, m, a, t, 1, 0, 1, kalın çivit mavisi bir çerçevenin içinde. Silinen üç boşluk eski yerlerinde kırmızı kesikli boş kutular olarak duruyor, altlarında silindi yazısı. Sağda Çıktı paneli: [ mat101 ] ve [mat101]. data-focus case durumu (S74): code etiketi Mat101 değerinin altı yeşil kutusuna gidiyor (str, yeşil). upper() etiketli ok aşağıda MAT101 satırına iniyor; bu satır kalın çivit mavisi çerçeveli. lower() etiketli ok sağa ve aşağı giderek mat101 satırına ulaşıyor. Rakamlar iki satırda da aynı kalıyor. Çıktı paneli: MAT101 ve mat101.
code
m
a
t
1
0
1
m
a
t
1
0
1
silindi
silindi
strip()
Çıktı
[ mat101 ]
[mat101]
code
M
a
t
1
0
1
M
A
T
1
0
1
m
a
t
1
0
1
upper()
lower()
Çıktı
MAT101
mat101
upper() harfleri büyütür, lower() küçültür; rakamlar aynı kalır.
Yeni Türk alfabesi ve noktalı i (1928)
Fotoğraf: Türkiye Cumhuriyeti Cumhurbaşkanlığı, “Ataturk-September 20, 1928”, Wikimedia Commons, kamu malı.
upper() ve lower() Türkçedeki i ve ı kuralını bilmez.
Python'da
print("i".upper(), "ı".upper())
word = "ırmak".upper()
print(word)
print(word.lower())
Çıktı
I I
IRMAK
irmak
replace()
replace() ve float()
3,25 değeri dört yeşil kutuda (str, yeşil): 3, virgül, 2, 5; virgül kutusu kalın çivit mavisi çerçeveli. Ok replace(",", ".") kutusuna, oradan yeni "3.25" değerine gidiyor (str, yeşil); bu kutu açık mavi, çivit mavisi çerçeveli bir bandın içinde. Çıktı paneli: 3.25. Tıklayınca "3.25" kutusundan float() etiketli bir ok 3.25 değerine iniyor (float, hardal sarısı), oradan + 1 etiketli ok 4.25 değerine (float, hardal sarısı) gidiyor; bant 4.25 kutusuna geçer, Çıktı panelinin ikinci satırı 4.25. Solda: Virgüllü katsayı böylece float'a çevrilir.
3
,
2
5
replace(",", ".")
"3.25"
str
Çıktı
3.25
float()
3.25
float
+ 1
4.25
float
4.25
Virgüllü katsayı böylece float'a çevrilir.
replace(eski, yeni) her eskiyi yeniyle değiştirir.
Tırnak içindeki virgül metin; dışındaki eskiyi yeniden ayırır.
count()
count() ile saymak
MAT101 altı yeşil kutuda (str, yeşil): M, A, T, 1, 0, 1; iki 1 kutusu kalın çivit mavisi çerçeveli. .count("1") etiketli ok 2 değerine gidiyor (int, turuncu); 2 kutusu açık mavi, çivit mavisi çerçeveli bir bantta. Altında "Hacettepe" (str, yeşil) değerinden .count("e") etiketli ok 3 değerine (int, turuncu) gidiyor. Sağda Çıktı paneli: 2 ve 3.
M
A
T
1
0
1
.count("1")
2
int
"Hacettepe"
.count("e")
3
int
Çıktı
2
3
count() bir parçanın kaç kez geçtiğini sayı olarak verir.
Immutable (değişmez)
str değişmez: iki program satır satır
İki numaralı panel yan yana, satır satır; çalışan satır açık mavi bir bantta. Başta yalnızca 1. panel: kod code = "mat101", code.upper(), print(code); ilk satır bantta, lacivert code isim etiketinin oku "mat101" değerine gidiyor (str, yeşil), altında str, değişmez yazıyor; Çıktı paneli boş. Birinci tıklama: code.upper() satırı bantta; altta soluk, gri çerçeveli yeni bir "MAT101" kutusu, ona hiçbir ok gitmiyor, yanında kimse saklamadı yazısı. İkinci tıklama: print(code) satırı bantta, Çıktı: mat101. Üçüncü tıklama: sağda 2. panel, 1. panel gibi başlıyor. Kod code = "mat101", code = code.upper(), print(code); ilk satır bantta, code etiketinin oku "mat101" değerine gidiyor (str, yeşil), altında str, değişmez; Çıktı paneli boş. Dördüncü tıklama: code = code.upper() satırı bantta. Altta yeni bir "MAT101" değeri (str, yeşil), açık mavi, çivit mavisi çerçeveli bir bandın içinde; code etiketinin oku artık ona gidiyor, "mat101" değerine giden eski ok gri ve kesikli. Altında: Sonucu aynı isme atarsak isim yeni str'yi gösterir. Beşinci tıklama: print(code) satırı bantta, Çıktı: MAT101.
1
code = "mat101"
code.upper()
print(code)
code
"mat101"
str, değişmez
Çıktı
"MAT101"
kimse saklamadı
mat101
2
code = "mat101"
code = code.upper()
print(code)
code
"mat101"
str, değişmez
Çıktı
"MAT101"
Sonucu aynı isme atarsak
isim yeni str'yi gösterir.
MAT101
str değişmez: method yeni bir str üretir, eskisi aynı kalır.
Method'ları art arda çağırmak
Method'ları art arda çağırmak
Solda altı satırlık kod: code = " mat101 ", clean = code.strip(), print(f"[{clean}]"), clean = clean.upper(), print(f"[{clean}]"), print(f"[{code.strip().upper()}]"). Altında Çıktı paneli: [mat101], [MAT101], [MAT101]. Sağda yukarıdan aşağı: lacivert code isim etiketi " mat101 " değerine gidiyor (str, yeşil; baştaki iki boşluk ve sondaki bir boşluk çivit mavisi noktalarla gösterilir). strip() etiketli ok yeni "mat101" değerine iniyor (str, yeşil), yanında yeni str yazısı; lacivert clean etiketi önce ona gidiyordu; bu ok artık gri ve kesikli, çünkü clean = clean.upper() satırından sonra clean etiketinin oku "MAT101" değerine gidiyor. upper() etiketli ok yeni "MAT101" değerine iniyor (str, yeşil), yanında yeni str; bu kutu açık mavi, çivit mavisi çerçeveli bir bandın içinde. İki okun yanında kesikli bir ayraç var, üstünde code.strip().upper() yazıyor: tek satır aynı iki adımı soldan sağa yapar.
code = " mat101 "
clean = code.strip()
print(f"[{clean}]")
clean = clean.upper()
print(f"[{clean}]")
print(f"[{code.strip().upper()}]")
Çıktı
[mat101]
[MAT101]
[MAT101]
code
"
mat101
"
strip()
clean
"mat101"
yeni str
upper()
"MAT101"
yeni str
code.strip().upper()
Method'lar soldan sağa, art arda çağrılabilir.
input() ve method'lar
code = input("Ders kodu: ").strip().upper()
print(code)
Çıktı
Ders kodu: mat123
MAT123
input() bir str verir; method'lar o str'ye art arda uygulanır.
Başında boşlukla mat123 yazıldı: code ne olur?
String methods özeti
method ne yapar örnek çıktı
strip()baştaki ve sondaki boşluğu atar print("[" + " mat101 ".strip() + "]")[mat101]
upper()büyük harfe çevirir print("Mat101".upper())MAT101
lower()küçük harfe çevirir print("Mat101".lower())mat101
replace()bir parçayı başkasıyla değiştirir print("3,25".replace(",", "."))3.25
count()bir parçanın kaç kez geçtiğini sayar print("Hacettepe".count("e"))3
count() bir int verir; ötekiler yeni bir str verir, asıl str değişmez.
Python ne yazdırır?
name = " nur "
name.upper()
print(f"[{name.strip()}]")
[NUR]
[ nur ]
[ NUR ]
[nur]
name.upper() yeni bir str üretti, kimse saklamadı; strip() yalnızca boşlukları siler.
7. Index, len() ve slicing
str'nin karakterlerine tek tek ulaşmak
Index (indis)
Index: code = "MAT101" ve üç karakter
Solda Genel biçim: <str>[<index>]. Yanında kod: code = "MAT101". Altında lacivert code isim etiketi bir okla altı yeşil hücreyi gösteriyor (str): M, A, T, 1, 0, 1; hücrelerin üstünde 0'dan 5'e index'ler, sağ uçta str. Birinci tıklama: 0 numaralı hücre kalın çivit mavisi çerçeveli; altında code[0] ve yeşil "M" kutusu, etiketi str. İkinci tıklama: çerçeve 2 numaralı hücreye geçer; code[2] ve "T" (str). Üçüncü tıklama: çerçeve 5 numaralı hücreye geçer; code[5] ve "1" (str). Sonuçlar altta yan yana kalır.
Genel biçim
<str> [<index> ]
code = "MAT101"
code
M
A
T
1
0
1
index
0
1
2
3
4
5
str
"M"
str
code[0 ]
"T"
str
code[2 ]
"1"
str
code[5 ]
Index, bir karakterin sıra numarasıdır; 0'dan başlar.
len() ve length (uzunluk)
len(): karakter sayısı
Solda Genel biçim: len(<str>). Yanında kod: code = "MAT101". Altında lacivert code isim etiketi altı yeşil hücreyi gösteriyor (str): M, A, T, 1, 0, 1; index numarası yok. Birinci tıklama: altı hücrenin altında çivit mavisi bir parantez, ortasında len(code), oktan sonra 6 (int, turuncu). İkinci tıklama: altta iki satır daha: len("A") 1 ve len("") 0 (int, turuncu).
Genel biçim
len(<str> )
code = "MAT101"
code
M
A
T
1
0
1
str
6
int
len(code)
1
int
0
int
len("A" )
len("" )
len(), bir str'nin length'ini, yani karakter sayısını verir.
Son index
Son index: uzunluk 7, son index 6
Üstte soru: player 7 karakterli bir str. Son karakterin index'i kaç? Sağ üstte kod: player = "Iniesta". Lacivert player isim etiketi yedi yeşil hücreyi gösteriyor (str): I, n, i, e, s, t, a; altlarında çivit mavisi parantez, len(player) ve 7 (int, turuncu). Birinci tıklama, cevap: hücrelerin üstünde 0'dan 6'ya index'ler; son hücre kalın çivit mavisi çerçeveli, üstünde son index yazıyor. İkinci tıklama, altta büyük yazıyla: Son karakterin index'i len() - 1'dir: 7 - 1 = 6.
player 7 karakterli bir str. Son karakterin index'i kaç?
player = "Iniesta"
player
I
n
i
e
s
t
a
str
7
int
len(player)
index
0
1
2
3
4
5
6
son index
Son karakterin index'i len() - 1'dir: 7 - 1 = 6.
IndexError
player = "Iniesta"
print(player[7])
Çıktı
Traceback (most recent call last): File "…/python-kurs/example.py", line 2, in <module>2 print(player[7]) ~~~~~~^^^ IndexError: string index out of range 1
Index 0'dan 6'ya kadar; player[7] diye bir karakter yok.
Dijkstra'nın EWD831 notu (1982)
Fotoğraf: Hamilton Richards, “Edsger Wybe Dijkstra”, Wikimedia Commons, CC BY-SA 3.0. Boyutu küçültüldü.
Dijkstra (1982): bir elemanın index'i, önündeki eleman sayısıdır.
player[6], yani a: önünde 6 harf var.
Negatif index
Negatif index: sondan saymak
Üstte kod: code = "MAT101". Lacivert code isim etiketi altı yeşil hücreyi gösteriyor (str): M, A, T, 1, 0, 1; üstlerinde 0'dan 5'e index'ler. Birinci tıklama: hücrelerin altında açık mavi bir şeritte negatif index'ler, -6'dan -1'e; solunda negatif index yazıyor. İkinci tıklama: son hücre kalın çivit mavisi çerçeveli; altında code[-1] ve yeşil "1" (str). Üçüncü tıklama: çerçeve ilk hücreye geçer; altında code[-6] ve "M" (str).
code = "MAT101"
code
M
A
T
1
0
1
index
0
1
2
3
4
5
str
negatif index
-6
-5
-4
-3
-2
-1
"1"
str
code[-1 ]
"M"
str
code[-6 ]
Negatif index sondan sayar; -1 son karakterdir.
Slicing (dilimleme)
Slicing: code[0:3], hücre hücre
Solda Genel biçim: <str>[<başla>:<bitiş>]. Yanında kod: code = "MAT101". Lacivert code isim etiketi altı yeşil hücreyi gösteriyor (str): M, A, T, 1, 0, 1; üstlerinde 0'dan 5'e index'ler. Solda altta code[0:3]. Her tıklamada bir hücre: 0 numaralı hücre çivit mavisi çerçeveli, oku aşağıda yeni bir M hücresine iner; sonra 1 numaralı A, sonra 2 numaralı T; alttaki hücreler yan yana MAT olur. Son tıklamada 3 numaralı hücre gri kesik çizgili, altında alınmaz yazıyor; alttaki üç hücre çivit mavisi çerçeveyle tek bir parça, yanında str.
Genel biçim
<str> [<başla> :<bitiş> ]
code = "MAT101"
code
M
A
T
1
0
1
index
0
1
2
3
4
5
str
code[0 :3 ]
M
A
T
alınmaz
str
Slicing bir parça alır: başla dahil, bitiş dahil değil.
code[:3] ve code[3:]
Slicing: başla ya da bitiş yazılmazsa
Üstte kod: code = "MAT101". Lacivert code isim etiketi altı yeşil hücreyi gösteriyor (str): M, A, T, 1, 0, 1; üstlerinde 0'dan 5'e index'ler. Her tıklamada bir satır, her satırda solda ifade, sağında alınan hücreler aynı sütunlarda, çivit mavisi çerçeveli, sonunda str ve bir açıklama. Birinci satır: code[:3], M, A, T, bölüm kodu. İkinci satır: code[3:], ok boş sütunları geçip 1, 0, 1'e gider, ders numarası. Üçüncü satır: code[:], altı hücrenin hepsi, hepsi.
code = "MAT101"
code
M
A
T
1
0
1
index
0
1
2
3
4
5
str
code[:3 ]
M
A
T
str
bölüm kodu
code[3 :]
1
0
1
str
ders numarası
code[:]
M
A
T
1
0
1
str
hepsi
Başla yazılmazsa baştan, bitiş yazılmazsa sona kadar.
Slicing adım adım
Klavyeden gelen str de dilimlenir; code değişmez.
Slicing ve adım
Slicing ve adım: code[::2] ve code[::-1]
Solda Genel biçim: <str>[<başla>:<bitiş>:<adım>]. Yanında kod: code = "MAT101". Lacivert code isim etiketi altı yeşil hücreyi gösteriyor (str): M, A, T, 1, 0, 1; üstlerinde 0'dan 5'e index'ler. Birinci tıklama: 0, 2 ve 4 numaralı hücreler çivit mavisi çerçeveli, altlarında birer atlayan oklar; altta code[::2] oku "MT0" kutusuna (str, yeşil). İkinci tıklama: çerçeveler ve atlayan oklar kalkar, son hücre çivit mavisi çerçeveli; hücrelerin altında sondan başa beş kısa ok, her biri bir önceki hücreye: 5'ten 4'e, 4'ten 3'e, 3'ten 2'ye, 2'den 1'e, 1'den 0'a; altta code[::-1] oku "101TAM" kutusuna (str, yeşil), kutu açık mavi, çivit mavisi çerçeveli bir bantta; en altta: Adım eksiyse boş başla sondan, boş bitiş baştan demektir.
Genel biçim
<str> [<başla> :<bitiş> :<adım> ]
code = "MAT101"
code
M
A
T
1
0
1
index
0
1
2
3
4
5
str
"MT0"
str
code[::2 ]
"101TAM"
str
code[::-1 ]
Adım eksiyse boş başla sondan, boş bitiş baştan demektir.
Üçüncü sayı adımdır; -1 adımı str'yi tersten okur.
Index ve slicing özeti
code = "MAT101"örnek çıktı
ilk karakter print(code[0])M
son karakter print(code[-1])1
ilk üç karakter print(code[:3])MAT
3. index'ten sona print(code[3:])101
ikişer atlayarak print(code[::2])MT0
karakter sayısı print(len(code))6
Köşeli parantezde tek sayı bir karakter, iki nokta bir parça verir.
10 dakika ara
2A Metinle çalışmak: str, input(), f-string, string methods, slicing
2B Programa karar verdirmek: comparison, and/or/not, if, elif
Sırada 2B
2B'nin hedefi
Tek yol ve yol ayrımı
Elle çizilmiş gibi basit bir resim, iki bölme. Solda yukarı doğru uzanan düz, tek bir yol; yanında gülümseyen bir öğrenci duruyor, yolun yanında tek yol yazıyor. Sağda aynı yol bir yerde ikiye ayrılıyor; ayrımın yanındaki tabelada score >= 50 yazıyor. Yolun başındaki öğrenci tabelaya bakıp Hangi yol? diye soruyor.
tek yol
score >= 50
Hangi yol?
Şimdiye kadar program tek yoldan gitti; bundan sonra şarta göre yol seçecek.
2B konuları
Bu yarıda programa karar verdirmeyi öğreneceksiniz.
8. Comparison operators ve bool==, !=, <, >, <=, >=, in; cevap True ya da False
9. Logical operatorsand, or, not; iki kıyaslamayı tek şartta birleştirmek
10. if ve elsecontrol structures, indentation; iki yoldan biri
11. elifüç ve daha fazla yol, Madde 24'ün tablosu
8. Comparison operators ve bool
İki value'yu kıyaslamak ve cevabı saklamak
Operator aileleri
Operator aileleri
Kursta görülecek dört operator ailesi, dört sütun. Arithmetic, 7 operator: + - * / // % **; bu derste başlığı açık mavi ve çivit mavisi çerçeveyle vurgulu. Comparison, 6 operator: == != < > <= >=. Logical, 3 operator: and or not. Membership, 1 operator: in. Bu üç ailenin hücreleri gri kesikli, yazıları gri, başlıklarının sağında hangi derste görüleceği yazıyor: Ders 1'de Ders 2, Ders 2'de 2B. + ve * hücrelerinde Ders 2A için boş bir ikinci satır yeri var (str ile).
+
str ile
-
*
str ile
/
//
%
**
Arithmetic 7
Ders 2 2B
==
!=
<
>
<=
>=
Comparison 6
Ders 2 2B
and
or
not
Logical 3
Ders 2 2B
in
Membership 1
Ders 2 2B
Ders 1'deki tabloya bugün üç aile ekleniyor.
Comparison operators (kıyaslama işlemcileri)
Altı comparison operator
Altı comparison operator (kıyaslama işlemcisi), sordukları sorular ve 7 ile 5'li örneklerin cevapları. Sol sütun: == eşit mi?, 7 == 7, True; != eşit değil mi?, 7 != 7, False; < küçük mü?, 7 < 5, False. Sağ sütun: > büyük mü?, 7 > 5, True; <= küçük ya da eşit mi?, 7 <= 6, False; >= büyük ya da eşit mi?, 7 >= 7, True. Örneklerdeki 7, 5 ve 6 int (turuncu); cevaplar bool (deniz yeşili). Alttaki satır: Cevap her zaman True ya da False'tur.
6 comparison operator
==
eşit mi?
7 == 7
True
!=
eşit değil mi?
7 != 7
False
<
küçük mü?
7 < 5
False
>
büyük mü?
7 > 5
True
<=
küçük ya da eşit mi?
7 <= 6
False
>=
büyük ya da eşit mi?
7 >= 7
True
Cevap her zaman True ya da False'tur.
Comparison operator iki value'yu kıyaslar; her biri bir soru sorar.
bool (mantıksal tip)
bool'un iki value'su
Solda bool başlıklı bir çerçeve; içinde yalnızca iki value: True ve False, ikisi de bool (deniz yeşili), altlarında type etiketi bool. Sağda iki soru: 4 > 3, büyük mü?, oku True'yu gösterir; 4 < 3, küçük mü?, oku False'u gösterir; 4 ve 3 int (turuncu). Çıktı paneli: True False ve <class 'bool'>. Alttaki satır: bool'un iki value'su vardır.
bool
True
bool
False
bool
4 > 3
büyük mü?
True
4 < 3
küçük mü?
False
Çıktı
True False
<class 'bool'>
bool'un iki value'su vardır.
bool type'ının yalnızca iki value'su vardır: True ve False.
bool, adını George Boole'dan alır.
True ve False'un yazılışı
True, "True" ve true
Üç yazılış, üç satır; her satırda soldan sağa kod, ok, Python'un gördüğü ve ekrana yazılan. Birinci satır print(True, type(True)): True bir bool value'dur (deniz yeşili), açık mavi bant ve çivit mavisi çerçeveyle vurgulu, altında type'ı bool; çıktı True <class 'bool'>. İkinci satır print("True", type("True")): "True" tırnak içinde bir str'dir (yeşil), altında type'ı str; çıktı True <class 'str'>. Üçüncü satır print(true): küçük harfli true lacivert bir isim etiketidir; kırmızı oku kırmızı kesik çizgili boş bir kutuya gider, yanında böyle bir isim yok yazar. En altta kırmızı: NameError: name 'true' is not defined. Did you mean: 'True'?
print(True , type(True ))
True
bool
True <class 'bool'>
print("True" , type("True" ))
"True"
str
True <class 'str'>
print(true)
true
böyle bir isim yok
NameError: name 'true' is not defined. Did you mean: 'True'?
True ve False büyük harfle ve tırnaksız yazılır.
Data types ve bool
value
Numbers (sayılar)
Integral
Real
Sequences (diziler)
Immutable
str"7"rangeDers 3 tupleDers 5
Mutable
Set types (kümeler)
Mappings
None
bu derste daha önce sonraki derslerde
bool, Numbers altında int'in yanında durur.
Kıyaslama örnekleri
print(10 == 10.0, "10" == 10, "B1" == "b1")
Çıktı
True False False
Üç kıyaslama: == ile eşit mi?
Üç sütun, her birinde tek bir == kıyaslaması. Birinci: 10 (int, turuncu) == 10.0 (float, hardal sarısı), eşit mi?, cevap True. İkinci: "10" (str, yeşil) == 10 (int, turuncu), eşit mi?, cevap False; bu cevap çivit mavisi çerçeveli açık mavi bantta, altında hata yok, yalnızca False. Üçüncü: "B1" (str, yeşil) == "b1" (str, yeşil), eşit mi?, cevap False. Cevaplar bool (deniz yeşili).
10
int
==
10.0
float
eşit mi?
True
"10"
str
==
10
int
eşit mi?
False
hata yok, yalnızca False
"B1"
str
==
"b1"
str
eşit mi?
False
"10" ile 10 eşit değildir; Python hata vermez, False der.
str'leri kıyaslamak
print(ord("Z"), ord("a"))
print("Z" < "a")
print("Zehra" < "ali")
Çıktı
90 97
True
True
str'leri kıyaslamak: soru ve kural
Soru: "Z" < "a" True mu, False mu? Üç satır çıktıdan sonra bir tıklamayla kural: str'ler harf harf, karakterlerin sayılarıyla kıyaslanır.
"Z" < "a" True mu, False mu?
str'ler harf harf, karakterlerin sayılarıyla kıyaslanır.
bool value'yu saklamak
Bir isim bool value'yu gösterir
Solda üç satırlık kod: coefficient = 2.5, passed = coefficient >= 1.75, print(passed, type(passed)); 2.5 ve 1.75 float (hardal sarısı). Altında çıktı: True <class 'bool'>. Sağda lacivert isim etiketleri: coefficient 2.5'i (float, hardal sarısı) gösterir. Aradaki satır 2.5 >= 1.75 hesaplanır ve oku aşağıda True'ya iner, yanında önce sağ taraf hesaplanır yazar. passed True'yu (bool, deniz yeşili) gösterir; True kutusu çivit mavisi çerçeveli açık mavi bantta.
coefficient = 2.5
passed = coefficient >= 1.75
print(passed, type(passed))
True <class 'bool'>
coefficient
2.5
float
2.5 >= 1.75
önce sağ taraf hesaplanır
passed
True
bool
Kıyaslamanın sonucu da bir value'dur; bir isim onu gösterebilir.
bool ve hedef program
bool ve hedef program
Solda Bu bölümde başlığı altında iki satırlık kod: grade_point = 2.50 ve print(grade_point >= 1.75); 2.50 ve 1.75 float, hardal sarısı. grade_point >= 1.75 kısmı açık mavi bantta, çivit mavisi çerçeveli. Ok aşağıda çıktıya iner: True. Sağda 10. bölümde başlığı altında soluk ve kesik çizgili bir kutuda hedef programın iki satırı: if grade_point >= 1.75: ve içeride status = "geçti"; altında: True ise geçti.
Bu bölümde
grade_point = 2.50
print(
grade_point >= 1.75
)
Çıktı
True
10. bölümde
if grade_point >= 1.75:
status = "geçti"
True ise geçti
Hedef programdaki "geçti" kararı tek bir kıyaslamaya bakar.
= ve ==
= ve ==
Solda = başlığı ve assignment etiketi: credits = 4; lacivert isim etiketi credits, 4'ü gösterir (int, turuncu); altında isme value bağlar, çıktı vermez. Sağda == başlığı ve comparison operator etiketi: credits == 4; eşit mi? kutusundan çıkan ok True'yu gösterir (bool, deniz yeşili). Bir tıklamayla altta soru satırı çıkar: x 5 iken x == x + 1. Bir tıklamayla daha cevap: False (bool, deniz yeşili); 5 ile 6 eşit değil; x = x + 1 ise x'i 6 yapar.
=
assignment
credits = 4
credits
4
int
isme value bağlar, çıktı vermez
==
comparison operator
credits == 4
eşit mi?
True
bool
x 5 iken
x == x + 1
False
5 ile 6 eşit değil;
x = x + 1
ise x'i 6 yapar
= isme value bağlar; == iki value eşit mi diye sorar.
== ve float
print(0.1 + 0.2 == 0.3)
print(round(0.1 + 0.2, 2) == 0.3)
print(0.5 + 0.25 == 0.75)
Çıktı
False
True
True
== ve float: soru ve kural
Soru: Her satır True mu, False mu? Üç satır çıktıdan sonra bir tıklamayla kural: İki float'ı == ile kıyaslamadan önce yuvarlayın.
Her satır True mu, False mu?
İki float'ı == ile kıyaslamadan önce yuvarlayın.
in
print("MAT" in "MAT101", "mat" in "MAT101")
Çıktı
True False
in: "MAT" ve "mat", "MAT101" içinde
MAT101'in altı harfi (str, yeşil); MAT ilk üç harfte geçer, True; mat geçmez, False (bool, deniz yeşili). İki satırda da MAT101'in altı harfi yan yana yeşil kutularda: M, A, T, 1, 0, 1. Birinci satırın solunda "MAT" in; ilk üç kutu M, A, T kalın çivit mavisi çerçeveyle vurgulu, üstlerinde bir köşeli çizgi ve "burada geçiyor"; sağda bir ok ve True. İkinci satırın solunda "mat" in; hiçbir kutu vurgulu değil, altında "küçük harfle hiçbir yerde yok"; sağda bir ok ve False.
M
A
T
1
0
1
"MAT" in
True
bool
M
A
T
1
0
1
"mat" in
False
bool
burada geçiyor
küçük harfle hiçbir yerde yok
in, bir str'nin başka bir str'nin içinde geçip geçmediğini sorar.
Kıyaslama ve TypeError
Kıyaslama ve TypeError: klavyeden gelen "85" > 50
İki sütun. Solda kırmızı başlık Geçersiz: score = input("Puan: ") ve print(score > 50); altında 8 ve 5 tuşlarından bir ok yeşil "85" kutusuna (str) gider, "85" ile 50 (int, turuncu) arasındaki > işaretinin üstünde kırmızı çarpı; en altta kırmızı: TypeError: '>' not supported between instances of 'str' and 'int'. Sağda petrol mavisi başlık Geçerli: score = int(input("Puan: ")) ve print(score > 50); 8 ve 5 tuşlarından çıkan ok açık mavi zeminli çivit mavisi çerçeveli int() kutusundan geçip 85 (int) kutusuna gider; 85 > 50, bir ok ve True (bool, deniz yeşili). Altta: == hata vermez; < ve > str ile sayıyı kıyaslamaz.
Geçersiz
score = input("Puan: " )
print(score > 50 )
8
5
"85"
str
>
50
int
TypeError: '>' not supported
between instances of 'str' and 'int'
Geçerli
score = int(input("Puan: " ))
print(score > 50 )
8
5
int()
85
int
>
50
int
True
bool
== hata vermez; < ve > str ile sayıyı kıyaslamaz.
Klavyeden gelen puan str'dir: kıyaslamadan önce int().
Python ne yazdırır?
print(2.0 == 2)
print("7" != 7)
print("x" in "Hacettepe")
True
False
False
False
True
False
True
True
False
TypeError
2.0 ile 2 aynı sayı; str, int'e hiç eşit olmaz; Hacettepe'de x yok.
9. Logical operators
Kıyaslamaları and, or ve not ile birleştirmek
Logical operators (mantıksal işlemciler)
Operator aileleri
Kursta görülecek dört operator ailesi, dört sütun. Arithmetic, 7 operator: + - * / // % **; bu derste başlığı açık mavi ve çivit mavisi çerçeveyle vurgulu. Comparison, 6 operator: == != < > <= >=. Logical, 3 operator: and or not. Membership, 1 operator: in. Bu üç ailenin hücreleri gri kesikli, yazıları gri, başlıklarının sağında hangi derste görüleceği yazıyor: Ders 1'de Ders 2, Ders 2'de 2B. + ve * hücrelerinde Ders 2A için boş bir ikinci satır yeri var (str ile).
+
str ile
-
*
str ile
/
//
%
**
Arithmetic 7
Ders 2 2B
==
!=
<
>
<=
>=
Comparison 6
Ders 2 2B
and
or
not
Logical 3
Ders 2 2B
in
Membership 1
Ders 2 2B
Üç logical operator vardır: and, or ve not.
and (ve)
print(True and True, True and False)
Çıktı
True False
Doğruluk tablosu: and, or, not
Doğruluk tablosu, beş sütun: a, b, a and b, a or b, not a. Dört satır: a True, b True: and True, or True, not a False. a True, b False: and False, or True, not a False. a False, b True: and False, or True, not a True. a False, b False: and False, or False, not a True. a ve b hücreleri bool (deniz yeşili); sonuçlarda True açık mavi zeminde petrol mavisi, False beyaz zeminde gri yazılır. Bu durumda a and b sütunu kalın çivit mavisi çerçeveyle vurgulu; a or b ve not a soluk, kesikli gri çerçeveli. (data-now="or": a or b sütunu vurgulu. data-now="not": not a sütunu vurgulu.)
a
True
True
False
False
b
True
False
True
False
a and b
True
False
False
False
a or b
True
True
True
False
not a
False
False
True
True
and, iki taraf da True ise True verir.
and ile iki kıyaslama
and ve or: credits >= 3 ile coefficient >= 1.75
credits 3'ü (int, turuncu), coefficient 1.5'i (float, hardal sarısı) gösterir; kıyaslamalar True ve False (bool, deniz yeşili); and sonucu False. Solda iki lacivert isim etiketi: credits oktan 3'e, coefficient oktan 1.5'e. Sağda iki kıyaslama kutusu: credits >= 3 aşağı okla True'ya, coefficient >= 1.75 aşağı okla False'a. İki değerden birer ok ortadaki and kutusuna gider; sonucu belirleyen False'tan gelen ok koyu, True'dan gelen gri. and kutusundan bir ok sonuç kutusuna: False, açık mavi zeminli çivit mavisi çerçeve içinde. Altındaki çıktı panelinde False. (data-now="or": kutuda or, sonuç True, True'dan gelen ok koyu, False'tan gelen gri, çıktı True.)
credits
3
int
coefficient
1.5
float
credits >= 3
coefficient >= 1.75
True
bool
False
bool
and
or
False
True
bool
Çıktı
False
True
Bir taraf False ise and'in sonucu False olur.
or (veya)
print(True or False, False or False)
Çıktı
True False
Doğruluk tablosu: and, or, not
Doğruluk tablosu, beş sütun: a, b, a and b, a or b, not a. Dört satır: a True, b True: and True, or True, not a False. a True, b False: and False, or True, not a False. a False, b True: and False, or True, not a True. a False, b False: and False, or False, not a True. a ve b hücreleri bool (deniz yeşili); sonuçlarda True açık mavi zeminde petrol mavisi, False beyaz zeminde gri yazılır. Bu durumda a and b sütunu kalın çivit mavisi çerçeveyle vurgulu; a or b ve not a soluk, kesikli gri çerçeveli. (data-now="or": a or b sütunu vurgulu. data-now="not": not a sütunu vurgulu.)
a
True
True
False
False
b
True
False
True
False
a and b
True
False
False
False
a or b
True
True
True
False
not a
False
False
True
True
or, en az bir taraf True ise True verir.
or ile iki kıyaslama
and ve or: credits >= 3 ile coefficient >= 1.75
credits 3'ü (int, turuncu), coefficient 1.5'i (float, hardal sarısı) gösterir; kıyaslamalar True ve False (bool, deniz yeşili); and sonucu False. Solda iki lacivert isim etiketi: credits oktan 3'e, coefficient oktan 1.5'e. Sağda iki kıyaslama kutusu: credits >= 3 aşağı okla True'ya, coefficient >= 1.75 aşağı okla False'a. İki değerden birer ok ortadaki and kutusuna gider; sonucu belirleyen False'tan gelen ok koyu, True'dan gelen gri. and kutusundan bir ok sonuç kutusuna: False, açık mavi zeminli çivit mavisi çerçeve içinde. Altındaki çıktı panelinde False. (data-now="or": kutuda or, sonuç True, True'dan gelen ok koyu, False'tan gelen gri, çıktı True.)
credits
3
int
coefficient
1.5
float
credits >= 3
coefficient >= 1.75
True
bool
False
bool
and
or
False
True
bool
Çıktı
False
True
Aynı value'larla or True verir; bir tarafın True olması yeter.
not (değil)
coefficient = 1.5
print(not (coefficient >= 1.75))
Çıktı
True
Doğruluk tablosu: and, or, not
Doğruluk tablosu, beş sütun: a, b, a and b, a or b, not a. Dört satır: a True, b True: and True, or True, not a False. a True, b False: and False, or True, not a False. a False, b True: and False, or True, not a True. a False, b False: and False, or False, not a True. a ve b hücreleri bool (deniz yeşili); sonuçlarda True açık mavi zeminde petrol mavisi, False beyaz zeminde gri yazılır. Bu durumda a and b sütunu kalın çivit mavisi çerçeveyle vurgulu; a or b ve not a soluk, kesikli gri çerçeveli. (data-now="or": a or b sütunu vurgulu. data-now="not": not a sütunu vurgulu.)
a
True
True
False
False
b
True
False
True
False
a and b
True
False
False
False
a or b
True
True
True
False
not a
False
False
True
True
not, True'yu False'a, False'u True'ya çevirir.
Geçerli puan aralığı
Geçerli puan aralığı: 87 ve 105
0'dan 120'ye bir sayı doğrusu, her 10'da bir çentik; 0, 50, 100 ve 120 yazılı. 0 ile 100 arası açık mavi bant, üstündeki köşeli çizginin etiketi score >= 0 and score <= 100. Bandın içinde 87 (int, turuncu) noktası ve kutusu, oktan sonra True (bool, deniz yeşili). Bandın dışında 105 (int, turuncu) noktası ve kutusu, oktan sonra False (bool, deniz yeşili). Alt satır: İki kıyaslama da True ise puan geçerlidir.
score >= 0 and score <= 100
0
50
100
120
87
True
105
False
İki kıyaslama da True ise puan geçerlidir.
Bir aralık, and ile bağlanan iki kıyaslamayla yazılır.
Parantez ve logical operators
Parantez and ile or'un sırasını değiştirir
İki hesap ağacı. Solda True or False and False: önce and (1) False ile False'u birleştirir, sonuç False; sonra or (2) True ile bu False'u birleştirir, sonuç True. Çıktı: True. Sağda (True or False) and False: önce parantezdeki or (1) True ile False'u birleştirir, sonuç True; sonra and (2) bu True ile False'u birleştirir, sonuç False; bu sonuç açık mavi ve çivit mavisi çerçeveli bantta, çünkü parantez sonucu değiştirdi. Çıktı: False. Bütün value'lar bool, deniz yeşili.
True or False and False
True
False
False
and
False
1
or
True
2
Çıktı
True
(True or False) and False
True
False
False
or
True
1
and
False
2
Çıktı
False
and, or'dan önce yapılır; karışık bir satıra parantez yazılır.
Artık yıl kuralı (1582)
year = 2000
div4 = year % 4 == 0
div100 = year % 100 == 0
div400 = year % 400 == 0
print((div4 and not div100) or div400)
Çıktı
True
Artık yıl: year = 2100 olsaydı
Soru: year = 2100 olsaydı? Bir tıklamayla cevap çıkar: Çıktı panelinde False; yanında 100'e bölünür, 400'e bölünmez.
year = 2100
olsaydı?
False
100'e bölünür,
400'e bölünmez
4'e bölünen yıl artık yıldır; 100'e bölünüyorsa 400'e de bölünmelidir.
Önce %, sonra ==; kalan 0 ise bölünür.
and ve SyntaxError
and ve SyntaxError
Üstte gri kod panelinde score = 87 ve print(score >= 0 and <= 100) satırları; altında kırmızı şapkalar <= işaretinin tam altında ve kırmızı SyntaxError: invalid syntax. Altta iki sütun. Solda kırmızı başlık Geçersiz: score >= 0 kutusu, and düğümü ve and'in sağındaki <= 100 kırmızı kesik çizgili kutuda; kırmızı bir ok kutuyu gösterir ve altında kırmızı solunda value yok yazar. Sağda petrol mavisi başlık Geçerli: score >= 0, and ve score <= 100; eklenen score açık mavi bant ve çivit mavisi çerçeveyle vurgulu; and'den aşağı bir ok True'yu gösterir (bool, deniz yeşili), yanında score 87 iken yazar. 87, 0 ve 100 int (turuncu).
score = 87
print(score >= 0 and <= 100 )
^^
SyntaxError: invalid syntax
Geçersiz
score >= 0
and
<= 100
solunda value yok
Geçerli
score >= 0
and
score
<= 100
True
score 87 iken
and'in iki yanı da tam bir kıyaslama olmalıdır.
or ve tam kıyaslama
or ve tam kıyaslama
Lacivert color ismi "yeşil" value'sunu gösterir (str, yeşil). Birinci satır: color == "kırmızı" or "mavi". Sol taraf False (bool, deniz yeşili); sağ taraf "mavi" (str, yeşil) bir kıyaslama değil, kırmızı yazıyla işaretli. Aralarında or. Sol taraf False olduğu için or sağ taraftaki "mavi"yi olduğu gibi verir; sonuç "mavi" açık mavi ve çivit mavisi çerçeveli bantta. Çıktı: mavi. İkinci satır: color == "kırmızı" or color == "mavi". İki kıyaslama da False (bool, deniz yeşili), sonuç False. Çıktı: False.
color
"yeşil"
color == "kırmızı" or "mavi"
Çıktı
False
or
"mavi"
bir kıyaslama değil
"mavi"
mavi
color == "kırmızı" or color == "mavi"
Çıktı
False
or
False
False
False
or'un iki yanına da tam kıyaslama yazılır.
Sol taraf False ise or, sağdakini aynen verir: "mavi".
10. if ve else
Program bir şarta göre yol seçer
Algorithm (algoritma)
Algoritma, bir işin adım adım tarifidir.
Dışarı bak.
Yağmur varsa şemsiyeyle çık.
Yoksa şemsiyesiz çık.
Flowchart (akış şeması)
Algoritma ve flowchart
Dışarı çıkma algoritmasının flowchart'ı. Başla ovalinden bir okla dışarı bak kutusuna, oradan yağmur var mı? eşkenar dörtgenine. Cevap True ise ok sağa, şemsiyeyle çık kutusuna; False ise ok aşağı, şemsiyesiz çık kutusuna. İki kutudan da birer ok Bitir ovaline gider. Altta üç şeklin anlamı: oval başlangıç ve bitiş, dikdörtgen bir adım, eşkenar dörtgen bir soru, cevabı True ya da False.
Başla
dışarı bak
yağmur
var mı?
True
şemsiyeyle çık
False
şemsiyesiz çık
Bitir
başlangıç ve bitiş
bir adım
bir soru: True ya da False
Flowchart, bir algoritmanın, yani adım adım bir tarifin çizimidir.
Control structures (kontrol yapıları)
Üç control structure
Üç küçük akış şeması yan yana. Sequence (art arda çalıştırma): 1. satır, 2. satır, 3. satır kutuları oklarla alt alta. Repetition (tekrarlama): devam şartı baklavası; petrol mavisi True oku block kutusuna iner, block'tan bir ok geri dönüp baklavanın sol köşesine girer; kırmızı False oku sağ köşeden çıkar. Decision (karar): şart baklavası; petrol mavisi True oku block A'ya, kırmızı False oku block B'ye gider, iki yol aşağıda bir noktada birleşir. Ders 2'de (data-now decision): karar çerçevesi çivit mavisi, başlığı açık mavi bantta vurgulu; art arda çalıştırma düz; tekrarlama gri, kesik çizgili, sağ üstünde Ders 3 yazıyor. Ders 3'te (data-now repetition): tekrarlama vurgulu, öteki ikisi düz.
Sequence
(art arda çalıştırma)
Ders 3
1. satır
2. satır
3. satır
Repetition
(tekrarlama)
Ders 3
devam şartı
True
block
False
Decision
(karar)
Ders 3
şart
True
False
block A
block B
Her program üç yapıyla kurulur.
if
if: genel biçim, örnek ve çıktı, adım adım
Solda Genel biçim: if <şart>: ve dört boşluk içeride <block>. Bir tıklamayla sağda Örnek çıkar: grade_point = 2.5, if grade_point >= 1.75:, dört boşluk içeride print("geçti"), print("bitti"); 2.5 ve 1.75 hardal sarısı (float), metinler yeşil (str). Bir tıklamayla daha altında Çıktı: geçti, bitti.
Genel biçim
if <şart> :
<block>
Örnek
grade_point = 2.5
if grade_point >= 1.75 :
print("geçti" )
print("bitti" )
Çıktı
geçti
bitti
if satırı bir şart sorar ve iki noktayla biter.
if adım adım
Condition (şart) True ise block çalışır, False ise atlanır: 2.5 >= 1.75 True, 1.5 >= 1.75 False.
Indentation (girinti) ve block (blok)
Indentation ve block
Numaralı satırlarla bir kod paneli, dört durum. Durum block: 1 grade_point = 2.5, 2 if grade_point >= 1.75:, 3 print("geçti"), 4 print("tebrikler"), 5 print("bitti") (2.5 ve 1.75 float, hardal sarısı; "geçti", "tebrikler" ve "bitti" str, yeşil). 3. ve 4. satırların başındaki dört boşluk dört çivit mavisi noktayla gösterilmiş; bu iki satır açık mavi ve çivit mavisi çerçeveli bir şeritte. 2. satırın sonundaki iki nokta çivit mavisi bir halkayla işaretli: iki nokta: block başlıyor. 3. ve 4. satırların sağında bir köşeli ayraç: block (4 boşluk). 5. satırın yanında: indentation yok: block'un dışında. Altta: Indentation Python'da süs değil, kuraldır. Durum colon: aynı beş satır, ama 2. satır 1.75'te biter, iki nokta yok; boş yer kırmızı kesik çizgili bir halkada, altında kırmızı bir şapka (^); üstte kırmızı: iki nokta yok; sağda kırmızı SyntaxError: expected ':' ve ondan halkaya kırmızı bir ok. Durum pycharm: aynı kod PyCharm editörü gibi, noktalar yok; 3. ve 4. satırlar seçili (açık mavi), solda bu iki satır boyunca ince gri dikey indentation çizgisi, 1 numaralı not: indentation çizgisi. Sağda iki tuş: Tab, sağa bir ok ve içeri; Shift+Tab, sola bir ok ve dışarı. Durum error: yalnızca üç satır: grade_point = 2.5, if grade_point >= 1.75: ve indentation olmadan print("geçti"); 3. satırın yanında küçük kırmızı bir işaret; iki nokta yine çivit mavisi halkada. Panelin altında kırmızı: IndentationError: expected an indented block after 'if' statement on line 2.
1
2
3
4
5
grade_point = 2.5
if grade_point >= 1.75 :
if grade_point >= 1.75
print("geçti" )
print("geçti" )
print("tebrikler" )
print("bitti" )
iki nokta: block başlıyor
block (4 boşluk)
indentation yok: block'un dışında
iki nokta yok
^
SyntaxError:
expected ':'
1
indentation
çizgisi
Tab
içeri
Shift+Tab
dışarı
IndentationError: expected an indented block
after 'if' statement on line 2
Indentation Python'da süs değil, kuraldır.
Block, iki noktadan sonra indentation ile yazılan satırlardır.
if'in genel biçimindeki <block> budur.
PyCharm'da indentation
Indentation ve block
Numaralı satırlarla bir kod paneli, dört durum. Durum block: 1 grade_point = 2.5, 2 if grade_point >= 1.75:, 3 print("geçti"), 4 print("tebrikler"), 5 print("bitti") (2.5 ve 1.75 float, hardal sarısı; "geçti", "tebrikler" ve "bitti" str, yeşil). 3. ve 4. satırların başındaki dört boşluk dört çivit mavisi noktayla gösterilmiş; bu iki satır açık mavi ve çivit mavisi çerçeveli bir şeritte. 2. satırın sonundaki iki nokta çivit mavisi bir halkayla işaretli: iki nokta: block başlıyor. 3. ve 4. satırların sağında bir köşeli ayraç: block (4 boşluk). 5. satırın yanında: indentation yok: block'un dışında. Altta: Indentation Python'da süs değil, kuraldır. Durum colon: aynı beş satır, ama 2. satır 1.75'te biter, iki nokta yok; boş yer kırmızı kesik çizgili bir halkada, altında kırmızı bir şapka (^); üstte kırmızı: iki nokta yok; sağda kırmızı SyntaxError: expected ':' ve ondan halkaya kırmızı bir ok. Durum pycharm: aynı kod PyCharm editörü gibi, noktalar yok; 3. ve 4. satırlar seçili (açık mavi), solda bu iki satır boyunca ince gri dikey indentation çizgisi, 1 numaralı not: indentation çizgisi. Sağda iki tuş: Tab, sağa bir ok ve içeri; Shift+Tab, sola bir ok ve dışarı. Durum error: yalnızca üç satır: grade_point = 2.5, if grade_point >= 1.75: ve indentation olmadan print("geçti"); 3. satırın yanında küçük kırmızı bir işaret; iki nokta yine çivit mavisi halkada. Panelin altında kırmızı: IndentationError: expected an indented block after 'if' statement on line 2.
1
2
3
4
5
grade_point = 2.5
if grade_point >= 1.75 :
if grade_point >= 1.75
print("geçti" )
print("geçti" )
print("tebrikler" )
print("bitti" )
iki nokta: block başlıyor
block (4 boşluk)
indentation yok: block'un dışında
iki nokta yok
^
SyntaxError:
expected ':'
1
indentation
çizgisi
Tab
içeri
Shift+Tab
dışarı
IndentationError: expected an indented block
after 'if' statement on line 2
Indentation Python'da süs değil, kuraldır.
PyCharm iki noktadan sonra dört boşluğu kendisi koyar.
else
else: genel biçim, örnek ve çıktı, adım adım
Solda Genel biçim: if <şart>:, dört boşluk içeride <block>, if ile aynı hizada else:, içeride <block>. Bir tıklamayla sağda Örnek çıkar: grade_point = 1.5, if grade_point >= 1.75:, print("geçti"), else:, print("kaldı"), print("bitti"); 1.5 ve 1.75 hardal sarısı (float), metinler yeşil (str). Bir tıklamayla daha altında Çıktı: kaldı, bitti.
Genel biçim
if <şart> :
<block>
else:
<block>
Örnek
grade_point = 1.5
if grade_point >= 1.75 :
print("geçti" )
else:
print("kaldı" )
print("bitti" )
Çıktı
kaldı
bitti
else, if ile aynı hizada yazılır; kendi şartı yoktur.
else adım adım
Şart False olunca else çalışır: iki yoldan tam biri. 2.5 >= 1.75 True, 1.5 >= 1.75 False.
if, else ve indentation
if ve else block'ları, adım adım
Solda yedi satırlık kod: grade_point = 3.0, if grade_point >= 1.75:, girintili print("geçti") ve print("tebrikler"), else:, girintili print("kaldı"), girintisiz print("dönem bitti"); 3.0 ve 1.75 hardal sarısı (float), metinler yeşil (str). Girintili satırların solunda PyCharm'daki gibi ince gri girinti çizgileri. Sağda soru: Indentation nerede başlar, nerede biter? Tıklamalarla: if satırının sonundaki iki nokta çivit mavisi halkayla işaretlenir, 3. ve 4. satırlara if block'u ayracı ve iki noktadan sonra başlar yazısı gelir; else satırının iki noktası işaretlenir, 6. satıra else block'u ayracı gelir; 7. satırın sol kenarında çivit mavisi bir çizgi ve açık mavi kutuda sol kenara döndü: her zaman çalışır; sonra Çıktı: geçti, tebrikler, dönem bitti; en son alt satır: Sol kenara dönen satır her zaman çalışır.
grade_point = 3.0
if grade_point >= 1.75 :
print("geçti" )
print("tebrikler" )
else:
print("kaldı" )
print("dönem bitti" )
Indentation nerede başlar,
nerede biter?
if block'u
iki noktadan sonra başlar
else block'u
sol kenara döndü:
her zaman çalışır
Çıktı
geçti
tebrikler
dönem bitti
Sol kenara dönen satır her zaman çalışır.
if ve Selam
name = input("Kime selam? ")
if name == "":
name = "millet"
print(f"Selam {name}")
Çıktı
Kime selam?
Selam millet
if ve Selam: boş cevap
Boş cevap için izlenen küçük akış şeması: name = "" kutusu ("" yeşil, str), name == "" karar baklavası. Petrol mavisi True oku baklavanın sağından çıkıp aşağıdaki name = "millet" kutusuna iner; kutu açık mavi, çivit mavisi çerçeveli, "millet" yeşil (str). Oradan print(f"Selam {name}") kutusuna. Gri False oku baklavanın altından doğrudan print kutusuna iner (boş cevapta kullanılmadı).
name = ""
name == ""
True
name = "millet"
False
print(f"Selam {name}")
Boş cevapta name'e "millet" atanır.
if ve SyntaxError
Indentation ve block
Numaralı satırlarla bir kod paneli, dört durum. Durum block: 1 grade_point = 2.5, 2 if grade_point >= 1.75:, 3 print("geçti"), 4 print("tebrikler"), 5 print("bitti") (2.5 ve 1.75 float, hardal sarısı; "geçti", "tebrikler" ve "bitti" str, yeşil). 3. ve 4. satırların başındaki dört boşluk dört çivit mavisi noktayla gösterilmiş; bu iki satır açık mavi ve çivit mavisi çerçeveli bir şeritte. 2. satırın sonundaki iki nokta çivit mavisi bir halkayla işaretli: iki nokta: block başlıyor. 3. ve 4. satırların sağında bir köşeli ayraç: block (4 boşluk). 5. satırın yanında: indentation yok: block'un dışında. Altta: Indentation Python'da süs değil, kuraldır. Durum colon: aynı beş satır, ama 2. satır 1.75'te biter, iki nokta yok; boş yer kırmızı kesik çizgili bir halkada, altında kırmızı bir şapka (^); üstte kırmızı: iki nokta yok; sağda kırmızı SyntaxError: expected ':' ve ondan halkaya kırmızı bir ok. Durum pycharm: aynı kod PyCharm editörü gibi, noktalar yok; 3. ve 4. satırlar seçili (açık mavi), solda bu iki satır boyunca ince gri dikey indentation çizgisi, 1 numaralı not: indentation çizgisi. Sağda iki tuş: Tab, sağa bir ok ve içeri; Shift+Tab, sola bir ok ve dışarı. Durum error: yalnızca üç satır: grade_point = 2.5, if grade_point >= 1.75: ve indentation olmadan print("geçti"); 3. satırın yanında küçük kırmızı bir işaret; iki nokta yine çivit mavisi halkada. Panelin altında kırmızı: IndentationError: expected an indented block after 'if' statement on line 2.
1
2
3
4
5
grade_point = 2.5
if grade_point >= 1.75 :
if grade_point >= 1.75
print("geçti" )
print("geçti" )
print("tebrikler" )
print("bitti" )
iki nokta: block başlıyor
block (4 boşluk)
indentation yok: block'un dışında
iki nokta yok
^
SyntaxError:
expected ':'
1
indentation
çizgisi
Tab
içeri
Shift+Tab
dışarı
IndentationError: expected an indented block
after 'if' statement on line 2
Indentation Python'da süs değil, kuraldır.
if satırı iki noktayla biter.
if ve = işareti
credits = 4
if credits = 4:
print("4 kredi")
Çıktı
File "…/python-kurs/example.py", line 2 if credits = 4: ^^^^^^^^^^^ SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
if'te kıyaslama == ile yapılır; tek = assignment'tır ve if satırında SyntaxError verir.
Doğrusu: if credits == 4: (:= bu kursta yok)
IndentationError
Indentation ve block
Numaralı satırlarla bir kod paneli, dört durum. Durum block: 1 grade_point = 2.5, 2 if grade_point >= 1.75:, 3 print("geçti"), 4 print("tebrikler"), 5 print("bitti") (2.5 ve 1.75 float, hardal sarısı; "geçti", "tebrikler" ve "bitti" str, yeşil). 3. ve 4. satırların başındaki dört boşluk dört çivit mavisi noktayla gösterilmiş; bu iki satır açık mavi ve çivit mavisi çerçeveli bir şeritte. 2. satırın sonundaki iki nokta çivit mavisi bir halkayla işaretli: iki nokta: block başlıyor. 3. ve 4. satırların sağında bir köşeli ayraç: block (4 boşluk). 5. satırın yanında: indentation yok: block'un dışında. Altta: Indentation Python'da süs değil, kuraldır. Durum colon: aynı beş satır, ama 2. satır 1.75'te biter, iki nokta yok; boş yer kırmızı kesik çizgili bir halkada, altında kırmızı bir şapka (^); üstte kırmızı: iki nokta yok; sağda kırmızı SyntaxError: expected ':' ve ondan halkaya kırmızı bir ok. Durum pycharm: aynı kod PyCharm editörü gibi, noktalar yok; 3. ve 4. satırlar seçili (açık mavi), solda bu iki satır boyunca ince gri dikey indentation çizgisi, 1 numaralı not: indentation çizgisi. Sağda iki tuş: Tab, sağa bir ok ve içeri; Shift+Tab, sola bir ok ve dışarı. Durum error: yalnızca üç satır: grade_point = 2.5, if grade_point >= 1.75: ve indentation olmadan print("geçti"); 3. satırın yanında küçük kırmızı bir işaret; iki nokta yine çivit mavisi halkada. Panelin altında kırmızı: IndentationError: expected an indented block after 'if' statement on line 2.
1
2
3
4
5
grade_point = 2.5
if grade_point >= 1.75 :
if grade_point >= 1.75
print("geçti" )
print("geçti" )
print("tebrikler" )
print("bitti" )
iki nokta: block başlıyor
block (4 boşluk)
indentation yok: block'un dışında
iki nokta yok
^
SyntaxError:
expected ':'
1
indentation
çizgisi
Tab
içeri
Shift+Tab
dışarı
IndentationError: expected an indented block
after 'if' statement on line 2
Indentation Python'da süs değil, kuraldır.
if satırından sonraki satırda indentation yoksa Python hiçbir satırı çalıştırmaz.
Nedensiz indentation
IndentationError: unexpected indent
İki sütun. Solda kırmızı başlık Geçersiz: gri kod panelinde 1. satır print("A") en solda, 2. satır print("B") nedensiz dört boşluk içeride; dört boşluk çivit mavisi dört nokta olarak çizili ve kırmızı kesik çizgili bir çerçeve içinde. Altta kırmızı bir ok çerçeveyi gösterir, yanında kırmızı nedensiz indentation; en altta kırmızı IndentationError: unexpected indent. Sağda petrol mavisi başlık Geçerli: iki satır da en solda; ok Çıktı paneline gider, çıktı A ve B. Koddaki "A" ve "B" str (yeşil).
Geçersiz
1
print("A" )
2
print("B" )
nedensiz indentation
IndentationError:
unexpected indent
Geçerli
1
print("A" )
2
print("B" )
Çıktı
A
B
Nedensiz bir indentation da hatadır.
Nested if (iç içe if)
temperature = 12 # 20 olsaydı: tişört
weather = "yağmurlu"
if temperature < 15:
if weather == "yağmurlu":
print("şemsiye ve mont")
else:
print("mont")
else:
print("tişört")
Çıktı
şemsiye ve mont
İçteki if, yalnız dıştaki şart True ise sınanır.
Her else kendi hizasındaki if'e aittir.
11. elif
Üç ve daha fazla yol arasından seçmek
elif
elif: genel biçim, örnek ve çıktı, adım adım
Solda Genel biçim: if <şart>:, <block>, elif <şart>:, <block>, else:, <block>. Bir tıklamayla sağda Örnek çıkar: score = 77, if score >= 85:, print("A3 ve üstü"), elif score >= 50:, print("geçti"), else:, print("kaldı"); sayılar turuncu (int), metinler yeşil (str). Bir tıklamayla daha altında Çıktı: geçti.
Genel biçim
if <şart> :
<block>
elif <şart> :
<block>
else:
<block>
Örnek
score = 77
if score >= 85 :
print("A3 ve üstü" )
elif score >= 50 :
print("geçti" )
else:
print("kaldı" )
Çıktı
geçti
elif, else if demek: üstteki şart False ise sınanır.
elif adım adım
elif'e inen puan 85'ten küçüktür: şarta alt sınır yeter.
elif sırası
elif sırası: score = 92
İki sütun, ikisi de score = 92 (turuncu, int) için izlenmiş. Başta yalnızca iki kod paneli görünür; iki panelde de iki şart satırı (score >= 50 ve score >= 90) aynı açık mavi bantta, yerleri değişmiş; ilk tıklamada soldaki akış ve çıktısı, ikinci tıklamada sağdaki akış ve çıktısı çıkar. Akışlar kodun altında: True oku baklavanın sağından çıkar, False oku aşağı iner. Solda Yanlış sıra: kod score = 92, if score >= 50: print("D"), elif score >= 90: print("A2"). score >= 50 baklavasından petrol mavisi True oku sağdaki print("D") kutusuna gider, kutu açık mavi ve çivit mavisi çerçeveli; gri False oku aşağıdaki score >= 90 baklavasına iner; o baklava ve sağındaki print("A2") gri, altında hiç sınanmadı. Kodun sağında Çıktı: D ve kırmızı çerçeveli kutuda kırmızı: ilk True kazanır: 92 için D. Sağda Doğru sıra: iki şart yer değiştirmiş; score >= 90 baklavasından True oku print("A2") kutusuna gider (vurgulu); score >= 50 baklavası ve print("D") gri, hiç sınanmadı. Çıktı: A2.
Yanlış sıra
score = 92
if score >= 50 :
print("D" )
elif score >= 90 :
print("A2" )
Doğru sıra
score = 92
if score >= 90 :
print("A2" )
elif score >= 50 :
print("D" )
score >= 50
True
print("D")
False
score >= 90
True
print("A2")
hiç sınanmadı
Çıktı
D
ilk True kazanır:
92 için D
score >= 90
True
print("A2")
False
score >= 50
True
print("D")
hiç sınanmadı
Çıktı
A2
Sıra karar verir: ilk True olan şartın block'u çalışır.
elif yerine if
score = 92
if score >= 90:
print("A2")
if score >= 50: # instead of elif
print("D")
Çıktı
A2
D
İki ayrı if: score = 70 olsaydı
Soru: score = 70 olsaydı? Bir tıklamayla cevap çıkar: Çıktı panelinde yalnızca D; yanında ikinci if yine sınanır yazıyor.
score = 70
olsaydı?
D
ikinci if
yine sınanır
İkinci if her zaman sınanır; elif yalnızca üstteki şart False ise.
elif ile yalnızca A2 yazılır.
Uygulama 1
Puan Harf grubu
85-100 A
70-84 B
55-69 C
50-54 D
50'nin altı kaldı
Tabloyu if, elif, else ile yazın: 72 B'dir.
İkişerli: score = int(input()) ile 85, 84, 50, 49 girin.
Hedef programın parçaları
Ders 2'nin hedef programı: parçalar
Solda gri bir kod panelinde hedef programın satırları, atlanan yerler üç noktayla: code = input(…).strip().upper(), credits = int(input(…)), score = int(input(…)); if score >= 95: grade_point = 4.00, elif score >= 90:, üç nokta; if grade_point >= 1.75: status = "geçti", else: status = "kaldı"; iki print satırı. elif zinciri açık mavi bantta, çivit mavisi çerçeveli. Sağda dört ayraç: 2A: input() ve int(), girdiyi alır; 11. bölüm: elif zinciri, Madde 24'ün tablosu; 9. bölüm: if ve else, geçti ya da kaldı; 2A: f-string, :.2f, iki satırlık çıktı. 95 ve 90 turuncu (int), katsayılar hardal sarısı (float), "geçti" ve "kaldı" yeşil (str). İlk ayracın girdi satırının yanında bugünün resmi: 6 ve 6 tuşlarından bir ok yeşil "66" kutusuna (str) gider.
code = input(…).strip().upper()
credits = int(input(…))
score = int(input(…))
if score >= 95 :
grade_point = 4.00
elif score >= 90 :
…
if grade_point >= 1.75 :
status = "geçti"
else:
status = "kaldı"
print(f"{code}: {score} puan, katsayı …")
print(f"{credits} x {grade_point:.2f} = …")
2A: input(), int()
girdi
6
6
"66"
11. bölüm: elif
Madde 24'ün tablosu
10. bölüm: if, else
geçti ya da kaldı
2A: f-string, :.2f
iki satır çıktı
Dersin başındaki program: artık her satırını okuyabilirsiniz.
Bugünün keyword'leri
Python'un keyword'leri: 2B'de öğrendiklerimiz
help("keywords") çıktısı, Ders 1'deki tablonun aynısı: on satır, dört sütun. Dokuz keyword çivit mavisi bir çerçeveyle çevrili, 2B'de öğrendiklerimiz: True, False, in, and, or, not, if, else, elif.
help("keywords")
example.py, Run penceresi
Here is a list of the Python keywords. Enter any keyword to get more help.
False
class
global
pass
None
continue
if
raise
True
def
import
return
and
del
in
try
as
elif
is
while
assert
else
lambda
with
async
except
match
yield
await
finally
nonlocal
break
for
not
case
from
or
Ders 1'deki keyword listesinden dokuzunu bugün öğrendik.
Ödev 2
Son gün 1 Kasım Pazar, 23.59 Form https://forms.gle/85GMMkxWLvinDtiW6 Repo GitHub'da student-card-python-hw; README'de bugünün konu özeti
Ödev 2, odev2.py dosyasıdır: TODO'ları doldurup aynı dosyayı formdan yüklersiniz.
Ders sonrası videolar
Önce bunu izleyin CS50P, Lecture 0 Daha fazlası Corey Schafer, Strings Daha fazlası CS50P, Lecture 1: Conditionals Daha fazlası Corey Schafer, Conditionals and Booleans Derinlemesine Computerphile, Unicode Miracle
İsteğe bağlı; bağlantılar Ek kaynaklar sayfasında.
Haftaya
Ders programı: Ders 1 ve Ders 2 bitti, haftaya Ders 3
Beş sütunlu ders programı, soldan sağa. Sağ üstte Salı, 18.00, E4. Ders 1, 20 Ekim ve Ders 2, 27 Ekim: üstlerinde petrol mavisiyle bitti yazıyor, başlıkları gri. Ders 1: bilgisayar, print(), error messages, int (turuncu), float (hardal sarısı), variable; Ödev 1, 25 Ekim Pazar 23.59. Ders 2: str (yeşil), input(), f-string, index, slicing, bool (deniz yeşili), if / elif; Ödev 2, 1 Kasım Pazar 23.59. Ders 3, 3 Kasım (üstünde haftaya yazıyor, başlığı açık mavi ve çivit mavisi çerçeveyle vurgulu): while, for, break, continue, try / except, assert; Ödev 3, 8 Kasım Pazar 23.59. Ders 4, 10 Kasım: import, def, return, scope, None (bej), class; Ödev 4, 15 Kasım Pazar 23.59. Ders 5, 17 Kasım: list (vişneçürüğü), tuple (mavi gri), aliasing, dict (kahverengi), set (zeytin yeşili), file; Ödev 5, 22 Kasım Pazar 23.59.
Salı, 18.00, E4
bitti
Ders 1
20 Ekim
bilgisayar
print()
error messages
int
float
variable
Ödev 1
25 Ekim Pazar
23.59
bitti
Ders 2
27 Ekim
str
input()
f-string
index, slicing
bool
if / elif
Ödev 2
1 Kasım Pazar
23.59
haftaya
Ders 3
3 Kasım
while
for
break
continue
try / except
assert
Ödev 3
8 Kasım Pazar
23.59
Ders 4
10 Kasım
import
def
return
scope
None
class
Ödev 4
15 Kasım Pazar
23.59
Ders 5
17 Kasım
list
tuple
aliasing
dict
set
file
Ödev 5
22 Kasım Pazar
23.59
Haftaya program aynı işi tekrar etmeyi öğrenecek.
Bugün neler yapabiliyorsunuz
Aynı program, iki çalıştırma
Üstte: Klavyeden gelen her şey str'dir. Altında iki Run penceresi. Birincisinde Final: 95 yazılmış (95 yeşil, str rengi) ve çıktı 87.50 A3 ve üstü. İkincisinde Final: 10 yazılmış ve çıktı 45.00 kaldı.
Klavyeden gelen her şey str'dir.
1. çalıştırma
Final: 95
87.50 A3 ve üstü
2. çalıştırma
Final: 10
45.00 kaldı
Bugün programınız ilk kez sizinle konuştu ve kendi kararını verdi.
- Klavyeden bilgi alıp sayıya çevirmek
- Metni düzeltip parçasını almak
- Çıktıyı f-string ile düzgün yazdırmak
- Programa karar verdirmek
Çalışma soruları
Dersten sonra kendi başınıza: önce soruyu çözün, tıklayınca cevap gelir.
Python ne yazdırır?
print(10 / 2, 10 // 2)
5.0 5
5 5
5.0 5.0
5 5.0
/ her zaman float verir; iki int'in // bölümü int'tir.
Python ne yazdırır?
print(0.5 + 0.25 == 0.75)
print(0.1 + 0.2 == 0.3)
True
True
True
False
False
False
False
True
Yarım ve çeyrek bilgisayarın parası, tam tutulur; 0.1 ile 0.2 tam tutulmaz.
Python ne yazdırır?
total = 0.1 + 0.2
print(round(total, 2))
print(f"{total:.2f}")
0.3
0.30
0.30
0.30
0.3
0.3
0.30
0.3
round() bir sayı verir, sondaki 0 yazılmaz; :.2f hep iki basamak gösterir.
Python ne yazdırır?
x = 10
y = x
x = x * 2
print(x, y)
20 20
10 20
20 10
Hata verir
x = x * 2 yalnızca x'in okunu taşır; y hala 10'u gösterir.
Python ne yazdırır?
a = 3
b = a + 1
a = 10
print(a, b)
10 11
10 4
3 4
4 10
b'nin value'su 2. satırda bir kez hesaplandı; a'nın taşınması b'yi değiştirmez.
Python ne yazdırır?
year = '2026'
print(year, type(year))
2026 <class 'str'>
'2026' <class 'str'>
2026 <class 'int'>
Hata verir
Tırnaklar yazdırılmaz; tırnak içindeki 2026 bir str'dir, tek tırnakla da.
Python ne yazdırır?
print("12" + "3", 12 + 3, "ha" * 2)
15 15 haha
123 15 haha
123 123 haha
TypeError
İki str + ile arka arkaya eklenir, iki int toplanır; * str'yi tekrarlar.
Python ne yazdırır?
print(int(7.8), round(7.8), float("5"))
8 8 5
7 8 5.0
7 7 5.0
7.8 8 5
int() keser, round() yuvarlar, float() float verir.
Python ne yazdırır?
points = 4 * 2.5
print(f"{points:.2f}")
print("{points}")
10.00
{points}
10.0
10.0
10.00
10.00
10
{points}
:.2f her zaman iki basamak gösterir; f olmadan süslü parantezler metin olarak yazılır.
Python ne yazdırır?
name = " nur "
name = name.strip().upper()
print(f"[{name}]")
[NUR]
[nur]
[ NUR ]
[ nur ]
strip() boşlukları siler, upper() büyütür; sonuç name'e atandığı için saklanır.
Python ne yazdırır?
a = "3"
b = 4
print(a * 2, b * 2)
6 8
33 8
33 44
TypeError
"3" bir str'dir, * onu tekrarlar; 4 bir int'tir, * onu çarpar.
Python ne yazdırır?
word = "Hacettepe"
print(word[0], word[-1], len(word))
H e 9
H e 8
a e 9
H p 9
Index 0'dan başlar, -1 son karakterdir; len() karakterleri sayar.
Python ne yazdırır?
code = "MAT101"
print(code[2:4], code[4:])
T1 01
T10 01
AT1 101
AT 101
Index 0'dan başlar, bitiş dahil değildir; [4:] sona kadar gider.
Python ne yazdırır?
code = "MAT101"
print(code[0:100])
print(code[6])
MAT101
IndexError
IndexError
MAT101
1
MAT101
M
Slice sonda durur; index 6 yoktur, son index 5'tir.
Python ne yazdırır?
score = 105
print(score >= 0 and score <= 100)
print(score < 0 or score > 100)
print(not score > 100)
False
True
False
True
False
True
False
False
False
True
True
False
105 aralıkta değil, and False; 105 > 100, or True; not, True'yu False yapar.
Python ne yazdırır?
x = 7
if x > 5:
print("A")
else:
print("B")
print("C")
A
C
A
A
B
C
B
C
Tam olarak bir block çalışır; sol kenara dönen satır her zaman çalışır.
Python ne yazdırır?
score = 87
if score >= 85:
print("A3")
elif score >= 50:
print("geçti")
print("son")
A3
son
A3
geçti
son
geçti
son
A3
İlk True şartın block'u çalışır, gerisi atlanır; son satır zincirin dışında.