轨道
/
Go
Go
/
练习
/
观鸟者
观鸟者

观鸟者

学习练习

简介

通用语法

for 循环是用于重复执行某段逻辑的最常用语句之一。在 Go 中,它由 for 关键字、一个头部和一个循环体组成,循环体是包裹在花括号里的代码块。头部由 3 个用分号 ; 分隔的部分组成:初始化、条件和后置。

for init; condition; post {
  // loop body - code that is executed repeatedly as long as the condition is true
}
  • 初始化部分是一段只在循环开始前运行一次的代码。
  • 条件部分必须是一个求值为布尔值的表达式,用来控制循环何时停止。 只要这个条件求值为 true,循环里的代码就会一直运行。 一旦这个表达式求值为 false,循环就不会再执行任何迭代。
  • 后置部分是一段会在每次迭代结束时运行的代码。

注意: 与其他语言不同,头部的这三个部分周围没有括号 ()。事实上,插入这样的括号会导致编译错误。不过,包裹循环体的花括号 { } 始终是必需的。

for 循环:一个示例

初始化部分通常用来设置一个计数器变量,条件部分检查循环应该继续还是停止,后置部分通常在每次重复的末尾让计数器自增。

for i := 1; i < 10; i++ {
  fmt.Println(i)
}

这个循环会打印从 1 到 9 的数字(包括 9)。定义步长通常使用自增或自减语句,如上面的示例所示。

说明

你是一位热衷于观鸟的人,一直记录着有多少只鸟造访你的花园。通常你会用笔记本里的计数表来数鸟,不过为了更好地处理数据,你已经把过去几周的鸟类计数数字化了。

1. 确定到目前为止你一共数到了多少只鸟

我们先用整体的视角来分析这些数据。找出自从开始记录以来,你一共数到了多少只鸟。

实现一个函数TotalBirdCount,它接收一个由int组成的切片,里面是每天的鸟数量。它应该返回你数到的鸟的总数。

birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
TotalBirdCount(birdsPerDay)
// => 34

2. 计算某一周里造访的鸟的数量

现在你对鸟的数量已经有了大致的了解,你想做更细致的分析。

实现一个函数BirdsInWeek,它接收一个每天鸟数量的切片和一个周次。

它返回你在那一周里数到的鸟的总数。你可以假设每周的记录都是完整的。

birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
BirdsInWeek(birdsPerDay, 2)
// => 12

3. 修正一处计数错误

你意识到,在你一直努力记录这些鸟的过程中,有一只鸟一直躲在花园的一个偏僻角落里。

你弄清楚了,这只鸟每隔一天就会待在你的花园里。

你不知道它在中间那些日子去了哪里,但可以肯定它不在你的花园里。

你的观鸟直觉还告诉你,这只鸟在你列表中记录的第一天就在你的花园里。

根据这些新信息,编写一个函数FixBirdCountLog,它接收一个每天鸟数量的切片作为实参,并在修正计数错误之后返回该切片。

birdsPerDay := []int{2, 5, 0, 7, 4, 1}
FixBirdCountLog(birdsPerDay)
// => [3 5 1 7 5 1]
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Go Exercism

准备好开始 观鸟者 了吗?

注册 Exercism,借助 34 个概念166 个练习 和真人导师指导,学习并掌握 Go,全部免费。