Menu
Coddy logo textTech

קבלת קלט מהמשתמש

חלק מהיחידה יסודות במסלול ה-R של Coddy. שיעור 34 מתוך 78.

challenge icon

אתגר

קל

בשיעור הקודם יצרת הודעת פתיחה עבור מחשבון חלוקת החשבון. עכשיו הוסף את הפונקציונליות לקליטת קלט מהמשתמש לצורך חישוב החשבון.

אחרי הודעת הפתיחה הקיימת שלך, קרא שלושה קלטים מהמשתמש:

  1. הסכום הכולל של החשבון
  2. אחוז הטיפ (כמספר שלם, למשל 15 עבור 15%)
  3. מספר האנשים שמתחלקים בחשבון

בסקריפטים של R שרצים באופן לא אינטראקטיבי (כמו בפלטפורמה הזו), הקלט נקרא מזרם הקלט הסטנדרטי. כדי לעשות זאת, פתח תחילה חיבור אל stdin באמצעות file(), ואז קרא כל שורה באמצעות readLines(), וסגור את החיבור בסיום:

con <- file("stdin", "r")
bill <- as.numeric(suppressWarnings(readLines(con, n = 1)))
tip_percent <- as.numeric(suppressWarnings(readLines(con, n = 1)))
people <- as.numeric(suppressWarnings(readLines(con, n = 1)))
close(con)

כך פועל כל חלק:

  • file("stdin", "r"): פותח את זרם הקלט הסטנדרטי לקריאה ושומר אותו ב-con
  • readLines(con, n = 1): קורא בדיוק שורה אחת מהחיבור הזה. הערה: readLines() שונה מ-readline(): readLines() פועלת עם חיבורי קבצים (כולל stdin) ויכולה לקרוא כמה שורות בבת אחת באמצעות n =, בעוד readline() פועלת רק באופן אינטראקטיבי במסוף של R
  • suppressWarnings(...): משתיק אזהרות לא מזיקות שמופיעות כשקוראים מ-stdin באופן הזה. כש-R קוראת מ-stdin בסקריפט, לפעמים מופיעה אזהרה כמו "incomplete final line" אפילו כשהכול פועל כראוי. עטיפת הקריאה ב-suppressWarnings() מסתירה את ההודעות האלה כדי שלא יעמיסו על הפלט שלך. הדבר אינו משפיע על הערכים שנקראים
  • as.numeric(...): ממיר את קלט הטקסט למספר
  • close(con): סוגר את החיבור לאחר שכל הקלטים נקראו

שמור את שלושת הערכים במשתנים בשם bill, tip_percent ו-people.

אחרי קריאת הקלטים, הצג הודעת אישור שמראה מה הוזן, בפורמט הבא:

Bill: $[bill]
Tip: [tip_percent]%
People: [people]

השתמש ב-cat() עבור כל הפלט וכלול תווי שורה חדשה \n במקומות הנדרשים. השתמש ב-sep = "" בכל קריאה ל-cat() כדי למנוע רווחים לא רצויים.

כברירת מחדל, cat() מוסיפה רווח בין כל פריט שהיא מדפיסה. לדוגמה:

cat("Bill: $", 120, "\n")   # prints: Bill: $ 120 

שים לב לרווחים הלא רצויים בין $ ל-120, ולפני תו השורה החדשה. הוספת sep = "" מורה ל-cat() להשתמש במחרוזת ריקה כמפריד, כך שלא יוכנס דבר בין הפריטים:

cat("Bill: $", 120, "\n", sep = "")   # prints: Bill: $120

החל את הדפוס הזה על כל שלוש שורות האישור:

cat("Bill: $", bill, "\n", sep = "")
cat("Tip: ", tip_percent, "%\n", sep = "")
cat("People: ", people, "\n", sep = "")

לדוגמה, אם הקלטים הם 120, 18 ו-4, הפלט המלא אמור להיות:

Welcome to the Bill Split Calculator!
Let's split your bill fairly.
Bill: $120
Tip: 18%
People: 4

נסו בעצמכם

# TODO: Write your code below
# Use cat() to display the welcome message
# Remember to use \n for new lines
cat("Welcome to the Bill Split Calculator!\nLet's split your bill fairly.\n")

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר R אונליין