Ep.16[ wen’s iOS ] 畫星星蘋果 — nested loop(巢狀迴圈) 練習

本篇練習經典題目畫星星 for 迴圈。

peter 說過這類型的練習基本上就是在考驗邏輯跟訓練思考、找規律,在解題的時候某方面覺得很像在做智力測驗還是什麼數學題目的,有種回到學生時代寫刷數學題庫的感覺( • ̀ω•́ )。

基本題

畫 2 種 Apple,比方有紅色跟綠色。

基本題範例

1.最下面改顏色

這題關鍵是最後一排不要進外圈迴圈。

@IBAction func changeApple(_ sender: UISlider) {
var content = "" // 初始化 content 變數為空字串
sender.value.round() // 將 sender 的值四捨五入
let number = Int(sender.value) // 將 sender 的值轉換為整數並存入 number 變數中
numberLabel.text = "\(number)" // 將 number 的值轉換為字串並顯示在 numberLabel 上

// 迴圈從 1 到 number
for i in 1...number {
if i < number {
// 如果 i 小於 number,執行以下程式碼
for i in 1...number {
content += "🍎" // 添加一個🍎到 content 變數中
}
} else {
// 如果 i 不小於 number,執行以下程式碼
for i in 1...number {
content += "🍏" // 添加一個🍏到 content 變數中
}
}
content += "\n" // 添加換行符到 content 變數中
}

label.text = content // 將 content 的值設定為 label 的文字內容
}
最下面改顏色

2.斜線改顏色

這題關鍵是在創造另一個迴圈變數 j

@IBAction func changeApple(_ sender: UISlider) {
var content = "" // 初始化 content 變數為空字串
sender.value.round() // 將 sender 的值四捨五入
let number = Int(sender.value) // 將 sender 的值轉換為整數並存入 number 變數中
numberLabel.text = "\(number)" // 將 number 的值轉換為字串並顯示在 numberLabel 上

// 迴圈從 1 到 number
for i in 1...number {
for j in 1...number {
if i != j {
content += "🍎" // 如果 i 不等於 j,則添加一個🍎到 content 變數中
} else {
content += "🍏" // 如果 i 等於 j,則添加一個🍏到 content 變數中
}
}
content += "\n" // 添加換行符到 content 變數中
}

label.text = content // 將 content 的值設定為 label 的文字內容
}
斜線改顏色

3.梅花座改顏色

這題關鍵是在找出奇數與偶數的差別,因此用%2==0 去思考。

@IBAction func changeApple(_ sender: UISlider) {
var content = "" // 初始化 content 變數為空字串
sender.value.round() // 將 sender 的值四捨五入
let number = Int(sender.value) // 將 sender 的值轉換為整數並存入 number 變數中
numberLabel.text = "\(number)" // 將 number 的值轉換為字串並顯示在 numberLabel 上

// 迴圈從 1 到 number
for i in 1...number {
for j in 1...number {
if (i + j) % 2 == 0 {
content += "🍎" // 如果 i+j 的結果是偶數,則添加一個🍎到 content 變數中
} else {
content += "🍏" // 如果 i+j 的結果是奇數,則添加一個🍏到 content 變數中
}
}
content += "\n" // 添加換行符到 content 變數中
}

label.text = content // 將 content 的值設定為 label 的文字內容
}
梅花座改顏色

進階題

  1. 從 segmented control 選擇形狀,有正方形,三角形,金字塔和菱形四種。
  2. 從 slider 改變數量。
範例

1.正方形

//正方形
func square() {
for _ in 1...number{
for _ in 1...number{
content += "🍎" // 在每一行中添加相應數量的 "🍎" 圖案
}
content += "\n" // 在每一行的結尾換行
}
label.text = content // 將正方形的內容設定為標籤(label)的文字內容,以在介面中顯示出來
}

2.三角形

//三角形
func triangle(){
for i in 1...number{
for _ in 1...i{
content += "🍎" // 在每一行中添加相應數量的 "🍎" 圖案
}
content += "\n" // 在每一行的結尾換行
}
label.text = content // 將三角形的內容設定為標籤(label)的文字內容,以在介面中顯示出來
}

3.金字塔

這題蠻直觀的,稍微觀察一下就能找出規律。

//金字塔
func pyramid(){
for i in 1...number{

for _ in i..<number {
content += "🥝" // 在每一層金字塔的左側加上 "🥝" 圖案
}

for _ in 1...2*i-1{
content += "🍎" // 在每一層金字塔的中央加上 "🍎" 圖案
}
content += "\n" // 在每一層金字塔的結尾換行
}
label.text = content // 將金字塔的內容顯示在標籤(label)上
}

4.菱形

這題當初思考了很久為什麼一個變數卻生出兩行,要用外圈去控制總行數,在觀察規律,到了 number 行之後開始反轉用 if 去寫。就讓 AI 逐行解釋,方便日後回來察看,關鍵在用分別的兩個變數去控制生成蘋果跟奇異果的數量。

  1. 首先,我們宣告了兩個變數 kiwiCountappleCount,並初始化它們的值。kiwiCount 的初始值為 number-1,而 appleCount 的初始值為 1。這些變數用於追蹤每一行中應該有多少個 "🥝" 和 "🍎"。
  2. 接下來,使用一個迴圈 for i in 1...number*2-1,來迭代每一行。
  3. 在每一行的迴圈內部,我們使用兩個嵌套的迴圈:

第一個迴圈 for _ in 0..<kiwiCount 用於將 "🥝" 加入到 content 字串中,迴圈執行 kiwiCount 次。

第二個迴圈 for _ in 1...appleCount 用於將 "🍎" 加入到 content 字串中,迴圈執行 appleCount 次。

4. 在兩個迴圈之後,我們檢查 i 是否小於 number。如果是,表示我們目前在菱形的上半部分,所以 kiwiCount 遞減 1,appleCount 增加 2,以便在下一行中印出更多的 "🍎"。

5. 如果 i 不小於 number,則表示我們已經到了菱形的下半部分 ( 第 number 行以後 ) 。這時,我們讓 kiwiCount 遞增 1,appleCount 遞減 2,以便在下一行中印出更少的 "🍎"。

func diamond() {
var kiwiCount = number - 1 // 初始化 kiwiCount 變數,其值為 number 減去 1
var appleCount = 1 // 初始化 appleCount 變數,其值為 1

// 迴圈從 1 到 number*2-1
for i in 1...number*2-1 {
// 添加 kiwiCount 個🥝到 content 變數中
for _ in 0..<kiwiCount {
content += "🥝"
}

// 添加 appleCount 個🍎到 content 變數中
for _ in 1...appleCount {
content += "🍎"
}

// 如果 i 小於 number
if i < number {
kiwiCount -= 1 // 減少 kiwiCount 的值
appleCount += 2 // 增加 appleCount 的值
} else {
kiwiCount += 1 // 增加 kiwiCount 的值
appleCount -= 2 // 減少 appleCount 的值
}

content += "\n" // 添加換行符到 content 變數中
}

label.text = content // 將 content 的值設定為 label 的文字內容
}

--

--