この記事の練習問題で使用する知識:
PHPタグ、入力と出力、コメントの書き方、変数と定数、文字列、文字列の連結と埋め込み、乱数生成
Kotlinのゲームコード一覧はこちら(準備中)
<<前のページ | PHP記事一覧 |
次のページ>> |
確認問題:ユーザー名を基に安全なパスワードを作成するプログラムを作成しよう
新規登録時にユーザー名を基にランダムなパスワードを生成するPHPプログラムを作成しましょう。
このプログラムではユーザー名を入力し、その先頭4文字と4桁のランダムな数字を組み合わせてパスワードを生成します。
最後に、入力されたユーザー名と生成されたパスワードを表示します。
この問題の要件
以下の要件に従ってコードを完成させてください。
- 標準入力を使用してユーザー名を取得すること。
- ユーザー名の先頭4文字を取得し、変数
$passName
に保存すること。 - 4桁のランダムな数値を生成し、変数
$numPass
に保存すること。 $passName
と$numPass
を連結し、ランダムパスワードを作成すること。- ユーザー名と生成されたパスワードを画面に表示すること。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください: Alice ランダムなパスワードを作成しました。 ユーザー名:Alice パスワード:Alic1234
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)
1:「新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:」と出力
2:標準入力から値を取得し、trim関数で前後の空白を除去して変数$nameに代入
3:substr関数で変数$nameの先頭4文字を取得し、変数$passNameに代入
4:rand関数で0から9999の乱数を生成し、str_pad関数で4桁にゼロ埋めして変数$numPassに代入
5:変数$passNameと変数$numPassを連結して変数$passに代入
6:「ランダムなパスワードを作成しました。」と出力
7:「ユーザー名:」と変数$nameの値を出力
8:「パスワード:」と変数$passの値を出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
<?php // 1. 新規登録メッセージを表示 echo "新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:" . PHP_EOL; // 2. ユーザー名を入力し、変数$nameに保存 /*【穴埋め問題1】 ここに標準入力から値を取得し、trim関数で前後の空白を除去して変数$nameに代入するコードを書いてください。 */ // 3. $nameの先頭4文字を取得し、変数$passNameに保存 /*【穴埋め問題2】 ここにsubstr関数で$nameの先頭4文字を取得し、変数$passNameに代入するコードを書いてください。 */ // 4. 4桁の乱数を生成し、変数$numPassに保存 /*【穴埋め問題3】 ここにrand関数を使用して0から9999の乱数を生成し、str_pad関数で4桁にゼロ埋めして$numPassに代入するコードを書いてください。 */ // 5. $passNameと$numPassを連結して、変数$passに保存 /*【穴埋め問題4】 ここに$passNameと$numPassを連結して$passに代入するコードを書いてください。 */ // 6. ランダムなパスワード生成完了メッセージを表示 echo "ランダムなパスワードを作成しました。" . PHP_EOL; // 7. ユーザー名とパスワードを表示 echo "ユーザー名:$name" . PHP_EOL; echo "パスワード:$pass" . PHP_EOL;
この問題の穴埋めコードは以上です。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
〇〇ゲームの正解コードと解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
<?php // 1. 新規登録メッセージを表示 echo "新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:" . PHP_EOL; // 2. ユーザー名を入力し、変数$nameに保存 $name = trim(fgets(STDIN)); // 3. $nameの先頭4文字を取得し、変数$passNameに保存 $passName = substr($name, 0, 4); // 4. 4桁の乱数を生成し、変数$numPassに保存 $numPass = str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT); // 5. $passNameと$numPassを連結して、変数$passに保存 $pass = $passName . $numPass; // 6. ランダムなパスワード生成完了メッセージを表示 echo "ランダムなパスワードを作成しました。" . PHP_EOL; // 7. ユーザー名とパスワードを表示 echo "ユーザー名:$name" . PHP_EOL; echo "パスワード:$pass" . PHP_EOL;
正解コードの解説
このコードはユーザー名を基にランダムなパスワードを生成するプログラムです。
以下にコードの各部分を説明していきます。
ユーザー名の入力
echo "新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:" . PHP_EOL; $name = trim(fgets(STDIN));
echo
は、メッセージを表示するためのPHPの基本的な関数です。この行ではユーザーにユーザー名の入力を促しています。fgets(STDIN)
は標準入力から1行のデータを読み取ります。trim()
は入力された文字列の前後の不要なスペースや改行を取り除きます。
ユーザー名の先頭4文字を取得
$passName = substr($name, 0, 4);
substr()
は文字列から指定した部分を切り取る関数です。この場合ユーザー名の先頭4文字を取り出しています。0
は開始位置、4
は切り取る文字数を指定しています。
4桁のランダムな数字を生成
$numPass = str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT);
rand(0, 9999)
は、0から9999の間でランダムな整数を生成します。str_pad()
は、文字列を指定した長さになるように埋め合わせを行います。この場合、4桁になるまで左側に0
を追加します。
パスワードを生成
$pass = $passName . $numPass;
.
はPHPの文字列結合演算子です。
ユーザー名の先頭4文字と4桁の数字を結合して、パスワードを生成します。
結果の表示
echo "ランダムなパスワードを作成しました。" . PHP_EOL; echo "ユーザー名:$name" . PHP_EOL; echo "パスワード:$pass" . PHP_EOL;
echo
を使って生成したパスワードとユーザー名を画面に表示します。$name
や$pass
は、それぞれ変数に格納された値を出力します。
まとめ
このコードは文字列操作(substr
、str_pad
)やランダムな数値生成(rand
)を学ぶのに最適です。
またユーザーの入力を利用し、動的に結果を生成する方法を体験できます。
コードを手元で実行し動作を確認することで、PHPの基本を楽しく学ぶことができます!
Kotlinのゲームコード一覧はこちら(準備中)
<<前のページ |
PHP記事一覧 |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。