投稿
0918nobita nobita0918
def isReserved(str$)~end についてですが、 このコードだと"in"や"do"を引数にしてもfalseが返されます… data文で書いてある文字列と一致すればtrueを返すようにしたいですが、 どうすればいいですか?
0そうだね
プレイ済み
返信[1]
親投稿
おにぎり EasyPuzzler65
word$に最初何も入っていないので、while文の条件がいきなり成立して1回もループが回っていないと思います。面倒でも read word$ while word$!="" if str$==word$ then return true read word$ wend return false などと2回read文を書くか、(つづく)
2そうだね
プレイ済み
返信[2]
親投稿
おにぎり EasyPuzzler65
@loop read word$ if len(word$)==0 then return false if str$==word$ then return true goto @loop とでもするか、でしょうか。
1そうだね
プレイ済み
返信[3]
親投稿
マギー M191246
repeat~untilループ を使う方法もあります。
1そうだね
プレイ済み
返信[4]
親投稿
これはマギーさんの言うようにrepeat〜untilを使うのが便利なパターンですよね。 ちなみに一時変数のtを用意しなくても見つかったときのthenでreturn trueするようにすればいいとも思いますよ。その場合、見つからなかったとき(ループを抜けた最後)はreturn falseにしておく感じです。
1そうだね
プレイ済み
返信[5]
親投稿
0918nobita nobita0918
皆さんありがとうございます repeat untilって結構使いやすいですね
0そうだね
プレイ済み
返信[6]
親投稿
よく見たらおにぎりさんの例で一時変数を使わない書き方してましたね。失礼しました〜…。 なのでもう一つ、returnを一つにする方法としては、始めにt=falseとしておいて、見つかったときに、t=trueとして最後は、return tとする方法もあります。 まあでもこの場合は見つかったときにすぐreturnする方が素直だと思うので、repeat〜untilを使った上でおにぎりさんの例のように直接returnする方がいいかなとは思います。
0そうだね
プレイ済み
返信[7]
親投稿
おにぎり EasyPuzzler65
じつはrepeat - until はこのケースではそう便利でもないかな~と思っていたのでした。でもこうならいいか。 repeat read word$ until len(word$)==0 || str$==word$ return (str$==word$) 引数に""を渡したときfalseになってほしければ return (len(word$)>0) のほうが若干速いかもしれません。
0そうだね
プレイ済み