تقرير الصف
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 25 من 64.
التحدي
سهلأضف الأمر REPORT. أبقِ كل أمر من الخطوات السابقة يعمل تمامًا كما كان من قبل.
REPORT: أجب بسطر واحد لكل طالب مخزَّن بالترتيب الأبجدي، وبالتنسيق نفسه المستخدم في الرد علىAVG(ada: 88.8أوbo: no grades). ثم أضف السطرClass average:متبوعًا بمتوسط جميع الدرجات المسجَّلة لكل الطلاب، مع منزلة عشرية واحدة، أوno gradesعندما لا تكون هناك أي درجات مسجَّلة.
ينتج عن أمر REPORT واحد عدة ردود، ويُطبع كل رد في سطر مستقل.
يمرّر الكود المرفق كل سطر إدخال إلى gradebook() باعتباره أمرًا واحدًا، ويطبع كل رد مُعاد في سطر مستقل. الاسم عبارة عن كلمة واحدة بأحرف لاتينية صغيرة، ويحتوي الإدخال فقط على الأوامر الموضحة حتى الآن.
جرّب بنفسك
average_text <- function(scores) {
if (length(scores) == 0) "no grades" else sprintf("%.1f", mean(scores))
}
gradebook <- function(commands) {
grades <- list()
replies <- c()
for (cmd in commands) {
parts <- strsplit(cmd, " ")[[1]]
name <- parts[2]
if (parts[1] == "ADD") {
if (name %in% names(grades)) {
replies <- c(replies, paste(name, "already exists"))
} else {
grades[[name]] <- numeric(0)
replies <- c(replies, paste("added", name))
}
} else if (parts[1] == "GRADE") {
if (!(name %in% names(grades))) {
replies <- c(replies, paste("no student", name))
} else {
score <- as.numeric(parts[3])
grades[[name]] <- c(grades[[name]], score)
replies <- c(replies, paste("recorded", score, "for", name))
}
} else if (parts[1] == "AVG") {
if (!(name %in% names(grades))) {
replies <- c(replies, paste("no student", name))
} else {
replies <- c(replies, paste0(name, ": ", average_text(grades[[name]])))
}
}
}
replies
}
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهمتدرّب بنفسك: مترجم R عبر الإنترنت