Dikkat ettiyseniz değişkenlerin aldığı değerler aynı tipte ve özellikte olup tamsayıdır. Burada 5 sabit değer için 5 tane değişken tanımlandı. Diyelim ki aynı tipte ve özellikte 100 tane sabit değer girilseydi, 100 tane değişken mi tanımlayacaktık. Tabi ki hayır. Aynı tipte ve özellikte olup aynı amaç için kullanılan değerleri bir isim altında tanımlayabiliriz. Bu tip bilgileri tek isim altında saklamak için list değişken tipini kullanabiliriz. Şimdi yukarıda tanımladığımız 5 değişkeni banknot ismi altında liste biçiminde tanımlayalım.
banknot: list = [100, 50, 20, 10, 5]
Görüldüğü gibi hem kod sayısı azaldı, hem de değerler [] arasında tanımlanarak kullanımı kolaylaştı. Sayıların sıralanışına dikkat ettiniz mi. Değişken tanımlarken 5 sayısından başlayarak aşağıdan yukarıya doğru tanımlamıştık. Liste biçiminde ise 100 sayısından başlayıp yukarıdan aşağıya doğru sıraladık. Çünkü soruda "en az sayıda" ibaresi yer almaktaydı. Çekilecek paranın en az banknot gerektirmesi için paranın en yüksek banknota bölünmesi gerekir. Peki bu değerlere nasıl ulaşacağız. Örneğin 20 sayısını nasıl görüntüleriz. Liste elemanlarına apartmanlarda verilen kat ismi gibi değerler verilir. Apartmanlarda ilk kata zemin kat denmektedir. Diğer katlar Kat 1, Kat 2,... diye gitmektedir. Liste elemanlarında ise bunun karşılığı 0, 1, 2,... ile ifade edilir. Buna indis denmektedir. Siz hangi değeri ekranda görüntülemek istiyorsanız o sıranın indis değerini yazmanız yeterli olacaktır. Şimdi 20 sayısına ulaşan kodu yazalım.
print(banknot[2])
20 sayısının indis değeri 2 olduğu için [2] yazıldığında 20 sayısı ekranda görüntülenir. Şimdi tüm sayıları görüntüleyelim.
print(banknot[0])
print(banknot[1])
print(banknot[2])
print(banknot[3])
print(banknot[4])
Liste elemanlarına teker teker ulaşmak istediğimizde kod sayısının çokluğunu görürsünüz. Dikkat ettiyseniz aynı komut aynı değişkenin değerini görüntülemektedir. Bir ya da birden fazla tekrar eden komutun bir blok altında tanımlanması için for komutu kullanılır. Şimdi yukarıdaki satırları for komutuyla kodlayalım.
for i in range(len(banknot)):
print(banknot[i])
Görüldüğü gibi kodlarımız azaldı, programın işlevselliği sağlandı. Soruda yer alan ilk cümlemize ait gerekli işlemleri gerçekleştirmiş olduk. Şimdi sorumuzda yer alan ikinci cümleyi inceleyelim. "Her kâğıt paradan yeterli sayıda bulunan bu para çekme makinesinden; Ahmet 495 TL, Buse 265 TL ve Cansu 550 TL para çekiyor." Burada verilen değerler sabit olup aynı tipte ve özelliktedir. Kişilerin adı, çektiği paralar verilmektedir. Burada Ahmet bilgisi yerine Pa, Buse yerine Pb, Cansu yerine Pc kullanabiliriz. Sorunun cevaplarına baktığınızda banknot sayısı Pa, Pb, Pc değerlerinin sıralanışı şeklinde istenmektedir. Burada her bir elemanın ismi, çekilen para tutarı ve banknot sayısı değişkenler yardımıyla tutulacaktır. Şimdi ilk elemanın aldığı değerleri değişkenler yardımıyla oluşturalım.
para11: int = 0
para12: int = 495
para13: str = "Pa"
Şimdi ikinci elemanın aldığı değerleri değişkenler yardımıyla oluşturalım.
para21: int = 0
para22: int = 265
para23: str = "Pb"
Son olarak üçüncü elemanın aldığı değerleri değişkenler yardımıyla oluşturalım.
para31: int = 0
para32: int = 550
para33: str = "Pc"
Elimizde sadece 3 eleman olmasına rağmen işlemi gerçekleştirmek için bir sürü değişken tanımladık. Değişken isimlerinin bu kadar çok olduğu bir programda program hakimyeti azalım, hata yapma ihtimali çoğalır. Dikkat ettiysenin verilen değerler aynı tipte ve özellikte olup aynı amaç için kullanılmaktadır. Burada tanımlaması yapılan tüm değerleri list biçiminde gösterebiliriz. Şimdi bunu gerçekleştirelim.
para: list = [[0, 495, "Pa"],
[0, 265, "Pb"],
[0, 550, "Pc"]
]
Nasıl? Programda gereksiz satırlar ortadan kalktı, değişkenin aldığı değerlerin kontrolü kolaylaşmış oldu. Yukarıda tanımladığımız banknot liste elemanıyla burada tanımladığımız para liste elemanı aynıdır. Banknot liste elemanını her katta bir daire olan 3 katlı bir apartmana benzetebiliriz. Para liste elemanını ise her katta 3 daire olan 3 katlı apartmana benzetebiliriz. Peki, 265 sayısına nasıl ulaşabiliriz. Hatırlarsanız indis değerleri sıfırdan başlıyor idi, O halde 265 sayısı apartmanın birinci katında bir nolu daireyi temsil eder. Şimdi kodumuzu yazalım.
print(para[1][1])
Para listesinde yer alan tüm verileri listeleyelim.
for i in range(len(para)):
for j in range(len(para[i])):
print(para[i][j], end=' ')
print()
Şu ana kadar yazılan kodları listeleyelim.
banknot: list = [100, 50, 20, 10, 5]
para: list = [[0, 495, "Pa"],
[0, 265, "Pb"],
[0, 550, "Pc"]
]
Sorumuza geri dönelim. Son cümlemize bakalım. "Para çekme makinesinin Ahmet, Buse ve Cansu’ya verdiği kâğıt para sayıları sırasıyla olduğuna göre, aşağıdaki sıralamalardan hangisi doğrudur?" Burada yer alan cümleye göre ilgili kişilerin bankadan aldıkları banknot sayılarını bulmamız gerekiyor. Öncelikle Ahmet isimli şahsın alacağı banknot sayısını bulalım. Ahmet isimli şahıs 495 TL çekecekti. Bu sayıyı banknot listesinde yer alan değerlere sırasıyla böleceğiz. Kalan para 0 olduğunda işlemi tamamlayacağız. Öncelikle gerekli olan değişkenleri tanımlayalım. Kişinin çekeceği para tutarını saklamak için cekilen isimli tamsayı bir değişken tamamlayalım. Kalan parayı saklamak için kp isimli bir değişken tanımlayalım.
cekilen: int = 0
kp: int = 0
Ahmet isimli kişinin çekeceği para para listesinde 0. satırın 1. sütununda yer almaktadır. Gerekli tanımlamayı yapalım.
cekilen = para[0][1]
Bu tutarın kasada bulunan banknotlara bölünmesi işlemini gerçekleştireceğiz. Öncelikle 100 sayısına bölelim. Tam kısmını Ahmet isimli kişinin alacağı banknot sayısına ekleyelim.
para[0][0] += int(cekilen / banknot[0])
print(para[0][0])
Kalan parayı bulmak için çekilen parayı ilk banknot olan 100 sayısına bölelim ve kalanı bulalım. Elde edilen değeri kp değişkenine aktaralım.
kp = cekilen % banknot[0]
print(kp)
100 liralık banknotlar bittiğine kalan parayı çekilen tutar olarak değiştirelim.
cekilen = kp
Şimdi 50 liralık banknot işlemini yapalım. Bu banknot banknot listesinde 2. sıradaydı. Çekilen tutarı 50 sayısına bölelim. Tam kısmını Ahmet isimli kişinin alacağı banknot sayısına ekleyelim.
para[0][0] += int(cekilen / banknot[1])
print(para[0][0])
Kalan parayı bulmak için çekilen parayı ikinci banknot olan 50 sayısına bölelim ve kalanı bulalım. Elde edilen değeri kp değişkenine aktaralım.
kp = cekilen % banknot[1]
print(kp)
50 liralık banknotlar bittiğine kalan parayı çekilen tutar olarak değiştirelim.
cekilen = kp
Şimdi 20 liralık banknot işlemini yapalım. Bu banknot banknot listesinde 3. sıradaydı. Çekilen tutarı 20 sayısına bölelim. Tam kısmını Ahmet isimli kişinin alacağı banknot sayısına ekleyelim.
para[0][0] += int(cekilen / banknot[2])
print(para[0][0])
Kalan parayı bulmak için çekilen parayı üçüncü banknot olan 20 sayısına bölelim ve kalanı bulalım. Elde edilen değeri kp değişkenine aktaralım.
kp = cekilen % banknot[2]
print(kp)
20 liralık banknotlar bittiğine kalan parayı çekilen tutar olarak değiştirelim.
cekilen = kp
Şimdi 10 liralık banknot işlemini yapalım. Bu banknot banknot listesinde 4. sıradaydı. Çekilen tutarı 10 sayısına bölelim. Tam kısmını Ahmet isimli kişinin alacağı banknot sayısına ekleyelim.
para[0][0] += int(cekilen / banknot[3])
print(para[0][0])
Kalan parayı bulmak için çekilen parayı dördüncü banknot olan 10 sayısına bölelim ve kalanı bulalım. Elde edilen değeri kp değişkenine aktaralım.
kp = cekilen % banknot[3]
print(kp)
10 liralık banknotlar bittiğine kalan parayı çekilen tutar olarak değiştirelim.
cekilen = kp
Şimdi 5 liralık banknot işlemini yapalım. Bu banknot banknot listesinde 5. sıradaydı. Çekilen tutarı 5 sayısına bölelim. Tam kısmını Ahmet isimli kişinin alacağı banknot sayısına ekleyelim.
para[0][0] += int(cekilen / banknot[4])
print(para[0][0])
Kalan parayı bulmak için çekilen parayı beşinci banknot olan 5 sayısına bölelim ve kalanı bulalım. Elde edilen değeri kp değişkenine aktaralım.
kp = cekilen % banknot[4]
print(kp)
5 liralık banknotlar bittiğine kalan parayı çekilen tutar olarak değiştirelim.
cekilen = kp
Kodu çalıştıralım. Burada dikkat ederseniz kodlarımız banknot sayısı kadar yani 5 defa tekrar edilmiştir. Aynı amaç için kullanılan komutları tek blok altında tanımlamak için for döngüsünü kullanabilirdik. Döngüyü kullanarak kodları kısaltabiliriz. Ayrıca dikkat ettiyseniz kp değişkeninin değeri 0 olmaktadır. Zaten bunun olması gerekir. Bankadan alacağımızın olmaması ve tüm paranın çekildiğini anlamak için kp değerinin 0 olması gerekir. Şimdi kodlarımızı for döngüsünü kullanarak düzenleyelim. Öncelikle banknot listesindeki tüm elemanlara ulaşmak için for döngüsünü kullanalım.
for b in banknot:
print(b)
Çekilen parayı ilk banknot olan 100 sayısına bölelim. Tam kısmını Ahmet isimli kişinin aldığı banknot sayısına ekleyelim.
for b in banknot:
para[0][0] += int(cekilen / b)
Kalan parayı bulmak için çekilen tutarı ilk banknot olan 100 sayısına bölelim. Elde edilen değeri kp değişkenine aktaralım.
for b in banknot:
para[0][0] += int(cekilen / b)
kp = cekilen % b
Para çekme işlemi kp değişkeni 0 oluncaya kadar devam edecektir. Eğer 0 olursa döngüden çıkalım.
for b in banknot:
para[0][0] += int(cekilen / b)
kp = cekilen % b
if kp == 0:
break
Kalan para sıfırdan büyükse elde edilen değeri cekilen değişkenine aktaralım.
for b in banknot:
para[0][0] += int(cekilen / b)
kp = cekilen % b
if kp == 0:
break
else:
cekilen = kp
Ahmet isimli kişinin alacağı banknot sayısını bulduk. Elde edilen değeri görüntüleyelim.
cekilen = para[0][1]
for b in banknot:
para[0][0] += int(cekilen / b)
kp = cekilen % b
if kp == 0:
break
else:
cekilen = kp
print(para[0][0])
495 TL için 8 tane banknot verildiğini görürsünüz. Şimdi Buse'nin aldığı banknot sayısını bulalım. Buse'nin çekeceği para para listesinde 1. satır, 1. sütunda yer almaktadır. Buna göre kodları düzenleyelim.
cekilen = para[1][1]
for b in banknot:
para[1][0] += int(cekilen / b)
kp = cekilen % b
if kp==0:
break
else:
cekilen = kp
print(para[1][0])
265 TL için 5 tane banknot verildiğini görürsünüz. Şimdi Cansu'nun aldığı banknot sayısını bulalım. Cansu'nun çekeceği para para listesinde 2. satır, 1. sütunda yer almaktadır. Buna göre kodları düzenleyelim.
cekilen = para[2][1]
for b in banknot:
para[2][0] += int(cekilen / b)
kp = cekilen % b
if kp==0:
break
else:
cekilen = kp
print(para[2][0])
550 TL için 6 tane banknot verildiğini görürsünüz. Burada 3 kişinin çektiği para için ne kadar banknot aldıklarını bulduk. Aslında kodlar 3 defa tekrar etmekte, aynı amaç için kullanılmaktadır. Daha önce söylediğimiz gibi for döngüsünü kullanabiliriz. Hadi şimdi bu işlemleri gerçekleştirelim.
for p in range(len(para)):
cekilen = para[p][1]
for b in banknot:
para[p][0] += int(cekilen / b)
kp = cekilen % b
if kp == 0:
break
else:
cekilen = kp
print(para)
Şu ana kadar yazılan kodları tekrar anımsayalım.
banknot: list = [100, 50, 20, 10, 5]
para: list = [[0, 495, "Pa"], [0, 265, "Pb"], [0, 550, "Pc"]]
cekilen: int = 0
kp: int = 0
for p in range(len(para)):
cekilen = para[p][1]
for b in banknot:
para[p][0] += int(cekilen / b)
kp = cekilen % b
if kp == 0:
break
else:
cekilen = kp
print(para)
Probleme ait gerekli işlemleri yaptık. Ancak bizden istenen kişilerin küçükten büyüğe doğru sıralanmasıdır. Bu işlemi gerçekleştirmek için para listesini sıralamamız gerekir. Hadi bu işlemi gerçekleştirelim.
para.sort(key=lambda x: x[0])
print(para)
Problemin çözümünde doğru cevap D şıkkıydı. Bu şık PB < PC < PA şeklindeydi. Şimdi bu işlemi gerçekleştirelim. Öncelikle para listesinde sıralama kriteri olan sütunu for döngüsüyle listeleyelim.
for p in range(len(para)):
print(para[p][2], end=" ")
Sıralama doğru bir şekilde yapıldı. Ancak araya < işareti konulması gerekir. Şimdi bunu yapalım.
for p in range(len(para)):
if p > 0:
if para[p][0] == para[p - 1][0]:
print("=", end=" ")
else:
print("<", end=" ")
print(para[p][2], end=" ")
Programımız istenildiği gibi doğru sonucu vermektedir. Birçok konuyu öğrenmiş olduk. Şimdi kodlarımızı düzenleyelim.