[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 17:29 / Filesize : 66 KB / Number-of Response : 262
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlコーディング初心者質問スレ Part 59



1 名前:nobodyさん [2009/02/16(月) 11:42:29 ID:gvPTpodw]
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ pc11.2ch.net/test/read.cgi/php/1218030872/

155 名前:訂正 [2009/03/04(水) 06:49:37 ID:+iuw4LCF]
>>153
点数でランク分けする処理を2つ行いたいのですが($tensuuaと$tensuubの数値によってそれぞれに対応する$rankaと$rankbの中身を書き換える)以下の2通りの書き方のうち
どちらが正しいのでしょう? 以前にif→elsifとせずif→ifを並べたらバグって変数内の数値が出鱈目になったことがありました、そのときは2つ以上の条件を同時に満たした上、
書き換えられる変数が同じ名前でした。今回、上のソースだとif→ifと同じように間違っているのか、変数が違うから問題ないのかがわかりません。

if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}

------------------------------------------------------------------------------------------
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} elsif ($tensuua < 30) {$ranka = 1;}
elsif ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}

156 名前:nobodyさん mailto:sage [2009/03/04(水) 07:13:20 ID:???]
if もし○○ならば
elsif ○○ではなくて××ならば
elsif さらに××でもなくて△△ならば

というだけの話なのだが

157 名前:nobodyさん [2009/03/04(水) 07:46:56 ID:+iuw4LCF]
>>156
if ( $a > 10 ){なんか処理}
if ( $a > 20 ){なんか処理}
if ( $a > 30 ){なんか処理}
コレだと$aに30以上が入力されるとバグります

10 if a>10 then なんか処理
20 if a>10 then なんか処理
30 if a>10 then なんか処理
ベーシックだと順に処理されて行番号30の処理が優先されたと思います。

158 名前:nobodyさん mailto:sage [2009/03/04(水) 08:01:49 ID:???]
>>157
30以上が入力されるとバグりますって、例えば$aが40だったら$a > 10は満たされるからそこが実行されるに決まってるだろうがよ。


159 名前:nobodyさん mailto:sage [2009/03/04(水) 08:04:26 ID:???]
そこがっていうかそこもって言わないと分からないのか。

if ( $a > 10 ){なんか処理}
if ( $a > 20 ){なんか処理}
if ( $a > 30 ){なんか処理}

お前さんの例で言うなら、例えば$aが40だったら「なんか処理」は三つとも実行される。

160 名前:nobodyさん mailto:sage [2009/03/04(水) 10:14:27 ID:???]
if(10未満){処理}
elsif(10以上20未満){処理}
else{処理}


161 名前:nobodyさん mailto:sage [2009/03/04(水) 10:20:20 ID:???]
なんで小さい順に評価しようとするの?
大きい順に評価して if を並べりゃいいじゃない

162 名前:nobodyさん mailto:sage [2009/03/04(水) 10:26:43 ID:???]
(´・ω・`)?

163 名前:nobodyさん [2009/03/04(水) 12:01:34 ID:+iuw4LCF]
2つのifが同時に真になる場合バグが生じる場合もあるようなので、この現象を回避するにプログラムの修正を行いたいので2つのソースの書き方のうちどちらが正しいか教えて欲しいのです。
現在はすべてifでかかれているので正常に動作しません。
もし上でもよければ修正が容易なのですが下のようにしなければならないのならifが100個ぐらいあるのでフローチャートでも書かないとむりかなと思ってます。

ソースその1
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}

------------------------------------------------------------------------------------------
ソースその2
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} elsif ($tensuua < 30) {$ranka = 1;}
elsif ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}




164 名前:nobodyさん mailto:sage [2009/03/04(水) 12:04:07 ID:???]
条件と処理を一行にいくつも書くと読みづらくなるから改行をもっと工夫せい

165 名前:nobodyさん mailto:sage [2009/03/04(水) 12:20:59 ID:???]
>>163
レス読んでるの?
あれ読んで分からないの?

166 名前:nobodyさん mailto:sage [2009/03/04(水) 12:58:45 ID:???]
>>165
何番のレスですか?

167 名前:nobodyさん mailto:sage [2009/03/04(水) 13:18:26 ID:???]
とりあえずさ
何が要求仕様なのかもう一度整理しろ

んで、仮にこういうデータが来たらどう処理されるなってのを考えろ

168 名前:nobodyさん mailto:sage [2009/03/04(水) 14:37:04 ID:???]
>>167 了解
ソースその1で動作環境はウェブサーバーで仮に$tensuua=20と$tensuub=20が同時に入力された場合 if→ifの場合のエラーと同じ不具合がおこりえるのかどうか
教えてください。

ソースその1
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua > 10 and $tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub > 10 and $tensuub < 20) {$rankb = 2;} else {$rankb = 1;}

------------------------------------------------------------------------------------------
ソースその2
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua > 10 and $tensuua < 20) {$ranka = 2;} elsif ($tensuua < 30) {$ranka = 1;}
elsif ($tensuub < 10) {$rankb = 3;} elsif ($tensuub > 10 and $tensuub < 20) {$rankb = 2;} else {$rankb = 1;}

169 名前:nobodyさん mailto:sage [2009/03/04(水) 15:04:49 ID:???]
質問に偽装したいやがらせ

170 名前:nobodyさん mailto:sage [2009/03/04(水) 15:47:05 ID:???]
>>168
my ($tensuua, $tensuub) = (15, 15);
my ($ranka, $rankb);
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
print "a:$ranka b:$rankb\n";
これを実行すると、
a:2 b:2
こうなるわけだが、何か問題があるのか?

171 名前:nobodyさん mailto:sage [2009/03/04(水) 16:28:04 ID:???]
そもそもてめぇの言う不具合を示せよ
俺らはエスパーじゃねーんだよクソッタレ

172 名前:nobodyさん mailto:sage [2009/03/04(水) 16:43:38 ID:???]
use strict;

my $rankA = -1;
my $rankB = -1;

my $pointA = 5;
my $pointB = 56;

my @pointlist = qw/30 20 10/;
my @ranklist = qw/1 2 3/;


for(my $i = 0; $i < $#pointlist + 1; $i++){
  $rankA = $ranklist[$i] if $pointA < $pointlist[$i];
  $rankB = $ranklist[$i] if $pointB < $pointlist[$i];
}


print "point = $pointA / rank = $rankA\n";
print "point = $pointB / rank = $rankB\n";



173 名前:nobodyさん mailto:sage [2009/03/04(水) 16:45:26 ID:???]
書き忘れたことあった。

use strict;

my $rankA = -1;
my $rankB = -1;

my @pointlist = qw/30 20 10/;
my @ranklist = qw/1 2 3/;

# 上記までは変更しない
# 下の pointX を変更して動作を確かめてください

my $pointA = 5;
my $pointB = 56;

for(my $i = 0; $i < $#pointlist + 1; $i++){
  $rankA = $ranklist[$i] if $pointA < $pointlist[$i];
  $rankB = $ranklist[$i] if $pointB < $pointlist[$i];
}

print "point = $pointA / rank = $rankA\n";
print "point = $pointB / rank = $rankB\n";





174 名前:nobodyさん mailto:sage [2009/03/04(水) 16:47:31 ID:???]
for my $i (@pointlist){
  $rankA = $ranklist[$i] if $pointA < $pointlist[$i];
  $rankB = $ranklist[$i] if $pointB < $pointlist[$i];
}

の方がすっきりしない?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<66KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef