Просмотр всех задач
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 22 из 68.
Задание
ЛегкоПродолжая работу над системой управления задачами, теперь реализуй функцию отображения всех задач в удобном для пользователя формате. В этом задании нужно пройти по коллекции задач и показать каждую задачу с указанием её статуса выполнения с помощью понятных визуальных индикаторов.
На вход будут переданы два значения:
- Строка, представляющая количество задач (например,
"4") - Строка с данными задач в формате:
"name1:status1,name2:status2,name3:status3", где статус — это либо"true", либо"false"(например,"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
Твоя задача:
- Определить ту же структуру
Task, что и в предыдущих заданиях, с полямиName(string) иCompleted(bool) - Создать функцию с именем
viewAllTasks, которая принимает срез структурTaskв качестве параметра - Внутри функции
viewAllTasksпройти по срезу и вывести каждую задачу в следующем формате:- Для выполненных задач:
"[x] [task_name]" - Для невыполненных задач:
"[ ] [task_name]"
- Для выполненных задач:
- Разобрать данные задач из второго входного значения, чтобы создать срез задач:
- Разделить входную строку по запятым, чтобы получить отдельные записи задач
- Для каждой записи разделить её по двоеточию, чтобы отделить имя от статуса
- Преобразовать строку статуса в логическое значение (
"true"становитсяtrue,"false"становитсяfalse)
- Вызвать функцию
viewAllTasks, передав ей созданный срез - После отображения всех задач вывести сводку в формате:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Например, если у тебя есть задачи "Buy groceries:false,Call dentist:true,Finish project:false", в выводе должна отображаться каждая задача с соответствующим флажком, а затем сводка с общим количеством задач и статистикой выполнения. Это задание поможет попрактиковаться в переборе среза и условном форматировании с помощью операторов if, а также позволит пользователям наглядно отслеживать ход выполнения задач.
Попробуйте сами
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
func viewAllTasks(tasks []Task) {
// TODO: Реализовать функцию для отображения всех задач
// Для выполненных задач: "[x] [task_name]"
// Для невыполненных задач: "[ ] [task_name]"
}
func main() {
var numTasksStr string
fmt.Scanln(&numTasksStr)
numTasks, _ := strconv.Atoi(numTasksStr)
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
taskData := scanner.Text()
var tasks []Task
// TODO: Разобрать данные о задачах из строки taskData
// Разделить по запятым, чтобы получить отдельные записи о задачах
taskEntries := strings.Split(taskData, ",")
_ = taskEntries
// Каждую запись разделить по двоеточию, чтобы отделить название от статуса
// Преобразовать строку статуса в логическое значение и создать структуры Task
// TODO: Вызвать функцию viewAllTasks с созданным срезом
// TODO: Подсчитать и вывести сводку
// Формат: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
_ = tasks
_ = numTasks
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go