Als ich vor ein paar Jahren eine wissenschaftliche Reise unternahm, wurde mir klar, dass sich die meisten Erfahrungen, die ich sammelte, eher um Datenanalyse und theoretische Kodierung drehten.
Rückblickend warfare einer der Vorteile meines Informatikstudiums die Entwicklung eines Grundverständnisses für verschiedene Programmiersprachen.
Der Nachteil ist zwar, dass man all diese Theorien hat, aber wenig bis gar keine Praxis.
Vor diesem Hintergrund habe ich mich der Herausforderung gestellt, etwas mit einer der besten Programmiersprachen der Datenwissenschaft zu entwickeln: R.
Und ja, ich weiß, was Sie vielleicht denken: Warum R und nicht Python?
Nun, bleiben Sie einen Second bei mir.
Laut a StrataScratch-ArtikelEs wurden quick 20.000 Datenexperten befragt, und 31 % gaben an, R täglich zu verwenden.
Für mich sind diese 31 % ein riesiges Stück vom Kuchen, und das hat mich zum Nachdenken gebracht.
Wenn R leistungsstark genug ist, um Millionen von Datenzeilen zu verarbeiten, warum verwende ich es dann nicht auch, um die Grundlagen der Programmierung zu üben? in Bezug auf Datenwissenschaft?
Manchmal besteht der beste Weg, sich als Datenwissenschaftler weiterzuentwickeln, nicht darin, direkt in Bibliotheken für maschinelles Lernen zu springen oder große Datensätze zu analysieren. Es könnte auch von einer Umarmung herrühren ständiges Lernen und erweitern Sie Ihre Fähigkeiten schrittweise.
Das hat mich dazu inspiriert, dieses Projekt zu erstellen, eine Befehlszeilen-Quizanwendung in R direkt im Terminal.
Es ist einfach, aber es vermittelt die gleichen Fähigkeiten, die Sie beim Aufbau komplexerer Datenpipelines benötigen, wie z. B. Kontrollfluss, Eingabeverarbeitung und modulare Funktionen.
In diesem Artikel führe ich Sie Schritt für Schritt durch den Prozess und teile nicht nur den Code, sondern auch die Lektionen, die ich dabei gelernt habe.
Umgang mit Benutzereingaben
Hier wurde ich ein wenig emotional, denn das versetzte mich zurück in die Zeit, als ich es zum ersten Mal benutzte readline() in R. Zu sehen, wie das Programm darauf „wartet“, dass ich etwas tippe, fühlte sich an, als würde ich eine Konversation mit meinem Code führen.
Okay, mehr Codierung, weniger Nostalgie.
Wie bei den meisten Projekten habe ich klein angefangen und mit nur einer Frage und einer Antwortprüfung begonnen.
# First experiment: single query with primary enter dealing with
# Bug observe: with out tolower(), "Abuja" vs "abuja" brought about a mismatch
reply <- readline(immediate = "What's the capital of Nigeria? ")
if (tolower(trimws(reply)) == "abuja") {
cat("✅ Appropriate!n")
} else {
cat("❌ Incorrect. The proper reply is Abuja.n")
}
Dieser Ausschnitt sieht einfach aus, stellt aber zwei wichtige Ideen vor:
readline()ermöglicht interaktive Eingaben in der Konsole.tolower()+trimws()hilft bei der Normalisierung von Antworten (vermeidet Abweichungen aufgrund von Groß- und Kleinschreibung oder zusätzlichen Leerzeichen).
Als ich das zum ersten Mal versuchte, habe ich „Abuja“ mit einem Leerzeichen am Ende eingegeben, und das hat mich als falsch markiert. Dabei wurde mir klar, dass die Reinigung des Inputs genauso wichtig ist wie das Sammeln.
Aufbau einer Logik mit Kontrollfluss und Funktionen
Anfangs habe ich alles in einem einzigen Block gestapelt if Aussagen, aber es wurde schnell chaotisch.
Um ehrlich zu sein, nicht meine beste Entscheidung.
Es erinnerte mich schnell an strukturierte Programmierung, bei der die Aufteilung in Funktionen den Code oft sauberer und leichter lesbar macht.
# Turned the enter logic right into a reusable perform
# Small bug repair: added trimws() to take away stray areas in solutions
ask_question <- perform(q, a) {
response <- readline(immediate = paste0(q, "nYour reply: "))
if (tolower(trimws(response)) == tolower(a)) {
cat("✅ Appropriate!n")
return(1)
} else {
cat("❌ Flawed. The proper reply is:", a, "n")
return(0)
}
}
# Fast check
ask_question("What's the capital of Nigeria?", "Abuja")
Was mich an der Verwendung von Funktionen am meisten erfüllte, warfare nicht nur der sauberere Code, sondern auch die Erkenntnis, dass ich endlich meine Programmierkenntnisse übte und verfeinerte.
Knowledge Science ist so etwas wie das Erlernen eines TikTok-Tanzes; Man versteht es erst wirklich, wenn man anfängt, die Bewegungen selbst zu üben.
Erstellen einer Fragendatenbank
Um das Quiz zu skalieren, brauchte ich eine Möglichkeit, mehrere Fragen zu speichern, anstatt nur eine nach der anderen fest zu codieren. Ich meine, das könnte man machen, aber es ist nicht wirklich effizient.
Das ist das Schöne an der Listenstruktur von R; Es warfare flexibel genug, um sowohl die Fragen als auch die Antworten aufzunehmen, wodurch es perfekt zu dem passte, was ich baute.
# Query financial institution: maintaining it easy with an inventory of lists
# Be aware: began with simply 2 questions earlier than scaling up
quiz_questions <- checklist(
checklist(query = "What's the capital of Nigeria?", reply = "Abuja"),
checklist(query = "Which bundle is often used for knowledge visualization in R?", reply = "ggplot2")
)
# Later I added extra, however this small set was sufficient to check the loop first.
Auf meiner Suche nach Suggestions teilte ich dies einem Freund mit, der vorschlug, Kategorien hinzuzufügen (wie „Geographie“ oder „R-Programmierung“), was tatsächlich eine gute Verbesserung für später sein könnte.
Ausführen des Quiz (Durchlaufen der Fragen)
Jetzt kommt der spaßige Teil: Durchgehen Sie die Fragendatenbank, stellen Sie jede Frage und behalten Sie den Überblick über die Punktzahl. Diese Schleife ist die Engine, die die gesamte Anwendung antreibt.
Um dies klarer zu machen, hier ein einfaches Flussdiagramm, das verdeutlicht, was ich sage:

Mit dieser Struktur im Hinterkopf sehen Sie hier, wie sie im Code aussieht:
# Working by the quiz with a rating counter
# (I began with a for loop earlier than wrapping this into run_quiz())
rating <- 0
for (q in quiz_questions) {
rating <- rating + ask_question(q$query, q$reply)
}
cat("📊 Your rating is:", rating, "out of", size(quiz_questions), "n")
Letzte Handgriffe
Um die Dinge aufzupolieren, habe ich die Logik in eine verpackt run_quiz() Funktion, die das Programm wiederverwendbar und leicht verständlich macht.
# Wrapped every little thing in a single perform for neatness
# This model prints a welcome message and whole rating
run_quiz <- perform(questions) {
rating <- 0
whole <- size(questions)
cat("👋 Welcome to the R Quiz Recreation!n")
cat("You'll be requested", whole, "questions. Good luck!nn")
for (q in questions) {
rating <- rating + ask_question(q$query, q$reply)
}
cat("🎉 Remaining rating:", rating, "out of", whole, "n")
}
# Uncomment to check
# run_quiz(quiz_questions)
Zu diesem Zeitpunkt schien die App vollständig zu sein. Es begrüßte den Spieler, stellte eine Reihe von Fragen und zeigte das Endergebnis mit einer feierlichen Nachricht an.
Sauber.
Beispiellauf
So sah es aus, als ich es in der R-Konsole spielte:
👋 Welcome to the R Quiz Recreation!
You'll be requested 2 questions. Good luck!
What's the capital of Nigeria?
Your reply: Abuja
✅ Appropriate!
Which bundle is often used for knowledge visualization in R?
Your reply: ggplot
❌ Flawed. The proper reply is: ggplot2
🎉 Remaining rating: 1 out of two
Fazit und Erkenntnisse
Rückblickend habe ich durch dieses kleine Projekt Lektionen gelernt, die direkt auf größere datenwissenschaftliche Arbeitsabläufe anwendbar sind. Ein Kommandozeilen-Quizspiel in R magazine trivial klingen, aber glauben Sie mir, es ist eine wirkungsvolle Übung.
Wenn Sie R lernen, empfehle ich Ihnen, Ihre eigene Model auszuprobieren. Fügen Sie weitere Fragen hinzu und mischen Sie sie. Um sich noch mehr anzustrengen, können Sie die Antworten sogar zeitlich begrenzen.
Beim Programmieren geht es nicht darum, eine Ziellinie zu erreichen; Es geht darum, auf der Lernkurve zu bleiben. Kleine Projekte wie dieses bringen Sie voran – eine Funktion, eine Schleife, eine Herausforderung nach der anderen.
