Durata temporale
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 62 di 68.
Quando lavori con il tempo in Go, spesso dovrai rappresentare periodi di tempo, come "5 minutes" o "2 hours". Go fornisce il tipo time.Duration proprio a questo scopo.
Un time.Duration rappresenta un intervallo di tempo tra due istanti. Go include diverse costanti predefinite che rendono semplice e leggibile la creazione di durate:
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.SecondLe costanti di durata più comunemente usate sono time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute e time.Hour. Puoi moltiplicare queste costanti per numeri interi per creare la durata esatta di cui hai bisogno.
I valori di durata sono essenziali per i calcoli temporali, la pianificazione delle operazioni e il controllo dei tempi nei tuoi programmi. Si integrano perfettamente con le altre funzioni temporali e offrono un modo chiaro e leggibile per esprimere intervalli di tempo nel tuo codice.
Sfida
FacileCrea un timer per una sessione di allenamento che utilizzi time.Duration per tenere traccia dei diversi intervalli di esercizio e dei periodi di riposo. Questa sfida metterà alla prova la tua capacità di creare valori di durata utilizzando le costanti predefinite di Go ed eseguire calcoli con esse.
Riceverai due input:
- Una stringa contenente le definizioni degli esercizi nel formato
"exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit"(ad es.,"Push-ups:30:Second,Plank:2:Minute,Squats:45:Second") - Una stringa contenente le informazioni sul periodo di riposo nel formato
"rest_duration_value:rest_duration_unit"(ad es.,"15:Second")
Il tuo compito è:
- Analizzare il primo input separandolo in corrispondenza delle virgole per ottenere le singole voci degli esercizi
- Per ogni voce di esercizio, separarla in corrispondenza dei due punti per estrarre il nome dell'esercizio, il valore della durata (come stringa) e l'unità di durata
- Analizzare il secondo input separandolo in corrispondenza dei due punti per ottenere il valore e l'unità della durata del riposo
- Convertire i valori delle durate da stringhe a interi e creare oggetti
time.Durationusando le costanti appropriate:- Per
"Second": moltiplicare pertime.Second - Per
"Minute": moltiplicare pertime.Minute - Per
"Hour": moltiplicare pertime.Hour
- Per
- Visualizzare l'intestazione dell'applicazione:
"=== WORKOUT SESSION TIMER ===" - Visualizzare la configurazione della sessione:
"Setting up workout session..." - Per ogni esercizio, visualizzare:
"Exercise: [exercise_name] - Duration: [duration_object]" - Visualizzare il periodo di riposo:
"Rest period between exercises: [rest_duration_object]" - Calcolare e visualizzare il riepilogo della sessione:
"=== SESSION BREAKDOWN ==="- Per ogni esercizio:
"[exercise_name]: [duration_in_seconds] seconds" "Rest periods: [rest_duration_in_seconds] seconds each"
- Calcolare la durata totale della sessione (la somma delle durate di tutti gli esercizi più i periodi di riposo tra gli esercizi):
"=== TIMING CALCULATIONS ===""Total exercise time: [total_exercise_duration_object]""Total rest time: [total_rest_duration_object]"(i periodi di riposo tra gli esercizi, quindi uno in meno rispetto al numero di esercizi)"Complete session duration: [total_session_duration_object]"
- Visualizzare le statistiche della sessione:
"=== 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"
- Visualizzare le conversioni di tempo:
"=== TIME CONVERSIONS ===""Session duration in minutes: [total_minutes]"(convertire la durata totale della sessione in minuti)"Session duration in hours: [total_hours]"(convertire la durata totale della sessione in ore, visualizzandola come numero decimale)
- Visualizzare il messaggio di completamento:
"Workout session timer configured successfully"
Usa il pacchetto time per lavorare con le durate, il pacchetto strings per separare le stringhe di input, il pacchetto strconv per convertire i numeri stringa in interi e il pacchetto fmt per l'output formattato. Ricorda che i valori di time.Duration possono essere sommati e convertiti in unità diverse usando metodi come Seconds(), Minutes() e Hours(). Questa sfida mostra come creare e manipolare valori di durata per applicazioni di cronometraggio.
Provalo tu
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Leggi l'input
var exerciseInput string
var restInput string
fmt.Scanln(&exerciseInput)
fmt.Scanln(&restInput)
// Analizza gli esercizi dall'input
exerciseEntries := strings.Split(exerciseInput, ",")
// Analizza il periodo di riposo dall'input
restParts := strings.Split(restInput, ":")
// TODO: Scrivi il tuo codice qui sotto
// 1. Analizza ogni voce relativa agli esercizi per estrarre il nome, il valore della durata e l'unità
// 2. Converti i valori delle durate in numeri interi e crea oggetti time.Duration
// 3. Analizza la durata del riposo e crea un oggetto time.Duration
// 4. Mostra le informazioni e i calcoli relativi alla sessione di allenamento
// 5. Calcola le statistiche della sessione e le conversioni di tempo
// Ricorda di visualizzare tutte le informazioni richieste come specificato nella sfida
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamentiEsercitati da solo: Compilatore Go online