#60 畫星星蘋果 — nested loop 練習
- 拉好分段式按鈕、Slider 元件以及Label
- 利用分段式按鈕的編號以及Switch 語法來比對相對應要呈現的圖形
正方形
(1-1) 一般正方形
使用 for-in 迴圈來遍歷一段區間內的所有元素 (例如數字區間、陣列中元素)
如此範例 , 1是這一個區間的第一個值, 透過Slider 獲得結束迴圈的值 .
只要值有在這個範圍內 ,迴圈{}內的程式碼都會被執行一次。
for _ in 1 … sliderNum{
labelPic += “🍎”
}
所以上述範例是先畫一行的蘋果數量(SliderNum即是蘋果數量) ,
然後再寫一次迴圈, 這次迴圈是來決定要畫幾行
總行數跟單行的數量相同就會呈現正方形,另外記得字串要用 "\n"來換行
(1–2) 正方形, 但要依照Slider來換最後一行的顏色
IdenNum 為 迴圈範圍 , rowNum 來儲存Slider 數值
利用迴圈範圍除於餘數的方式來判斷要上哪一個顏色
為何用餘數判斷 ?
因為同數值互相整除後 餘數一定為0 , 並且最後一行是範圍終點及Slider最終值
(1-3) 隨各行數編號來更換相對應行數的單一顏色
這題比較單純 , 判斷換色的方式就是確認 各行數的編號與相對應的單行的編號是否有符合
(1–4) 相間的正方圖形
範例相間圖樣的規則:
奇數行的綠色蘋果在偶數編號上 , 偶數行的綠色蘋果在奇數編號上
利用除2取餘數 :偶數除2都會被整除餘數為0 , 奇數除2餘數都會是1
先判斷對應的行數是奇數行還是偶數行, 在利用規則將相間圖案畫上
三角形
(2–1) 正三角形
此範例的一般三角形規則為
在每增加1行時, 所增加那一行的蘋果數是上一行的蘋果數 +1
所以在畫完一行的蘋果數後, 會先+1 , 來符合下一行的蘋果總數
(2–2) 倒三角形
與上述的方法差不多 , 差別只在
正三角形是隨著行數遞增數量 , 而倒三角形是遞減
所以取第一行所要畫的數值就會是Slider 的數值 , 然後再進行遞減
(3) 金字塔圖形
金字塔分成紅蘋果跟綠蘋果的部分
紅蘋果的動作很單純, 就是每增加一行就多兩個蘋果
綠蘋果的安插規則是遞減,
但在 for.. in 迴圈 , 起始值一定要大於終值 , 所以不能一開始直接做遞減
故要在做另外處理過才能遞減, 處理之前來先看規則 :
除了最後一行不增加綠蘋果外. 每增加一行, 上面一行的綠蘋果就+1顆
比如有三行 : 第一行有兩顆綠蘋果, 第二行有一顆綠蘋果, 第三行沒有
所以我們先設個變數處理依照行數來處理相對應數量的蘋果,
並且要確定至少有一顆綠蘋果才畫 (避免起始值小於終值的問題)
另外透過處理所得的值 , 可以得到遞減的數值 .
這時候就能用遞減的數值, 將綠蘋果畫上
(4) 菱形
畫菱形前, 看到的規則 :
1. 菱形行數一定為奇數
2. 所以我分上下2部分
3. 上半三角比下半三角多一行 , (多的那行就是對稱行)
依照上述規則 , 取上半三角的行數 就是將(總行數+1)/2
這樣就能取到總行數的正中間值
同樣的道理下半三角的行數 就是將(總行數-1)/2
另外正中間值就是你所拉的Slider 值
上半部的綠色蘋果的增加方式與金字塔增加的方式相同
另外在中間行之後就不會有遞增紅蘋果(遞減綠蘋果)的情形, 所以用判別式來檢查是否到了中間行
下半的紅蘋果是遞減 , 在畫上半圖形時沒有遞減 , 於是先做一次遞減的動作
另外要判斷 SliderNum 要大於1才能畫下半圖形
為何判斷 SliderNum 要大於1?
一來SliderNum 沒大於1根本畫不了上下對稱的圖形
二來 , 我們算行數時是透過Slider 的關係
若Slider = 1 , 總行數 : 2*1 -1 = 1 下半行 = (1-1)/2 = 0