swiftPractice[24]_迴圈練習(上)

nested loop 巢狀迴圈練習

--

消失這麼久就是卡在迴圈裡出不來了,難得完成一部分趕快上岸!😅

簡易練習項目:

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

IBOutlet & IBAction

 @IBOutlet weak var shapeSegments: UISegmentedControl!
@IBOutlet weak var textLabel: UILabel!
@IBOutlet weak var slider: UISlider!
@IBOutlet weak var countLabel: UILabel!

正方形

裡面的迴圈控制同一排的數量;外面控制有幾排

    func squareLoop(){
icon = ""
for _ in 1...count{
for _ in 1...count{
icon += "🌕"
}
//控制換行
icon += "\n"
}
textLabel.text = icon
}

三角形

每一排icon的個數遞增,數量剛好等於外層控制牌數迴圈的 i

 func triangleLoop(){
icon = ""
for i in 1...count{
for _ in 1...i{
icon += "🌺"
}
icon += "\n"
}
textLabel.text = icon
}

金字塔

金字塔本身用月亮🌕顯示,外圍用酪梨🥑,先分別建立各自的變數,然後在迴圈裡控制數量增減。

    func pyramid(){
icon = ""
var moon = 1
var avocado = count - 1
//外層控制行數,行數等於count個數
for i in 1...count{
for _ in 0..<avocado{
icon += "🥑"
}
for _ in 1...moon{
icon += "🌕"
}
//每換一行,酪梨少一個、月亮多兩個
avocado -= 1
moon += 2
icon += "\n"
}
textLabel.text = icon
}

菱形

跟金字塔的概念類似,但過了中線後圖案記數的方式會改變

    func diamond(){
icon = ""
let totalLines = count*2-1//總行數
var flowerCount = 1 //菱形
var moonCount = count - 1 //外圍

for i in 1...totalLines{
for _ in 0..<moonCount{
icon += "🌕"
}
for _ in 1...flowerCount{
icon += "🌺"
}
//中線之前
if i < count{
flowerCount += 2
moonCount -= 1
//中線之後
}else{
flowerCount -= 2
moonCount += 1
}
icon += "\n"
}
textLabel.text = icon
}

完整程式碼

import UIKit

class ViewController: UIViewController {
var icon = ""
var count = 1
@IBOutlet weak var shapeSegments: UISegmentedControl!
@IBOutlet weak var textLabel: UILabel!
@IBOutlet weak var slider: UISlider!
@IBOutlet weak var countLabel: UILabel!

override func viewDidLoad() {
super.viewDidLoad()
countLabel.text = "1"
}

func squareLoop(){
icon = ""
for _ in 1...count{
for _ in 1...count{
icon += "🌕"
}
icon += "\n"
}
textLabel.text = icon
}

func triangleLoop(){
icon = ""
for i in 1...count{
for _ in 1...i{
icon += "🌺"
}
icon += "\n"
}
textLabel.text = icon
}

func pyramid(){
icon = ""
var moon = 1
var avocado = count - 1
for i in 1...count{
for _ in 0..<avocado{
icon += "🥑"
}
for _ in 1...moon{
icon += "🌕"
}
avocado -= 1
moon += 2
icon += "\n"
}
textLabel.text = icon
}

func diamond(){
icon = ""
let totalLines = count*2-1
var flowerCount = 1 //中間
var moonCount = count - 1 //旁邊

for i in 1...totalLines{
for _ in 0..<moonCount{
icon += "🌕"
}
for _ in 1...flowerCount{
icon += "🌺"
}
if i < count{
flowerCount += 2
moonCount -= 1
}else{
flowerCount -= 2
moonCount += 1
}
icon += "\n"
}
textLabel.text = icon
}
//控制數量
@IBAction func adjustNumber(_ sender: UISlider) {
sender.value = sender.value.rounded()
count = Int(sender.value)
countLabel.text = "\(count)"

switch shapeSegments.selectedSegmentIndex{
case 0:
squareLoop()
case 1:
triangleLoop()
case 2:
pyramid()
default:
diamond()
}
}
//選擇形狀
@IBAction func selectSegment(_ sender: UISegmentedControl){
slider.setValue(0, animated: true)
countLabel.text = "1"
textLabel.text = ""
}
}

後記

為了for in loop 腦袋打結好一陣子,想通之後反而會忘記之前自己為什麼卡這麼久😂進階版本應該很快也可以寫完吧(?

作業出處:

GitHub

--

--

Tania
彼得潘的 Swift iOS / Flutter App 開發教室

A barista's journey transitioning into iOS development, documenting projects and learning experiences in a dedicated blog. 朝{ 咖啡師+工程師 } 努力中