作業#29 — 畫星星蘋果 — nested loop(巢狀迴圈) 練習

目的: 學習使用 for 迴圈。

作業來源:

基本題

  1. 畫 2 種 Apple,比方有紅色跟綠色。
範例

A. 底線

    @IBAction func changeApple(_ sender: UISlider) {
var content = ""
sender.value = sender.value.rounded()
let row = Int(sender.value)
numberLabel.text = "\(row)"


for i in 1...row {
if i <= row-1 {
for _ in 1...row {
content.append("🍎")
}
} else {
for _ in 1...row {
content.append("🍏")
}
}
content.append("\n")
}
appleLabel.text = content
}

B. 對角線

    @IBAction func changeApple(_ sender: UISlider) {
var content = ""
sender.value = sender.value.rounded()
let row = Int(sender.value)
numberLabel.text = "\(row)"


for i in 1...row {
for j in 1...row {
if i != j {
content.append("🍎")
} else {
content.append("🍏")
}
}
content.append("\n")
}
appleLabel.text = content
}

C. 棋盤格

    @IBAction func changeApple(_ sender: UISlider) {
var content = ""
sender.value = sender.value.rounded()
let row = Int(sender.value)
numberLabel.text = "\(row)"


for i in 1...row {
for j in 1...row {
if (i+j) % 2 == 0 {
content.append("🍎")
} else {
content.append("🍏")
}
}
content.append("\n")
}
appleLabel.text = content
}

進階題

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

A. 正方形

範例
    @IBAction func changeApple(_ sender: UISlider) {

var content = ""

sender.value = sender.value.rounded()
let row = Int(sender.value)
numberLabel.text = "\(row)"
for _ in 1...row {
for _ in 1...row {
content += "🍎"
}
content += "\n"
}
appleLabel.text = content
}

B. 三角形

範例
    @IBAction func changeApple(_ sender: UISlider) {
var content = ""
sender.value = sender.value.rounded()
let row = Int(sender.value)
numberLabel.text = "\(row)"
for i in 1...row {
for _ in 1 ... i {
content += "🍎"
}
content += "\n"
}
appleLabel.text = content
}

C. 金字塔

範例
    @IBAction func changeApple(_ sender: UISlider) {
var content = ""
sender.value = sender.value.rounded()
let row = Int(sender.value)
numberLabel.text = "\(row)"
for i in 1...row {
// 避免 lowerBound > upperBound
if row > i {
for _ in 1...(row-i) {
content += "🥝"
}
}
for _ in 1 ... 2*i-1 {
content += "🍎"
}
content += "\n"
}
appleLabel.text = content
}

*參考 Peter 的解答後,發現 //避免 lowerBound > upperBound 這一段更好的寫法是使用 ..<

//我原本的答案:
if row > i {
for _ in 1...(row-i) {
content += "🥝"
}
}

//Peter 的解答:
for _ in i..<count {
content += "🥝"
}

D. 菱形

範例
    @IBAction func changeApple(_ sender: UISlider) {
var content = ""
sender.value = sender.value.rounded()
let row = Int(sender.value)
numberLabel.text = "\(row)"
for i in 1...2*row-1 {
// 避免 lowerBound > upperBound
if row > i {
for _ in 1...(row-i) {
content += "🥝"
}
} else if i > row {
for _ in 1...(i-row) {
content += "🥝"
}
}

if i <= row {
for _ in 1 ... 2*i-1 {
content += "🍎"
}
} else {
for _ in 1 ... (2*(2*row-i)-1) {
content += "🍎"
}
}
content += "\n"
}
appleLabel.text = content
}

*同參考 Peter 的解答後,發現更好的寫法可以先假設兩個變數 奇異果總數app蘋果總數,兩個分別的變動為 遞減1/遞增1遞增2/遞減2

//Peter 的解答:
var content = ""
let count = 5
var greenCount = count - 1
var appleCount = 1
for i in 1...count*2-1 {
for _ in 0..<greenCount {
content += "🍏"
}
for _ in 1...appleCount {
content += "🍎"
}
if i < count {
greenCount -= 1
appleCount += 2
} else {
greenCount += 1
appleCount -= 2
}

content += "\n"
}

E. 每排顯示不同圖案,搭配 array。

範例

a. 三角形

    let emoji = ["","🧛‍♀️","👻","🎅","🧙‍♀️","🦸‍♀️"]

@IBAction func changeApple(_ sender: UISlider) {
var content = ""
sender.value = sender.value.rounded()
let row = Int(sender.value)
numberLabel.text = "\(row)"


for i in 1...row {
for _ in 1...i {
content.append(emoji[i])
}
content.append("\n")
}
appleLabel.text = content
}

b. 正方形

    let emoji = ["","🧛‍♀️","👻","🎅","🧙‍♀️","🦸‍♀️"]

@IBAction func changeApple(_ sender: UISlider) {
var content = ""
sender.value = sender.value.rounded()
let row = Int(sender.value)
numberLabel.text = "\(row)"


for i in 1...row {
for _ in 1...row {
content.append(emoji[i])
}
content.append("\n")
}
appleLabel.text = content
}

--

--