From: William James Date: 2007-12-08T20:45:01+09:00 Subject: Re: Ruby Nuby Question On Dec 7, 1:12 pm, Nigama Xx wrote: > Hello, > > I am just learning Ruby, via several resources (online: Why's, > downloaded PDF's, and Chris Pine's book "Learn to Program Ruby"). I > finished Chris Pine's book and was going back through doing any of the > exercises I hadn't done the first time and trying to mess with/break the > programs I had done the first time through. > > In looking back over my code and trying to clean things up, I managed to > think of two good questions I can't seem to find the answer to > elsewhere. I figured this was the brightest and smartest group of > Ruby-heads out there. :) > > I'll ask my questions first and put the code from the program down > below. The assignment asked us to create a "Deaf Grandmother" program, > which you could only get out of by saying "BYE" to in all caps, three > times. > > The first question I had was, for some reason, if you input "BYE!" for > the second or third required "BYE" (to exit/end the program), it > launches into an infinite loop. Why is that? BYE works correctly. > What is it about "BYE!"? > > Second question is... what if I wanted the program to require you to say > "BYE" three times in a row instead of just three times throughout the > conversation. Is there any easy way to do this? > > Okay, thanks for your time, the code from the program is below.. > > [code] > talk = 'I <3 my grandmother' > puts 'WHAT A FINE YOUNG GRANDCHILD YOU ARE, COME TO VISIT YOUR DEAR OLD > GRANNY! COME IN, COME IN!' > > while talk != 'BYE' > talk = gets.chomp > if talk != talk.upcase > puts 'HUH?! SPEAK UP, SONNY!' > elsif talk == talk.upcase && talk != 'BYE' > year = 1 > while year < 30 > year = rand(51) > end > puts 'NO, NOT SINCE 19' + year.to_s + '!' > end > end > > if talk == 'BYE' > puts 'WHAT WAS THAT?' > talk = gets.chomp > while talk != 'BYE' > if talk != talk.upcase > puts 'HUH?! SPEAK UP, SONNY!' > elsif talk == talk.upcase && talk != 'BYE' > year = 1 > while year < 30 > year = rand(51) > end > puts 'NO, NOT SINCE 19' + year.to_s + '!' > end > end > > if talk == 'BYE' > puts 'EYE? WHAT\'S WRONG WITH YOUR EYE?' > talk = gets.chomp > while talk != 'BYE' > if talk != talk.upcase > puts 'HUH?! SPEAK UP, SONNY!' > elsif talk == talk.upcase && talk != 'BYE' > year = 1 > while year < 30 > year = rand(51) > end > puts 'NO, NOT SINCE 19' + year.to_s + '!' > end > end > > if talk == 'BYE' > puts 'OH VERY WELL, SEE YOU ANOTHER TIME, THEN!' > end > end > end > [/code] > -- > Posted viahttp://www.ruby-forum.com/. history = [] bye_replies = [ 'WHAT WAS THAT?', "EYE? WHAT'S WRONG WITH YOUR EYE?" ] puts 'WHAT A FINE YOUNG GRANDCHILD YOU ARE, COME TO VISIT YOUR DEAR OLD GRANNY! COME IN, COME IN!' bye_count = 0 while true talk = gets.strip history << talk if talk != talk.upcase puts 'HUH?! SPEAK UP, SONNY!' elsif "BYE" == talk break if ['BYE'] * 3 == history[ -3 .. -1 ] puts bye_replies[ bye_count % bye_replies.size ] bye_count += 1 else year = rand( 21 ) + 30 puts "NO, NOT SINCE 19#{ year }!" end end puts 'OH VERY WELL, SEE YOU ANOTHER TIME, THEN!'