綜合練習

威力彩電腦選號

實作不重複隨機數演算法,確保每一組選號符合邏輯規範。

不重複電腦選號

【題目需求】
  • 使用亂數函式 rand($a, $b) 來產生號碼
  • 將產生的號碼順序存入陣列中
  • 每次存入前先檢查陣列資料是否重複 (in_array)
  • 完成選號後將陣列內容印出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
// 【程式碼練習】
// 在此處呈現練習思路及程式碼內容

$lotto=[];
// 1. 初始化空陣列(從零開始)
// 2. 進入迴圈:只要數量少於 6 就重複執行

while(count($lotto)<6){
    // count():項目總數
    // 隨機取號
    $tmp=rand(1,38);
    // rand(1, 38): PHP 的隨機數產生。第一個參數 1 是最小值。第二個參數 38 是最大值。
    // $tmp:這是一個暫存變數  

      echo '這是$tmp:' . "$tmp," . '<br>';
    if(!in_array($tmp,$lotto)){
        // !in_array檢查$tmp是不是已經在$lotto裡面(有沒有重複)
        $lotto[]=$tmp;
        // 沒有在$lotto[]裡面 就放進去$lotto[]
        
        
        // 如果寫if(in_array($tmp,$lotto)){
            //     如果在裡面就???? 
            //     }else{
                //         $lotto[]=$tmp;
                // }
                //if ture沒有明確指令在裡面 所以在判斷式加!反轉 不用else
        echo nl2br(print_r($lotto, true));
    }
}
echo "<hr>";
foreach($lotto as $num){
    echo '這是$num' . "$num,";
}

靜態頁不執行 PHP,完整亂數輸出請開啟 12-pra08.php。下方為單次執行示意。

這是$tmp:19,<br>
Array
(
    [0] => 19
)
這是$tmp:5,<br>
Array
(
    [0] => 19
    [1] => 5
)
…(略,直到陣列有 6 個號碼)
────────────────
這是$num19,這是$num5,這是$num…,

【學習重點】

  • 流程總結:
    • 迴圈條件:while (count($lotto) < 6),湊滿 6 個號碼才結束。
    • 隨機取號:每次 rand(1, 38) 產生一個暫存 $tmp
    • 擋重複:!in_array($tmp, $lotto) 為真才表示這個號還沒出現過。
    • 寫入陣列:通過檢查後執行 $lotto[] = $tmp
    • 細節見上方程式註解。
  • if 與 while 的差別
    • if(只執行一次):
      它像是一個路口警衛。當你經過時,他檢查你的證件(條件),符號就讓你進去走一次,不符合就叫你繞路走。他不會抓著你叫你重複走。
    • while(重複執行直到不符):
      它像是一個迴圈操場。當你符合條件時,他會叫你進去跑一圈。跑完後,他會立刻把你抓回起點再檢查一次條件。只要條件還成立,你就要一直跑下去,直到你死去為止。