學習軌道
/
Go
Go
/
練習
/
賞鳥者
賞鳥者

賞鳥者

學習練習

簡介

一般語法

for迴圈是最常用來重複執行某段邏輯的敘述之一。在 Go 中,它由for關鍵字、標頭,以及一個用大括號包住迴圈主體的程式區塊組成。標頭則由 3 個以分號;分隔的部分組成:init、condition 和 post。

for init; condition; post {
  // loop body - code that is executed repeatedly as long as the condition is true
}
  • init 部分是一些只在迴圈開始前執行一次的程式碼。
  • condition 部分必須是某個求值結果為布林值的運算式,用來控制迴圈何時該停止。 只要這個條件的求值結果為 true,迴圈內的程式碼就會持續執行。 一旦這個運算式的求值結果為 false,迴圈就不會再執行任何疊代。
  • post 部分是一些會在每次疊代結束時執行的程式碼。

注意: 與其他語言不同,標頭的三個部分外面並沒有用小括號()包住。事實上,加上這樣的小括號會造成編譯錯誤。不過,包住迴圈主體的大括號{ }則一律不可省略。

for迴圈:範例

init 部分通常會設定一個計數器變數,condition 部分則檢查迴圈應該繼續還是停止,而 post 部分通常會在每次重複結束時把計數器加一。

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,全部免費。