Menu
Coddy logo textTech

Czas trwania

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 62 z 68.

Podczas pracy z czasem w Go często trzeba reprezentować okresy czasu, takie jak „5 minut” lub „2 godziny”. Go udostępnia typ time.Duration specjalnie do tego celu.

time.Duration reprezentuje przedział czasu między dwoma chwilami. Go zawiera kilka predefiniowanych stałych, które ułatwiają tworzenie czytelnych czasów trwania:

tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Second

Najczęściej używane stałe określające czas trwania to time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute i time.Hour. Możesz pomnożyć te stałe przez liczby całkowite, aby uzyskać dokładnie taki czas trwania, jakiego potrzebujesz.

Wartości czasu trwania są niezbędne do wykonywania działań arytmetycznych na czasie, planowania operacji i kontrolowania odmierzania czasu w programach. Współpracują bezproblemowo z innymi funkcjami czasu i zapewniają jasny, czytelny sposób wyrażania przedziałów czasu w kodzie.

challenge icon

Wyzwanie

Łatwy

Utwórz timer sesji treningowej, który używa time.Duration do śledzenia różnych interwałów ćwiczeń i okresów odpoczynku. To wyzwanie sprawdzi Twoją umiejętność tworzenia wartości czasu trwania przy użyciu predefiniowanych stałych Go oraz wykonywania na nich obliczeń.

Otrzymasz dwa wejścia:

  • Ciąg zawierający definicje ćwiczeń w formacie "exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit" (np. "Push-ups:30:Second,Plank:2:Minute,Squats:45:Second")
  • Ciąg zawierający informacje o okresie odpoczynku w formacie "rest_duration_value:rest_duration_unit" (np. "15:Second")

Twoim zadaniem jest:

  1. Przetworzyć pierwsze wejście, dzieląc je po przecinkach, aby uzyskać poszczególne wpisy ćwiczeń
  2. Dla każdego wpisu ćwiczenia podzielić go po dwukropkach, aby wyodrębnić nazwę ćwiczenia, wartość czasu trwania (jako ciąg) i jednostkę czasu trwania
  3. Przetworzyć drugie wejście, dzieląc je po dwukropkach, aby uzyskać wartość czasu trwania odpoczynku i jednostkę
  4. Przekonwertować wartości czasu trwania z ciągów na liczby całkowite i utworzyć obiekty time.Duration przy użyciu odpowiednich stałych:
    • Dla "Second": pomnóż przez time.Second
    • Dla "Minute": pomnóż przez time.Minute
    • Dla "Hour": pomnóż przez time.Hour
  5. Wyświetlić nagłówek aplikacji: "=== WORKOUT SESSION TIMER ==="
  6. Wyświetlić konfigurację sesji: "Setting up workout session..."
  7. Dla każdego ćwiczenia wyświetlić: "Exercise: [exercise_name] - Duration: [duration_object]"
  8. Wyświetlić okres odpoczynku: "Rest period between exercises: [rest_duration_object]"
  9. Obliczyć i wyświetlić zestawienie sesji:
    • "=== SESSION BREAKDOWN ==="
    • Dla każdego ćwiczenia: "[exercise_name]: [duration_in_seconds] seconds"
    • "Rest periods: [rest_duration_in_seconds] seconds each"
  10. Obliczyć całkowity czas sesji (sumę czasu trwania wszystkich ćwiczeń oraz okresów odpoczynku między ćwiczeniami):
    • "=== TIMING CALCULATIONS ==="
    • "Total exercise time: [total_exercise_duration_object]"
    • "Total rest time: [total_rest_duration_object]" (okresy odpoczynku między ćwiczeniami, czyli o jeden mniej niż liczba ćwiczeń)
    • "Complete session duration: [total_session_duration_object]"
  11. Wyświetlić statystyki sesji:
    • "=== 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"
  12. Wyświetlić konwersje czasu:
    • "=== TIME CONVERSIONS ==="
    • "Session duration in minutes: [total_minutes]" (przekonwertować całkowity czas trwania sesji na minuty)
    • "Session duration in hours: [total_hours]" (przekonwertować całkowity czas trwania sesji na godziny i wyświetlić jako liczbę dziesiętną)
  13. Wyświetlić komunikat o ukończeniu: "Workout session timer configured successfully"

Użyj pakietu time do pracy z czasem trwania, pakietu strings do dzielenia ciągów wejściowych, pakietu strconv do konwertowania liczb zapisanych jako ciągi na liczby całkowite oraz pakietu fmt do formatowania wyników. Pamiętaj, że wartości time.Duration można dodawać do siebie i konwertować na różne jednostki za pomocą metod takich jak Seconds(), Minutes() i Hours(). To wyzwanie pokazuje, jak tworzyć i przetwarzać wartości czasu trwania na potrzeby aplikacji do odmierzania czasu.

Spróbuj swoich sił

package main

import (
	"fmt"
	"strconv"
	"strings"
	"time"
)

func main() {
	// Odczytaj dane wejściowe
	var exerciseInput string
	var restInput string
	fmt.Scanln(&exerciseInput)
	fmt.Scanln(&restInput)
	
	// Przeanalizuj ćwiczenia z danych wejściowych
	exerciseEntries := strings.Split(exerciseInput, ",")
	
	// Przeanalizuj czas odpoczynku z danych wejściowych
	restParts := strings.Split(restInput, ":")
	
	// TODO: Napisz swój kod poniżej
	// 1. Przeanalizuj każdy wpis ćwiczenia, aby wyodrębnić nazwę, wartość czasu trwania i jednostkę
	// 2. Przekształć wartości czasu trwania na liczby całkowite i utwórz obiekty time.Duration
	// 3. Przeanalizuj czas odpoczynku i utwórz obiekt time.Duration
	// 4. Wyświetl informacje o sesji treningowej i wyniki obliczeń
	// 5. Oblicz statystyki sesji i przelicz jednostki czasu
	
	// Pamiętaj, aby wyświetlić wszystkie wymagane informacje zgodnie z treścią zadania
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online