בדיקת המלאי
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 51 מתוך 66.
אתגר
קלתקבלו ארבעה קלטים. הקלט הראשון הוא שם של פריט לבדיקה. הקלט השני הוא רשימה מופרדת בפסיקים של שמות הפריטים במלאי. הקלט השלישי הוא רשימה מופרדת בפסיקים של המחירים המתאימים לכל פריט. הקלט הרביעי הוא רשימה מופרדת בפסיקים של הכמויות המתאימות לכל פריט. צרו HashMap לאחסון נתוני המלאי, כאשר המפתח הוא שם הפריט והערך הוא tuple המכיל את המחיר והכמות (f64, i32). לאחר מכן בדקו אם הפריט המבוקש קיים במלאי באמצעות .get() והדפיסו את פרטי המלאי המתאימים.
דרישות:
- ייבאו את
HashMapמתוךstd::collections - קראו את הקלט הראשון (שם הפריט לבדיקה) והסירו רווחים לבנים
- קראו את הקלט השני (שמות פריטים מופרדים בפסיקים) והסירו רווחים לבנים
- קראו את הקלט השלישי (מחירים מופרדים בפסיקים) והסירו רווחים לבנים
- קראו את הקלט הרביעי (כמויות מופרדות בפסיקים) והסירו רווחים לבנים
- צרו
HashMap<String, (f64, i32)>משתנה עבור המלאי - פצלו את שמות הפריטים לפי פסיקים
- פצלו את המחירים לפי פסיקים והמירו כל אחד מהם ל-
f64 - פצלו את הכמויות לפי פסיקים והמירו כל אחת מהן ל-
i32 - הכניסו כל פריט למלאי עם המחיר והכמות המתאימים לו כ-tuple
- השתמשו ב-
.get()כדי לבדוק אם הפריט המבוקש קיים במלאי - השתמשו בביטוי
matchכדי לטפל ב-Optionשמוחזר על ידי.get() - בזרוע
Some, חלצו את המחיר והכמות מתוך ה-tuple והדפיסו:[item_name] is in stockPrice: $[price]Quantity: [quantity]
- בזרוע
None, הדפיסו:[item_name] is not in stock
קלט:
- שורה ראשונה: שם הפריט לבדיקה (למשל,
Laptop) - שורה שנייה: שמות פריטים מופרדים בפסיקים (למשל,
Laptop,Mouse,Keyboard) - שורה שלישית: מחירים מופרדים בפסיקים (למשל,
999.99,25.50,75.00) - שורה רביעית: כמויות מופרדות בפסיקים (למשל,
15,50,30)
פלט:
- אם הפריט קיים במלאי:
- שורה ראשונה:
[item_name] is in stock - שורה שנייה:
Price: $[price] - שורה שלישית:
Quantity: [quantity]
- שורה ראשונה:
- אם הפריט אינו קיים:
[item_name] is not in stock
נסו בעצמכם
use std::collections::HashMap;
use std::io;
fn main() {
// קראו את שם הפריט שיש לבדוק
let mut item_to_check = String::new();
io::stdin().read_line(&mut item_to_check).expect("Failed to read line");
let item_to_check = item_to_check.trim();
// קראו את שמות הפריטים המופרדים בפסיקים
let mut items_input = String::new();
io::stdin().read_line(&mut items_input).expect("Failed to read line");
let items_input = items_input.trim();
// קראו את המחירים המופרדים בפסיקים
let mut prices_input = String::new();
io::stdin().read_line(&mut prices_input).expect("Failed to read line");
let prices_input = prices_input.trim();
// קראו את הכמויות המופרדות בפסיקים
let mut quantities_input = String::new();
io::stdin().read_line(&mut quantities_input).expect("Failed to read line");
let quantities_input = quantities_input.trim();
// TODO: כתבו את הקוד שלכם למטה
// צרו HashMap לאחסון נתוני המלאי
// פצלו את הקלטים ומלאו את ה-HashMap
// השתמשו ב-.get() כדי לבדוק אם הפריט קיים
// השתמשו ב-match כדי לטפל ב-Option ולהדפיס את הפלט המתאים
}כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1זרימת בקרה מתקדמת
ביטוי 'match'התאמה למספר ערכיםהתאמה לטווחיםביטוי 'if let'לולאות כביטוייםסיכום – מנתח פקודות פשוט4קיבוץ נתונים באמצעות מבנים
מהו מבנה?סקירה כללית על מבניםגישה לשדות במבנהמבנים הניתנים לשינוימבנים כפרמטרים של פונקציהמבני טופלסיכום – יצירת מבנה ספר7טיפול בשגיאות באמצעות 'Result'
מהו 'Result'?שימוש ב-'match' עם 'Result'is_ok() ו-is_err()קיצורי דרך: unwrap ו-expectאופרטור סימן השאלה '?'המרת מחרוזות למספריםסיכום - פונקציית חילוק בטוחה10Closures ופונקציות אנונימיות
מהו Closure?הגדרת Closure פשוטClosures עם פרמטריםלכידת הסביבהסיכום – Closure פשוט לחיבור2מבוא לווקטורים
מהו וקטור?יצירת וקטורהוספת איברים באמצעות pushגישה לאיברי וקטורמעבר על וקטורמעבר ניתן לשינויהסרת איבריםסיכום – מעקב בסיסי אחר ניקוד5זוגות מפתח-ערך באמצעות מפות גיבוב
מהי מפת גיבוב?יצירת מפת גיבובהוספת זוגות מפתח-ערךגישה לערכיםמעבר על מפת גיבובעדכון ערךהסרת זוגסיכום – מונה מיליםתרגלו בעצמכם: קומפיילר Rust אונליין