משך זמן
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 62 מתוך 68.
כשעובדים עם זמן ב-Go, לעיתים קרובות צריך לייצג פרקי זמן — כמו "5 דקות" או "שעתיים". Go מספקת את הטיפוס time.Duration במיוחד למטרה זו.
time.Duration מייצג פרק זמן בין שני רגעים. Go כוללת כמה קבועים מוגדרים מראש שהופכים את יצירת משכי הזמן לפשוטה וקריאה:
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Secondקבועי משך הזמן הנפוצים ביותר הם time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute ו־time.Hour. אפשר להכפיל את הקבועים האלה במספרים שלמים כדי ליצור את משך הזמן המדויק שנחוץ לך.
ערכי משך חיוניים לחישובי זמן, לתזמון פעולות ולשליטה בתזמון בתוכניות שלך. הם משתלבים בצורה חלקה עם פונקציות זמן אחרות ומספקים דרך ברורה וקריאה לביטוי פרקי זמן בקוד שלך.
אתגר
קלצרו טיימר לאימון שמשתמש ב־time.Duration כדי לעקוב אחר מרווחי זמן שונים של תרגילים ומנוחות. האתגר הזה יבחן את היכולת שלכם ליצור ערכי משך באמצעות הקבועים המוגדרים מראש של Go ולבצע איתם חישובים.
תקבלו שתי קלטים:
- מחרוזת שמכילה הגדרות של תרגילים בפורמט
"exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit"(למשל,"Push-ups:30:Second,Plank:2:Minute,Squats:45:Second") - מחרוזת שמכילה מידע על זמן המנוחה בפורמט
"rest_duration_value:rest_duration_unit"(למשל,"15:Second")
עליכם לבצע את הפעולות הבאות:
- נתחו את הקלט הראשון באמצעות פיצול לפי פסיקים, כדי לקבל רשומות נפרדות של תרגילים
- עבור כל רשומת תרגיל, פצלו לפי נקודתיים כדי לחלץ את שם התרגיל, ערך המשך (כמחרוזת) ויחידת המשך
- נתחו את הקלט השני באמצעות פיצול לפי נקודתיים, כדי לקבל את ערך משך המנוחה ואת היחידה
- המירו את ערכי המשך ממחרוזות למספרים שלמים וצרו אובייקטים מסוג
time.Durationבאמצעות הקבועים המתאימים:- עבור
"Second": הכפילו ב־time.Second - עבור
"Minute": הכפילו ב־time.Minute - עבור
"Hour": הכפילו ב־time.Hour
- עבור
- הציגו את כותרת היישום:
"=== WORKOUT SESSION TIMER ===" - הציגו את הגדרת האימון:
"Setting up workout session..." - עבור כל תרגיל, הציגו:
"Exercise: [exercise_name] - Duration: [duration_object]" - הציגו את זמן המנוחה:
"Rest period between exercises: [rest_duration_object]" - חשבו והציגו פירוט של האימון:
"=== SESSION BREAKDOWN ==="- עבור כל תרגיל:
"[exercise_name]: [duration_in_seconds] seconds" "Rest periods: [rest_duration_in_seconds] seconds each"
- חשבו את משך האימון הכולל (סכום משכי כל התרגילים וזמני המנוחה שבין התרגילים):
"=== TIMING CALCULATIONS ===""Total exercise time: [total_exercise_duration_object]""Total rest time: [total_rest_duration_object]"(זמני המנוחה בין התרגילים, כלומר אחד פחות ממספר התרגילים)"Complete session duration: [total_session_duration_object]"
- הציגו את הסטטיסטיקה של האימון:
"=== SESSION STATISTICS ===""Number of exercises: [number_of_exercises]""Longest exercise: [longest_exercise_name] ([longest_duration_object])""Shortest exercise: [shortest_exercise_name] ([shortest_duration_object])""Average exercise duration: [average_duration_in_seconds] seconds"
- הציגו המרות של יחידות זמן:
"=== TIME CONVERSIONS ===""Session duration in minutes: [total_minutes]"(המירו את משך האימון הכולל לדקות)"Session duration in hours: [total_hours]"(המירו את משך האימון הכולל לשעות והציגו כמספר עשרוני)
- הציגו את הודעת הסיום:
"Workout session timer configured successfully"
השתמשו בחבילה time לעבודה עם משכי זמן, בחבילה strings לפיצול מחרוזות הקלט, בחבילה strconv להמרת מספרים במחרוזות למספרים שלמים, ובחבילה fmt לעיצוב הפלט. זכרו שאפשר לחבר ערכים מסוג time.Duration ולהמיר אותם ליחידות שונות באמצעות מתודות כמו Seconds(), Minutes() ו־Hours(). האתגר הזה מדגים איך ליצור ולתפעל ערכי משך עבור יישומי תזמון.
נסו בעצמכם
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// קראו את הקלט
var exerciseInput string
var restInput string
fmt.Scanln(&exerciseInput)
fmt.Scanln(&restInput)
// נתחו את התרגילים מתוך הקלט
exerciseEntries := strings.Split(exerciseInput, ",")
// נתחו את משך המנוחה מתוך הקלט
restParts := strings.Split(restInput, ":")
// TODO: כתבו את הקוד שלכם למטה
// 1. נתחו כל רשומת תרגיל כדי לחלץ את השם, ערך משך הזמן והיחידה
// 2. המירו את ערכי משך הזמן למספרים שלמים וצרו אובייקטים מסוג time.Duration
// 3. נתחו את משך המנוחה וצרו אובייקט מסוג time.Duration
// 4. הציגו את פרטי אימון הכושר ואת החישובים
// 5. חשבו נתונים סטטיסטיים של אימון הכושר והמרות זמן
// זכרו להציג את כל המידע הנדרש כפי שמפורט באתגר
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאיתרגלו בעצמכם: קומפיילר Go אונליין