Coding for KidsCoding for Kids
Yaratıcı SeviyelerZorluklarÖğretmen Kılavuzu
Özellikler için oy verin
Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye

İleri Fonksiyonlar
Kapanışlar

Amaç

Kapanışları (closures) kullanarak çiftlikteki su dağıtımını düzenleyin.

Çevredeki tarım arazisini sulamak için tasarlanmış dört adet su deposu bulunuyor, doğru yerlere doğru miktarda su dağıtıldığından emin olmak için devir değiştirme zamanı geldi. Bunu yapmak için işimizi çok daha kolay hale getiren Kapanışları (Closures) kullanabiliriz.

Kapanışlar, veriyi kapsüllemek için tasarlanmış iç içe fonksiyonlardır, bu sayede kullanmanız gereken değişken sayısını azaltır ve veriyi fonksiyonun içinde gizler, böylece dışardan müdahale edilemez, başka bir deyişle fonksiyonu kapatır.

Depolardaki suyu düzenlemek için, çarpan olarak işleyen iç içe bir fonksiyon oluşturacağız. Bu fonksiyon, dış fonksiyon multiplier_of()'nin argümanı ile iç fonksiyon multiplier()'ın argümanını çarparak aynı şekilde çalışır.

# Nested Function def multiplier_of(n): def multiplier(number): return number*n return multiplier

Kurulumu yaptıktan sonra, değerlerine erişimi engellemek ve kullanımını sağlamlaştırmak için fonksiyonu kapanış içine almalıyız.

# Set up Closure that multiplies any number by 2 multiply_by_2 = multiplier_of(2) # Uses closure to display a number on screen player.speak( multiply_by_2(4) ) # The number displayed is 8, the formula is [2 x 4 = 8]

Yukarıdaki kapanış multiply_by_2() olarak adlandırılmıştır ve ayarlanmış argüman ile oluşturduğumuz iç içe fonksiyonu kullanır; bu argüman 2'dir ve kapanışın çarpacağı sayıyı belirler. Sonuç olarak, argüman olarak ekleyeceğimiz her sayı iki (2) ile çarpılır ve bu özellik, kapsüllenmiş olduğundan değiştirilemez.

Su depolarını düzenlemeye geçerken, üç (3) kapanış oluşturun: multiply_by_2, multiply_by_3 ve multiply_by_5. Her birini, daha önce verilen örnekteki formatı kullanarak el ile ayarlayın, örneğin: multiply_by_2 = multiplier_of(2).

Bu seviyede tanks adında bir sözlük sabiti bulunmaktadır, bu sözlükte altı (6) renk indeksi bulunmaktadır: "red", "blue", "orange", "purple", "yellow" ve "green". Her indeks, bir tank kolundan akan su miktarını temsil eden bir sayı içerir, bu sayı daha önce tartışılan “multiply_by” kapanışlarını kullanarak tankı regüle etmek için kullanılacaktır.

Bunu kolaylaştırmak için editörde regulate_water() adlı bir fonksiyon kurulacaktır, bu fonksiyon iki argüman alır: yukarıda belirtilen indeksleri temsil eden renk ve kullanılacak çarpan kapanışı temsil eden multiplier. Fonksiyonun kullanımına bir örnek şu şekildedir: regulate_water("red", multiply_by_2).

Koyu renkli X işaretleriyle belirtilen halıların olduğu alanlara doğru ilerleyin ve tanklarla yüzleşin, regulate_water() fonksiyonunu kullanarak ilk argüman olarak halının rengini ve ikinci argüman olarak uygun çarpan kapanışını ayarlayın. Her bir renkli halı üzerinde kullanılacak çarpanlar şöyle:

multiply_by_2 - "red" ve "green" multiply_by_3 - "blue" ve "purple" multiply_by_5 - "orange" ve "yellow"

Seviye tamamlamak için her tank kolundaki suyu düzenleyin.

Kod Kitabı