Menu
Coddy logo textTech

Anahtarları Denetleme

Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 8 / 64.

Eksik olabilecek bir anahtarı aramadan önce, adlara karşı %in% ile kontrol edin:

stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))

Çıktı:

[1] TRUE
[1] FALSE

Arama işleminin etrafına yerleştirilen bir if, eksik bir anahtar için NA veya hata yerine varsayılan bir değer verir:

stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)

Çıktı:

[1] 0

Değeri 0 olan bir anahtar, eksik bir anahtardan farklıdır: pears bilinir ve out of stock, plums ise hiç satılmaz.

Listelerde de aynı %in% names() kontrolü kullanılır. Bir listede bulunmayan bir ad hata yerine NULL döndürür, bu nedenle is.null() da işe yarar:

user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))

Çıktı:

[1] TRUE
[1] TRUE

Küçük bir yardımcı işlev, bir program birçok anahtarı ararken kontrolü tek bir yerde tutar:

get_or <- function(x, key, default) {
  if (key %in% names(x)) x[[key]] else default
}
stock <- c(apples = 12)
print(get_or(stock, "apples", 0))
print(get_or(stock, "kiwis", 0))

Çıktı:

[1] 12
[1] 0
challenge icon

Görev

Kolay

stock_status(stock, item) işlevini tamamlayın. item, stock sözlüğünde bir anahtar değilse unknown, değeri 0 ise out of stock, aksi hâlde in stock: ifadesinin ardından miktarı döndürün.

Verilen kod, stok miktarlarını virgülle ayrılmış name=quantity çiftleri olarak, ardından öğeyi okur ve döndürülen değeri yazdırır.

Kendin dene

stock_status <- function(stock, item) {
  # Kodunuzu buraya yazın
  ""
}

# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
stock <- c()
for (pair in strsplit(input[1], ",")[[1]]) {
  kv <- strsplit(pair, "=")[[1]]
  stock[kv[1]] <- as.numeric(kv[2])
}
cat(stock_status(stock, input[2]), sep = "\n")
quiz iconKendini test et

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

Kendi başına pratik yap: Online R derleyicisi