Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye
İstisna İşleme
Birden Fazla İstisna
Amaç
Birden fazla istisna kullanarak bazı tıbbi malzemeleri kutularda toplayın ve doğru şekilde saklayın.
Çatıda bulunan depoların yenilenmesi gerekiyor, bazı malzemeler kullanılmış ancak hiç yenilenmemiş. Depolardan birinde bir notta daha fazla malzeme siparişi verilmiş, bunun halledilmesi iyi olur. Bununla birlikte, toplanıp kutularda saklanması gereken çeşitli malzemeler bulunmakta.
Kutu doldurmak için gereken farklı veri tipleri ve malzeme sayısı nedeniyle çeşitli hatalarla karşılaşabiliriz. Olası herhangi bir hatayı yakalamak ve bazı sorunları düzeltmek için try / except kullanabiliriz, ancak tek bir işlemde karşılaşılabilecek birden fazla olası hata olduğunda ne yaparız? Bunun için hangi istisnaları yakalamaya çalıştığımızı belirtebilir ve birden fazla istisnayı kullanabiliriz.
Başlamak için, altın X işaretine doğru yürüyün ve kapıya dönün; depoya girmek için open() fonksiyonunu kullanın. İçeri girdikten sonra, masanın üzerindeki notta hangi malzeme ve miktarların sipariş edildiğini kontrol etmek için koyu X işaretine doğru yürüyün, sağa dönün ve read() fonksiyonunu kullanın. Liste sabitleri hakkında bilgiler, malzemeler ve onların siparişleri, notta yazılıdır. İşiniz bittiğinde, depodaki açık X işaretine doğru yürüyün, kutuya dönün ve içeride bulunan pads liste sabitini collect() fonksiyonuyla alın, şöyle: player.collect(pads) .
Depo içerisinde "peroxide" ve "isopropyl" stokları bulunmaktadır, hepsini toplayın, ardından dışarı çıkın ve mor halı üzerindeki koyu X işaretine doğru ilerleyin. Mor halı üzerinde, kutuya bakarken collect() fonksiyonunu kullanarak "water bottle" alın, sonra sarı halı üzerindeki koyu X işaretine gidin ve collect() fonksiyonunu kullanarak "glass bottle" alın.
Artık malzemeler toplandığına göre, siparişi yerine getirip sağdaki depo kutularına tüm malzemeleri yerleştirme zamanı. Bunu yapmak için önce "water bottle", "peroxide" ve "isopropyl" öğelerini içeren malzemeleri supplies adlı bir listeye koyacağız. Kırmızı, yeşil ve mavi halılar üzerindeki koyu X işaretlerinde kutuları kullanarak tıbbi malzemeleri depolayacağız. Bunun için üç liste oluşturacağız: blue_crate = [], green_crate = [] ve red_crate = [].
Öğeleri yerleştirmeden önce, tüm listeleri malzemelerle doldurmamız gerekiyor. Bunun için bir döngü kullanarak listeleri dolaşıp onları tek bir liste halinde birleştireceğiz. Bu, tüm supplies öğelerini listeye koyacak ve depodaki notta belirtilen order'a göre pads öğelerinin sayısını bölecektir.
for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])
Buna rağmen, düzgün şekilde yapılmış olmasına ve kodun sağlam olmasına karşın hatalar oluşacağını göreceksiniz. Sorun şu ki, supplies listesinde sadece üç (3) öğe bulunurken, döngü beş (5) kez döndüğü için Index Error oluşuyor. Aynı zamanda pads listesinin de sadece üç (3) öğesi var ve sipariş değerlerinden biri 0 olduğundan, herhangi bir sayının 0 ile bölünmesi matematikte tanımsızdır; bu da Zero Division Error neden olur.
İşte burada birden fazla istisna devreye giriyor; hataları yakalamak ve kodun devam edebilmesini sağlamak için try / except kod bloklarını kullanıyoruz. İki hata meydana geldiği için her hatayı belirleyip yakalamamız gerekiyor. Bu, except kod bloklarını aşağıdaki şekilde genişleterek yapılır: except IndexError: ve except ZeroDivisionError:. Örneğin:
for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)
Index Error, listenin eksik alanlarını "glass bottle" ile doldurarak düzeltilirken, Zero Division Error da yasa dışı işlem gerçekleştiğinde 0 değeri eklenerek giderildi.
Bunu blue_crate = [], green_crate = [] ve red_crate = [] listeleri için yapın. Kırmızı, yeşil ve mavi halıların üzerindeki koyu X işaretlerine doğru yürüyün ve place() fonksiyonunu kullanarak listeleri ilgili kutulara yerleştirip seviyeyi tamamlayın.