Добавление задачи
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 21 из 68.
Задание
ЛегкоОпираясь на основу управления задачами, теперь ты реализуешь основную функциональность для добавления новых задач в систему. Это задание посвящено созданию функции, которая расширяет список задач, добавляя новые задачи в существующий срез.
Важное примечание: Поскольку названия задач могут содержать пробелы (например, "Buy groceries"), для чтения целых строк ввода тебе понадобится bufio.Scanner. Функция fmt.Scanln прекращает чтение на первом пробеле, из-за чего названия задач с пробелами будут обрабатываться неправильно. Используй bufio.NewScanner(os.Stdin) и вызывай scanner.Scan(), а затем scanner.Text(), чтобы читать строки целиком.
Ты получишь два входных значения:
- Строку, представляющую количество существующих задач (например,
"2") - Строку с названиями задач, разделёнными запятыми (например,
"Buy groceries,Call dentist,Finish project")
Твоя задача:
- Определи ту же структуру
Task, что и в предыдущем задании, с полямиNameтипа string иCompletedтипа bool - Создай функцию с именем
addTask, которая принимает срез структурTaskи название задачи (string) в качестве параметров - Функция
addTaskдолжна возвращать новый срез с добавленной задачей (для новой задачи значениеCompletedдолжно быть установлено вfalse) - Используй
bufio.Scanner, чтобы правильно читать строки ввода и обрабатывать названия задач с пробелами - Создай начальный срез задач на основе количества существующих задач, указанного во входных данных:
- Если число равно
"0", начни с пустого среза - Если число больше
"0", создай указанное количество задач-заполнителей с названиями вроде"Existing Task 1","Existing Task 2"и т. д.; все они должны быть помечены как невыполненные
- Если число равно
- Разбери названия задач, разделённые запятыми, из второго входного значения
- Используй функцию
addTask, чтобы добавить каждую новую задачу в срез - Выведи каждую задачу из итогового среза в формате:
"Task: [name], Completed: [true/false]" - Выведи общее количество задач в формате:
"Total tasks: [count]"
Например, если у тебя есть 1 существующая задача и ты хочешь добавить "Buy groceries,Call dentist", в выводе сначала должна быть существующая задача, затем две новые задачи и, наконец, общее количество. В этом задании ты попрактикуешься в работе со срезами с помощью функции append и узнаешь, как создавать функциональность, расширяющую структуры данных.
Попробуйте сами
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: Создать здесь функцию addTask
func main() {
// Создать сканер для чтения строк ввода
scanner := bufio.NewScanner(os.Stdin)
// Прочитать количество существующих задач
scanner.Scan()
existingTasksStr := scanner.Text()
// Прочитать названия задач
scanner.Scan()
taskNamesStr := scanner.Text()
// TODO: Завершить реализацию
// 1. Преобразовать existingTasksStr в целое число
// 2. Создать начальный срез с существующими задачами
// 3. Разобрать taskNamesStr и добавить новые задачи
// 4. Вывести все задачи и их общее количество
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go