查看所有任务
本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 22 课,共 68 课。
挑战
简单继续完善你的任务管理系统,现在你要实现以便于用户阅读的格式显示所有任务的功能。本次挑战重点是遍历任务集合,并使用清晰的视觉标记显示每个任务及其完成状态。
你会收到两个输入:
- 一个表示任务数量的字符串(例如,
"4") - 一个包含任务数据的字符串,格式为:
"name1:status1,name2:status2,name3:status3",其中 status 可以是"true"或"false"(例如,"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
你要完成以下任务:
- 定义与之前挑战中相同的
Task结构体,包含Name(字符串)和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
}逻辑与流程中的所有课
自己练习: Go 在线编译器