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 的文字內容
}
進階題
- 從 segmented control 選擇形狀,有正方形,三角形,金字塔和菱形四種。
- 從 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 逐行解釋,方便日後回來察看,關鍵在用分別的兩個變數去控制生成蘋果跟奇異果的數量。
- 首先,我們宣告了兩個變數
kiwiCount
和appleCount
,並初始化它們的值。kiwiCount
的初始值為number-1
,而appleCount
的初始值為 1。這些變數用於追蹤每一行中應該有多少個 "🥝" 和 "🍎"。 - 接下來,使用一個迴圈
for i in 1...number*2-1
,來迭代每一行。 - 在每一行的迴圈內部,我們使用兩個嵌套的迴圈:
第一個迴圈 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 的文字內容
}