Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye
İstisna Yönetimi
Else bloğu
Amaç
Onarım malzemelerini al ve sırala, ardından istisna yönetimi ile birlikte else bloğunu kullanarak istenmeyen atıkları at.
Bazı onarım malzemeleri binanın tepesinde depolanmıştır, bu malzemeler fırtınalar veya genel aşınma sonrasında çatıyı onarmak için kullanılmaktadır. Bazıları yakın zamanda teslim edildi ve hala ambalajlarda veya konteynerlerde depolanmaktadır, bazıları ise çok uzun süredir depolanmakta ve çöp yığınına atılmıştır. Malzemeleri sıralayıp düzgün bir şekilde depolamak ve çöp ile atıkları atmak iyi bir fikir olacaktır.
Düzensiz malzemelerin doğası gereği hata almanız muhtemeldir. Bunu try / except kod bloğu ile ele alabilirsiniz ancak karşılaşabileceğiniz hataların neler olabileceğine aşina değilseniz bu biraz zorlayıcı olabilir. Ancak istisna yönetim araçlarınızı else bloğunu ekleyerek genişletebilirsiniz. Bu, except bloğunun çalışmadığı durumlarda kodu çalıştırmanıza olanak tanır, kodunuzu sadeleştirir ve hataların tespit edilip temizlenmesinde oldukça uygundur.
Başlamak için sol depoya girin ve ışıklı X işaretine doğru ilerleyin. Bu oda, çatı kiremitlerini onarmak için kullanılan şingılları depolar. collect() fonksiyonunu kullanarak shingles adlı liste sabitini alın.
Liste muhtemelen çıkarılması gereken birçok gereksiz malzemenin karıştığı altı (6) farklı bölmede depolanmış malzemeler içeriyor. Tüm malzemeleri tek bir yığında toplamanız gerekiyor. Tüm malzemeleri depolamak için red_storage adında bir değişken ve tüm atık malzemeleri koyabilmek için junk adında bir liste oluşturun.
Normalde malzemeleri tespit edip int() kullanarak tam sayıya dönüştürüp saklarsınız. Ancak önceki bölümlerde ve bu egzersizin konusu göz önüne alındığında hata oluşması kaçınılmaz gözüküyor.
for x in range(6): player.speak(int(shingles[x])) red_storage+=int(shingles[x])
Bu, listedeki bazı öğelerin sayı olmadığı için ne yazık ki Value Error (değer hatası) oluşturacaktır. Bunu düzeltmek için try / except ve else kod bloklarını kullanarak malzemeleri sıralayabilirsiniz. else bloğunu kullanarak except bloğunu filtre haline getirmiş oluyoruz; listeden istenmeyen öğeleri atarken else bloğu listede bulunan iyi öğeleri oluşturduğumuz değişkene aktarıyor.
for x in range(6): try: player.speak(int(shingles[x])) except: player.speak("Item %s is junk" % (x)) junk.append(shingles[x]) else: red_storage+=int(shingles[x])
Böylece red_storage değişkeninde tüm kullanılabilir şingıllar bulunurken, tüm çöp junk listesine eklenmiştir. Şu anda bulunduğunuz sol depodaki altın X işaretine yürüyün ve write() fonksiyonunu kullanarak depoda kullanılmaya hazır şingılların sayısını tespit edin, şöyle: await player.write("There are %s shingles ready for use in storage" % (red_storage)) Ardından kırmızı halının üzerindeki koyu X işaretine yürüyün ve place() fonksiyonunu kullanarak red_storage değişkenini sandığa yerleştirin.
Bu görev tamamlandıktan sonra sağ depoya geçin, bu oda, çatı ve duvar yapılarını onarmak için gereken ahşap kiriş ve malzemeleri depolar. Yeşil halının üzerindeki koyu X işaretine gidin ve sandıktan planks_set adlı liste sabitini almak için collect() fonksiyonunu kullanın, bu liste atıklardan arındırılmış kirişleri içeriyor. Yanındaki ışıklı X işaretine yürüyün ve yine collect() fonksiyonunu kullanarak shipment adlı başka bir liste sabitini alın, bunlar yakın zamanda gönderilmiş ve hala biraz atık içeren kiriş malzemeleridir.
Önceki odadakine benzer şekilde, shipment listesi de altı (6) farklı bölmede depolanmış, her biri kendi miktarına sahip birkaç gereksiz malzeme içermektedir. Tüm malzemeleri tek bir yığında toplayabilmek için blue_storage adında bir değişken oluşturun. Tıpkı önceki gibi, atık malzemeler junk listesine eklenecektir.
Kirişler için, shipment listesindeki tüm kullanışlı malzemeleri int() kullanarak dönüştürüp planks_set listesine ekleyeceğiz, ardından hepsini blue_storage değişkeninde toplayacağız. Ancak yine hataların meydana gelmesi beklenmektedir.
for y in range(6): planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) blue_storage+=int(planks_set[y])
Bu sefer, sayılarla stringleri toplamaya çalıştığınızda oluşan Type Error (tip hatası) beklenebilir. Bu durum, yine try / except ve else kod bloklarını kullanarak çözülebilir; try listeleri toplar, except bloğu listedeki çöpü filtreler ve else bloğu kirişleri blue_storage değişkenine ekler.
for y in range(6): try: planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) except: player.speak( "Item %s is junk. Slot only has %s items" % (y,planks_set[y])) junk.append(shipment[y]) else: blue_storage+=int(planks_set[y])
Artık blue_storage değişkeni dolduğuna göre, tüm ahşap kirişleri belgeleyip depolayabilirsiniz. Bulunduğunuz sağ depodaki altın X işaretine yürüyün, masaya dönün ve write() fonksiyonunu kullanarak topladığınız malzemeleri sayın, şöyle: await player.write("There are %s planks ready for use in storage" % (blue_storage))
Seviyeyi tamamlamak için, mavi halının üzerindeki koyu X işaretine yürüyün ve place() fonksiyonunu kullanarak blue_storage değişkenini sandığa yerleştirin. Ardından orta odadaki mor halının üzerindeki koyu X işaretine yürüyün ve place() fonksiyonunu kullanarak junk listesini çöp kanalı aracılığıyla atın, görevinizi tamamlayın.