Ruby 初心者スレッド Part 50

このエントリーをはてなブックマークに追加
28デフォルトの名無しさん
質問よろしいでしょうか。

a = gets.chomp
while a != "BYE"
puts "what?"
a = gets.chomp
end

このプログラムをwhat?と聞き返されるたびにBYEと入力して、の繰り返しで三回目にそのループから抜けられるようにするにはどうすればよいでしょうか?
29デフォルトの名無しさん:2012/08/05(日) 01:27:52.18
>>28
カウンタをつける。
30デフォルトの名無しさん:2012/08/05(日) 01:45:13.77
what?と聞かれる前(つまり初回)に入力したBYEもカウントしていいんかな?
そうならまずwhileループをbegin〜end while(ruby版do〜whileの構文)に書き換えてから全体を3.timesで囲むとか
31デフォルトの名無しさん:2012/08/05(日) 02:27:28.02
n = 0
while n < 3
  puts "what?"
  a = gets.chomp
  n += 1 if a == "BYE"
end
32デフォルトの名無しさん:2012/08/05(日) 13:16:54.32
>>29>>30>>31
アドバイスありがとうございます。改善してみました。

3.times{
a=gets.chomp
while a != "BYE"
puts "what?"
a=gets.chomp
end}

ただ、これだとBYEと入力したあとにwhat?と返してくれません。どうしたものでしょうか。
今のままだとBYEと入力しない限りはwhatと返す(BYEと返すとループから抜けてしまう)ようになっているので、
BYEと入力してもwhatと返すようにしたいです。それで三回連続でBYEと入力したときだけループから抜けるようにしたいのですが。
BYEと入力した回数をカウンタで数えるのでしょうか。調べてみてもよく分からなかったので教えていただけるとありがたいです。
33デフォルトの名無しさん:2012/08/05(日) 13:53:50.19
>>32
> 三回連続でBYEと入力したときだけループから抜けるようにしたいのですが
連続でないと駄目なの?
だったら>>30は忘れて。これは
BYE
HELLO
BYE
BYE
みたいな入力で抜けることだけを想定して書いてるから

基本的には>>31みたいな感じで、BYE以外が入力されたらカウンタをリセットすればいいんじゃないかな
34uy:2012/08/05(日) 14:57:37.95

loop.each_with_object ["","",""] do | _, c |
  puts "what?"
  a = gets.chomp
  p a
  c << a
  c.shift
  break if c.join == "BYE"*3
end
35uy:2012/08/05(日) 15:22:44.83
ミスった これcycleでいいや

loop.each_with_object ["","",""] do | _, c |

[["","",""]].cycle do | c |