swiftPractice[24]_迴圈練習(上)
nested loop 巢狀迴圈練習
Published in
7 min readFeb 6, 2024
消失這麼久就是卡在迴圈裡出不來了,難得完成一部分趕快上岸!😅
簡易練習項目:
- 從 segmented control 選擇形狀,有正方形,三角形,金字塔和菱形四種
- 從 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