%dって何?色々調べてみた
昨日、2ケタ✕2ケタの計算問題を作るプログラムをつくったら、コードについて早速突っ込まれました。
<?php
for($i = 1; $i <= 20; $i++) {
$a = rand(10, 99);
$b = rand(10, 99);
$ans[] = $a * $b;
printf("<p>(%02d) %d ✕ %d =</p>", $i, $a, $b);
}
echo implode(', ', $ans). '<br>';
?>
コードを作成してくださった方:iiOOii さん
また、変数a, b の記述についてはshiracamus さんに教えていただきました。
ありがとうございます。
僕のコードではforeachやifを使っていましたが、使わなくても記述ができるらしく。
教えてくださったコードについて色々調べてみました。
知らないコードばっかりでした笑
まだまだだな、と思い知らされます。
それもそのはず、まだ始めて1週間も経っていません。
ということで、知らないコードについて調べてみました。
- printf
- %d, %02d
- implode
ほぼ全部知らないわけですが笑、頑張って調べました。
ということで、自分用に一つずつまとめていきます。
printf
以下、php公式より引用したものです。
フォーマット済みの文字列を出力する
printf ( string $format , mixed ...$values ) : int
format にしたがって、出力を生成します。
これだけ見たところで何も分かりませんが、指摘されたコードで何となくわかってきました。
printf("<p>(%02d) %d ✕ %d =</p>", $i, $a, $b);
確かpythonの出力はprint
で表されるんですよね(phpはecho
)。それに近い形なので、これも出力に関係しているのかなと推測できました。
そしてこのprintf
は、出力変換指定子と言うそうです。出力形式を指定するときに使うらしい。
何となく分かってきました。
%d
printf
は解決したものの、次にぶち当たる壁が%d
。
printf("<p>(%02d) %d ✕ %d =</p>", $i, $a, $b);
この%d
、特に番号が割り振られていたりしないので「は?何この文字列」と首を傾げてしまいましたが笑、printf
を見るとわかりました。
- 一つ目の
%02d
は$i
- 二つ目の
%d
は$a
- 三つ目の
%d
は$b
を呼び出しているみたいです。
dの部分についても色々と調べてみました。
どうやら符号ありの10進数を示すそうです。
ほかにも、文字列を指定したいときは%s
を使うようですね。
%02dの「02」が表すもの
これは「0」「2」だけ、「20」と書いた場合などを調べてみましたが、
02で「数字を2ケタにそろえる」という意味っぽいです。
これで問題番号が1~9の場合は先頭に0がつくようになりました。
僕はこの処理をわざわざif構文で書いていたので笑、とても記述量が多くなっていました。
implode
こちらは調べると意外と簡単な関数でした。
implode(', '. $ans). '<br>';
これは$ans
(answersの略)のそれぞれの要素の間に,
をブチ込むという便利な代物です。
,
をおい
にしたら、ちゃんと情緒不安定なヤツみたいになります。
$ans = [506, 1260, 1764, 720]
implode('おい '. $ans). '<br>';
//出力結果
506おい 1260おい 1764おい 720
これ、凄いのが出力の最後がカンマで終わらないこと。
上の例で言ったら720
の後におい
がついていませんよね。
これはどこかで応用できそうです。
まとめ
以上の内容を踏まえて、コードをもう一度見直してみました。
<?php
for($i = 1; $i <= 20; $i++) {
$a = rand(10, 99);
$b = rand(10, 99);
$ans[] = $a * $b;
printf("<p>(%02d) %d ✕ %d =</p>", $i, $a, $b);
}
echo implode(', ', $ans). '<br>';
?>
とてもスッキリしていて気持ちがいい!
新しくプログラムを作るときは、なるべく記述量を節約していきたいなと思います。
繰り返しになりますが、教えてくださったiiOOii さん、shiracamus さん。ありがとうございました。
Author And Source
この問題について(%dって何?色々調べてみた), 我々は、より多くの情報をここで見つけました https://qiita.com/whiterusk/items/b6702049ca8e324aaabe著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .