Menu
CoddyTech

查看所有任务

本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 22 课,共 68 课。

challenge icon

挑战

简单

继续完善你的任务管理系统,现在你要实现以便于用户阅读的格式显示所有任务的功能。本次挑战重点是遍历任务集合,并使用清晰的视觉标记显示每个任务及其完成状态。

你会收到两个输入:

  • 一个表示任务数量的字符串(例如,"4")
  • 一个包含任务数据的字符串,格式为:"name1:status1,name2:status2,name3:status3",其中 status 可以是 "true" 或 "false"(例如,"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")

你要完成以下任务:

  1. 定义与之前挑战中相同的 Task 结构体,包含 Name(字符串)和 Completed(bool)字段
  2. 创建一个名为 viewAllTasks 的函数,该函数接收一个 Task 结构体切片作为参数
  3. 在 viewAllTasks 函数中,遍历切片,并按以下格式打印每个任务:
    • 对于已完成的任务:"[x] [task_name]"
    • 对于未完成的任务:"[ ] [task_name]"
  4. 解析第二个输入中的任务数据,创建任务切片:
    • 按逗号拆分输入,获取各个任务条目
    • 对于每个条目,按冒号拆分,以分离名称和状态
    • 将状态字符串转换为布尔值("true" 变为 true,"false" 变为 false)
  5. 将创建的切片传给 viewAllTasks 函数并调用它
  6. 显示所有任务后,按以下格式打印摘要:"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
}

逻辑与流程中的所有课

自己练习: Go 在线编译器