- ベストアンサー
パールスクリプトのif else文について
y_okuの回答
あまり単純な計算式にはできないようですね。 配列で……ってのは忘れてください。 んで、 > #例えば1950年1月1日ならば「金星はみずがめ、火星はやぎ」 と表示したいだけならば、 $horoscopeに代入しているところを、 例えば金星なら$venus、火星なら$marsに代入しておいて、 >print "「金星は$venus、火星は$mars」"; と出力すればよいのではないでしょうか。 判定する部分を関数に切り出してみました。(長くてすんません) 'しし'や'みずがめ'などを返すようにして、 そのまま表示に使えるようにしてあります。 老婆心ながら判定とコメントに矛盾があるところにコメントしてあります。 ------------------------------------------------------- #以下1950年の1月~12月の金星のデータとする sub get_venus_data{ local($year,$month,$day)=@_; local($horoscope)='undef'; if($year==1950){ if($month<=3 || ($month==4 && $day<=6)){ # ~4月の6日以下ならば $horoscope = 'みずがめ'; # みずがめ座 }elsif($month==4 || ($month==5 && $day<=5)){ # 4月の残り~5月の5日以下ならば $horoscope = 'うお'; # うお座 }elsif($month==5 || ($month==6 && $day<=1)){ # 5月の残り~6月の1日以下ならば $horoscope = 'おひつじ'; # おひつじ座 }elsif($month==6 && $day<=27){ # 6月の残り~6月の27日以下ならば(6月2日以上かつ27日以下) $horoscope = 'おうし'; # おうし座 }elsif($month==6 || ($month==7 && $day<=22)){ # 6月の28日以上~7月の22日以下ならば $horoscope = 'ふたご'; # ふたご座 }elsif($month==7 || ($month==8 && $day<=16)){ # 7月の残り~8月の16日以下ならば $horoscope = 'かに'; # かに座 }elsif($month==8 || ($month==9 && $day<=9)){ # 8月の残り~9月の9日以下ならば $horoscope = 'しし'; # しし座 }elsif($month==9 || ($month==10 && $day<=4)){ # 9月の残り~10月の4日以下ならば $horoscope = 'おとめ'; # おとめ座 }elsif($month==10 && $day<=28){ # 10月の残り~10月の28日以下ならば(10月5日以上かつ28日以下) $horoscope = 'てんびん'; # てんびん座 }elsif($month==10 || ($month==11 && $day<=20)){ # 10月の29日以上~11月の20日以下ならば $horoscope = 'さそり'; # さそり座 }elsif($month==11 || ($month==12 && $day<=14)){ # 11月の残り~12月の14日以下ならば $horoscope = 'いて'; # いて座 }elsif($month==12){ # 12月の残り~12月の31日以下ならば $horoscope = 'やぎ'; # やぎ座 } } return $horoscope; } #以下1950年の1月~12月の火星のデータとする sub get_mars_data{ local($year,$month,$day)=@_; local($horoscope)='undef'; if($year==1950){ if($month==1 && $day<=8){ # ~1月の8日以下ならば $horoscope = 'やぎ'; }elsif($month==1){ # 1月の残りならば $horoscope = 'みずがめ'; }elsif($month==2 && $day<=24){ # ~2月の24日以下ならば $horoscope = 'うお'; }elsif($month==2 || ($month==3 && $day<=21)){ # 4月の残り~5月の5日以下ならば # ☆コメントと判定が違ってるよ。 $horoscope = 'おひつじ'; }elsif($month==3 || ($month==4 && $day<=15)){ # 3月の残り~4月の15日以下ならば $horoscope = 'おうし'; }elsif($month==4 || ($month==5 && $day<=10)){ # 4月の残り~5月の10日以下ならば $horoscope = 'ふたご'; }elsif($month==5 || ($month==6 && $day<=7)){ # 5月の残り~6月の7日以下ならば $horoscope = 'かに'; }elsif($month==6 || ($month==7 && $day<=8)){ # 6月の残り~7月の8日以下ならば $horoscope = 'しし'; }elsif($month<=10 || ($month==11 && $day<=9)){ # 7月の残り~11月の9日以下ならば # ☆コメントと判定が違ってるよ。 $horoscope = 'おとめ'; }elsif($month==11 || ($month==12 && $day<=7)){ # 11月の残り~12月の7日以下ならば $horoscope = 'てんびん'; }elsif($month==12){ # 12月の残りならば $horoscope = 'さそり'; } } return $horoscope; } # 入力から金星と火星の星座を求める。 $vinus = get_vinus_data($in{'year'}, $in{'month'}, $in{'day'}); $mars = get_mars_data($in{'year'}, $in{'month'}, $in{'day'}); print "金星は$vinus、火星は$mars"; -------------------------------------------------------
関連するQ&A
- else if文の順序を変えることに意味がありますか?
else if文の順序を変えることに意味がありますか? 「スプライトに記述したクリップアクションです。 実行される内容はどうでも良いのですが、 else if文の順序を変えることに意味がありますか?」 ×(2)の部分だけが実行されません。 onClipEvent (enterFrame) { if (_root.get_tabaco == false ){ this.gotoAndPlay(4); (1) }else if(_root.get_tabaco ==true){ this.gotoAndPlay(1); (2) }else if(_root.state_tabaco == 2){ this.gotoAndPlay(5); } } ○全て実行されます。 onClipEvent (enterFrame) { if (_root.get_tabaco == false ){ this.gotoAndPlay(4); (2) }else if(_root.state_tabaco == 2){ this.gotoAndPlay(5); (1) }else if(_root.get_tabaco ==true){ this.gotoAndPlay(1); } } 「(1)と(2)の順序を変えただけで正しく実行されるようになりました。 しかし、なぜ?上手くいったのか、どこが間違いなのか分かりません。 else ifに順序なんかあるんでしょうか? こられのスクリプトに違いがありましたら、教えていただけませんか?」
- ベストアンサー
- Flash
- シェルスクリプトのif文
シェルスクリプトのif文について質問です。 あるファイルが存在しないときだけ処理を行いたい場合、 下記のような記述をするしかないのでしょうか? if [ -e /tmp/test.txt ]; then ダミー処理(val1=1など意味のない処理) (ダミー処理を入れるのは何も書かないとエラーとなってしまうため) else 行いたい処理 fi elseを使わずに if fi だけですますことはできないでしょうか? -eはファイルが存在するならば真なので 逆に意味が真となるようにしたいのですが・・・
- ベストアンサー
- その他(プログラミング・開発)
- 条件文でelseはつけるべき?
if文で条件文を作るときに、どういう風に作れば最適なのか考えています。 「男」か「女」かを判断する時のif文として、データ的にどちらかしかないので、以下のようになると思います。 --------------------------- if 「男」 { 処理1 } else if 「女」 { 処理2 } --------------------------- 仕様的にもどちらかしかないのですが、こういう場合でもelseを付けた方が良いのでしょうか? --------------------------- if 「男」 { 処理1 } else if 「女」 { 処理2 } else { エラー処理 } --------------------------- 後々の仕様変更で、判断できない場合は「不明」などが追加される可能性もあると思います。 その場合に、仕様変更に対応してないとエラー処理が動くようにしておくべきでしょうか? みなさんは、必ずelseを書いてますか?
- ベストアンサー
- その他(プログラミング・開発)
- if文でelseが実行されない
function jump(){ if (point_x != ""){ location.href="new_diary.php?x="+point_x+"&y="+point_y; } else { alert ("場所をダブルクリックで指定してください。"); } } このような文で、point_x != ""のときは別ページに飛んでくれるのですが、 elseのときにアラートが表示してくれません。 初歩的な質問だと思いますが、宜しくお願いします。
- 締切済み
- JavaScript
- ネストしない複数のif文でelseは必要でしょうか
if文についての疑問を質問させてください。 if文はelseを挟むことで複数指定したり入れ子にしたりして使えますが、 elseを未入力で下記のように複数指定することは問題があるのでしょうか。 また、このように24個のifを並べるという書き方はよろしくないものなのでしょうか。 <script type="text/javascript"> (function() { var image_obj = new Image(); image_obj.src = "../image/"; var jikan_obj = new Date(); var htime = jikan_obj.getHours(); if(htime==0){alert('日が変わりました');} if(htime==1){alert('夜中です');} if(htime==2){alert('2時です。');} if(htime==3){alert('真夜中です');} if(htime==4){alert('もうじき朝です');} if(htime==5){alert('新聞が届きました');} if(htime==6){alert('朝です');} if(htime==7){alert('忙しいです');} //これが23まで続きます。 if(htime==23){alert('もうじき日が変わります');} })(); </script>
- ベストアンサー
- JavaScript
- 「for next」文と「if then else」文
両方とも「くり返し」をさせるものですけど、 for nextにできてif then elseにできないことって ありますでしょうか? 僕は無いと思うのです。 その理由は for next文は等差数列に関係したくり返しをさせるものであり if then else文は等差数列とは関係の無い繰り返しもできるし、等差数列に関係あるくり返しもできるからです。 for nextの「等差数列に関係のあるくり返し」とは 例えば for i=1 to 100 step 2 のような場合、 これは、初項1、公差2、末項100 の等差数列を用意したことを意味しますよね? つまりfor next文では「等差数列を使ったくり返し」しか出来ないのに対し、 if then else文は等差数列に関係なく、「一般的なくり返し」が出来るものだと思うのです。 つまり、for next文は存在理由が無いと思うのです。 こういう理解であっていますでしょうか? よろしくおねがいします。
- ベストアンサー
- その他(プログラミング・開発)
- シェルスクリプト(if文)
引数で指定されたファイルがあるばあい、ファイルの末尾5行を表示し、ない場合は「ファイルパス in not found」と表示されるシェルスクリプトを作成したい。 それで偽のときのの実行結果がうまくいきません。 どこを修正すればいいでしょうか? 回答の程宜しくお願い致します。 実行結果 [root@Manabe root]# . filefile /etc/pass tail: /etc/pass: そのようなファイルやディレクトリはありません ソース #!/bin/bash if [ -f$1 ];then tail -5 $1 else echo "$1 in not found" fi
- ベストアンサー
- Linux系OS
- 以降のスクリプトを実行せずに終わるシェルスクリプトの書き方
Linux上で動かす以下のようなシェルスクリプトを作っています。 ▼------------------------------- if [ -d /home/aaa ]; then 処理1 else 処理2 fi 処理3 ▲------------------------------- この場合、/home/aaaが存在するかどうかに関わらず、 「処理3」は実行されてしまいます。 これを、 「/home/aaaが存在しない場合は処理2を行ってからスクリプトを終了する」 といった内容にしたいです。 現状はそれの書き方が見つからないので、処理1の次の行に処理3を書き込んで同じ結果にしています。 (そのためどんどんif文の階層が深くなり、全ての記述がif文の中に入っていく・・・) エクセルのVBAで言うところの、Exit Sub に該当する記述が理想的です。 そのような書き方がありましたら教えてください。
- ベストアンサー
- Linux系OS
補足
ご丁寧なご説明を本当にありがとうございます。 早速教えて頂いた式を使わせていただきました。 htmlタグを埋め込んで表示させようとしたのですが、 うまく表示してくれません。 私の追加した文のどこがいけないのでしょうか? たびたびお手数おかけしてしまって大変恐縮ですが 添削してやって下さい、よろしくお願いします。 #!/usr/local/bin/perl # ↑(ローカルサーバーで試用中) require 'cgi-lib.pl'; # ライブラリ読み込み。 &ReadParse; # フォーム取り込み。 #以下1950年の1月~12月の金星のデータとする sub get_venus_data{ local($year,$month,$day)=@_; local($horoscope)='undef'; if($year==1950){ if($month<=3 || ($month==4 && $day<=6)){ # ~4月の6日以下ならば $horoscope = 'みずがめ'; # みずがめ座 }elsif($month==4 || ($month==5 && $day<=5)){ # 4月の残り~5月の5日以下ならば $horoscope = 'うお'; # うお座 }elsif($month==5 || ($month==6 && $day<=1)){ # 5月の残り~6月の1日以下ならば $horoscope = 'おひつじ'; # おひつじ座 }elsif($month==6 && $day<=27){ # 6月の残り~6月の27日以下ならば(6月2日以上かつ27日以下) $horoscope = 'おうし'; # おうし座 }elsif($month==6 || ($month==7 && $day<=22)){ # 6月の28日以上~7月の22日以下ならば $horoscope = 'ふたご'; # ふたご座 }elsif($month==7 || ($month==8 && $day<=16)){ # 7月の残り~8月の16日以下ならば $horoscope = 'かに'; # かに座 }elsif($month==8 || ($month==9 && $day<=9)){ # 8月の残り~9月の9日以下ならば $horoscope = 'しし'; # しし座 }elsif($month==9 || ($month==10 && $day<=4)){ # 9月の残り~10月の4日以下ならば $horoscope = 'おとめ'; # おとめ座 }elsif($month==10 && $day<=28){ # 10月の残り~10月の28日以下ならば(10月5日以上かつ28日以下) $horoscope = 'てんびん'; # てんびん座 }elsif($month==10 || ($month==11 && $day<=20)){ # 10月の29日以上~11月の20日以下ならば $horoscope = 'さそり'; # さそり座 }elsif($month==11 || ($month==12 && $day<=14)){ # 11月の残り~12月の14日以下ならば $horoscope = 'いて'; # いて座 }elsif($month==12){ # 12月の残り~12月の31日以下ならば $horoscope = 'やぎ'; # やぎ座 } } return $horoscope; } #以下1950年の1月~12月の火星のデータとする sub get_mars_data{ local($year,$month,$day)=@_; local($horoscope)='undef'; if($year==1950){ if($month==1 && $day<=8){ # ~1月の8日以下ならば $horoscope = 'やぎ'; }elsif($month==1){ # 1月の残りならば $horoscope = 'みずがめ'; }elsif($month==2 && $day<=24){ # ~2月の24日以下ならば $horoscope = 'うお'; }elsif($month==2 || ($month==3 && $day<=21)){ # 2月の残り~3月の21日以下ならば $horoscope = 'おひつじ'; }elsif($month==3 || ($month==4 && $day<=15)){ # 3月の残り~4月の15日以下ならば $horoscope = 'おうし'; }elsif($month==4 || ($month==5 && $day<=10)){ # 4月の残り~5月の10日以下ならば $horoscope = 'ふたご'; }elsif($month==5 || ($month==6 && $day<=7)){ # 5月の残り~6月の7日以下ならば $horoscope = 'かに'; }elsif($month==6 || ($month==7 && $day<=8)){ # 6月の残り~7月の8日以下ならば $horoscope = 'しし'; }elsif($month<=10 || ($month==11 && $day<=9)){ # 10月の残り~11月の9日以下ならば$horoscope = 'おとめ'; }elsif($month==11 || ($month==12 && $day<=7)){ # 11月の残り~12月の7日以下ならば$horoscope = 'てんびん'; }elsif($month==12){ # 12月の残りならば $horoscope = 'さそり'; } } return $horoscope; } # 入力から金星と火星の星座を求める。 $vinus = get_vinus_data($in{'year'}, $in{'month'}, $in{'day'}); $mars = get_mars_data($in{'year'}, $in{'month'}, $in{'day'}); print "Content-type:text/html\n\n"; print <<EOF; <html> <head> <title>出力結果</title> </head> <body> <font size="4"> 金星は$vinus、火星は$mars </font> </body> </html> EOF exit;