« 英語の勉強にお勧めなサイト | ホーム | サイト売却、購入のサイトM&Aについての俺なりの考え »

2008年5月 1日

PHPで世界のナベアツスクリプトを書いてみる

世界のナベアツのネタ

「3の倍数と3の付く数字のときだけアホになる」をPHPで書いてみる。

まずは40までの数字をループさせて表示させてみる。

 

for( $i = 1; $i <= 40; $i ++){

    echo $i . "<br>\n";

}

 

これで40までの数字が表示される。

このforで囲まれた部分をif文を使って3の倍数と3のつく数字を判断していく。

 

さて、3の倍数とは何か?これをプログラムで表現するにはどうしたらよいか?

3の倍数とは3で割り切れる数である。3で割った時に余りが0、つまりnullになるときである。

あまりを算出するときは演算子として「%」を使う。

 

if( $i % 3 == null){

    echo $i . "(あほ)<br>\n";

}

 

となる。

 

次に3のつく数字を判断していく。

数字文字列に「3」が含まれているかを調べるためには、eregという文字列関数を使って調べる。

$result = ereg( 3 , $num);

3が含まれていないと返り値としてfalseを返す。それを利用。

よってこんな感じ

 

if( ereg(3, $i) !== null)

 

「!==」で否定となる。つまりnullではない場合という条件文である。

 

さて、上記の二つを利用して作ってみる。

注意してほしいのは

 

if( $i % 3 == null){

    echo $i;

}

if( ereg(3, $i) !== null){

    echo $i;

}

としてはいけないということ。

例えば、3のとき、上記の例だと「3の倍数か」という条件と「3がついているか」という条件どちらにも当てはまってしまう。つまり2回評価されてしまう。

少なくともどちらか一方の条件に一致する場合というようにプログラムしなければならない。

なので、

 

if( $i % 3 == null or ereg(3, $i) !== null){

    echo $i;

}

 

となる。

まとめると、

 

<?php
for($i=1; $i<=40; $i++){


    if($i % 3 == null or ereg(3, $i) == true){
        echo $i . "(あほ)<br>";
    }else{
    echo $i . "...<br>";
    }


}

?>

となる。

elseで、条件に一致しない場合、つまりは1、2、4のような数字の表示を出力することも忘れずに。

 

さて、お気づきの通り、この問題はとても簡単です。

 

そこで、ちょっと難しくしてみたいと思う。

 

「5の倍数で犬になる」というナベアツの新ネタもプログラムしてみようと思う。

さっきのように、ただif文を使って条件を作っただけではいけない。

 

if(5の倍数か){

}

if(3の倍数 or 3がつく){

}

と書いてしまうと、

「15」の時にどちらも評価されてしまう。15は3の倍数であり5の倍数であるから。

 

なので、

if(5の倍数か){

    以下のプログラムを無視し、次のループに移る

}

if(3の倍数か or 3がつくか){

}

 

とすべきである。

次のループに移るには、continueを使う。私自身、そうなのだが、このcontinueはあまり使った経験がない。忘れている or 知らない人もいるのではないだろうか。

ちなみに、完全にループを脱出するにはbreakを使う。

 

まとめると、こんな感じです。

 

<?php
for($i=1; $i<=40; $i++){
 if($i % 5 ==null){
  echo $i . "(犬)<br>";
  continue;
 }
 if($i % 3 == null or ereg(3, $i) == true){
  echo $i . "(あほ)<br>";
 }else{
  echo $i . "...<br>";
 }
}

?>

トラックバック(0)

トラックバックURL: http://tatsuyakun.jp/mt/mt-tb.cgi/41

コメント(1)

PHPの課題でこの記事が参考になりました。
とてもわかりやすかったです。
ありがとうございました。
m(_ _)m

コメントする