ログイン

問題2 サイコロを振ろう

PHPの問題

PHP

サイコロを振ろう

問題

8面ダイスを1000回振って各出目の確率を画面に表示しよう
(割り切れない場合は小数第2位を四捨五入)

期待する画面

1: 15.6%
2: 14.0%
3: 12.4%
4: 10.8%
5: 12.2%
6: 11.0%
7: 12.1%
8: 11.9%
※実行する度に変わります
コードのアイコン

解答ソースコード

              define('DICE_MIN', 1);
define('DICE_MAX', 8);
define('DICE_TRY', 1000);
$list = [];
// (a)サイコロの出目を初期化する
for ($i = DICE_MIN; $i <= DICE_MAX; $i++) {
    $list[$i] = 0;
}
// (b)サイコロを振り出目を記録する
for ($i = 1; $i <= DICE_TRY; $i++) {
    $r = rand(DICE_MIN, DICE_MAX);
    $list[$r]++;
}
// (c)サイコロの出目の確率を計算する
foreach ($list as $key => $val) {
    $a = round($val / DICE_TRY * 100, 2);
    $v = sprintf("%.1f", $a);
    echo "{$key}: {$v}%<br>";
}
// (d)おまけ
print_r($list);
¥PHP¥
            
答えのアイコン

解説

defineは定数を定義する機能だ。
プログラム中に仕様に使う数値や文字が現れると後からソースコードを見直したときに混乱するぞ。
マジックナンバーは定数化することにより保守性が高まる。
チーム開発では必須だ。

まず(a)でサイコロの出目を管理する配列を初期化している。
ループの開始値と終了値に定数を使うことによって無理なく初期化できている。

次に(b)において定数に定義した試行回数の数だけサイコロを振っている。
rand関数は引数の範囲内の乱数を返す。
乱数とはランダムな値のことだ。

最後に(c)で各出目の平均値を計算して画面に出力している。
roundは四捨五入、sprintfは文字列を整形する関数だ。

listがどのようになっているか理解できなければ(d)のおまけを実行してほしい。
配列を展開して視覚的に確認することができる。
print_rは配列のデバッグに使えるので覚えておこう。
ログインして解答を見る
完了にする!
1.PHPについての説明と表示
続きの動画を見たい方は公式LINEから「PHP」と送信すると動画が見れます。
LINEの友達追加でお役立ち動画をGET!!