Özet Rapor
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 53 / 56.
Son özellik: tek bir kategori yerine, tüm testi çalıştırın ve sonunda kategori başına bir özet oluşturun.
Her bölüme aynı anda başvuracaksınız: yineleme için tuple destructuring, dizeler bölümünden esnek derecelendirme, sözlükler bölümünden varsayılan alt simgeli sözlükler, deterministik çıktı için sıralı yineleme.
Kategori başına sayaçları iki paralel sözlük olarak oluşturun:
var totals: [String: Int] = [:]
var rights: [String: Int] = [:]Her soru için totals[cat, default: 0] += 1 değerini artırın; rights[cat, default: 0] değerini sadece doğru cevaplarda artırın. Sonunda, raporu yazdırmak için kategorileri alfabetik sırayla gezin.
Görev
OrtaÖnceki dersteki aynı altı soruluk banka. Stdin'den, bankadakiyle aynı sırada, her satıra bir tane olacak şekilde altı cevap okuyun. Esnek puanlama kullanın.
Şu sırayla yazdırın:
- Kategori başına bir satır, alfabetik olarak sıralanmış,
<category>: <right>/<total>formatında - Son bir satır: Tüm çalışma için
Total: <right>/<total>
4 / 3.14 / Paris / Atlantic / green / WATER girdisi için çıktı şöyledir:
geo: 1/2
math: 2/2
science: 2/2
Total: 5/6Kopya kağıdı
Kategori başına puanları takip etmek için iki paralel sözlük (dictionary) kullanın:
var totals: [String: Int] = [:]
var rights: [String: Int] = [:]
// For each question with category cat:
totals[cat, default: 0] += 1
// On correct answer:
rights[cat, default: 0] += 1Belirlenebilir (deterministic) bir çıktı için sorted() kullanarak kategorileri alfabetik sırayla gezin:
for cat in totals.keys.sorted() {
let r = rights[cat, default: 0]
let t = totals[cat]!
print("\(cat): \(r)/\(t)")
}Sözlük değerlerini toplayarak tüm kategorilerdeki toplamları hesaplayın:
let totalRight = rights.values.reduce(0, +)
let totalAll = totals.values.reduce(0, +)
print("Total: \(totalRight)/\(totalAll)")Kendin dene
let questions: [(String, String, String)] = [
("math", "2 + 2?", "4"),
("math", "Value of pi to 2 decimals?", "3.14"),
("geo", "Capital of France?", "Paris"),
("geo", "Largest ocean?", "Pacific"),
("science", "Color of grass?", "green"),
("science", "H2O is?", "water")
]
// YAPILACAKLAR: 6 cevabı oku; esnek puanlama yap; kategori bazlı toplamları/doğruları oluştur;
// sıralanmış özet satırlarını + Toplamı yazdır
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Stringler Derinlemesine
Sayma ve İndekslerBüyük-Küçük Harf ve KırpmaStringlerde AramaBölme ve BirleştirmeAlt Stringleri DeğiştirmeÖzet - Kullanıcı Adı Kontrolü4Kümeler
Küme OluşturmaBirleşim ve KesişimFark ve Simetrik FarkAlt Küme ve Üst KümeÖzet - Etiket Filtresi7Proje - Alışkanlık Takibi
Projeye Genel BakışTamamlandı Olarak İşaretle10Proje - Quiz Motoru
Projeye Genel BakışSoruları Sorma2Aralıklar ve Adımlar
Kapalı ve Yarı AçıkStride (Adım)Aralık MetotlarıSwitch İçinde AralıklarÖzet - Takvim Izgarası5Yüksek Mertebeden Fonksiyonlar Bölüm 1
MapFilterReduceMap, filter, reduce zincirlemeÖzet - Kelime İstatistikleri