#60 畫星星蘋果 — nested loop 練習

經典星星題 , 只是換成旁邊有放Emoji
  • 拉好分段式按鈕、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

--

--