Forum: Ruby Simple Script Help (New to Ruby)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ba8908b031ab4bf57e748320da6f404c?d=identicon&s=25 Jordan Michaels (Guest)
on 2006-03-05 00:37
(Received via mailing list)
Hello Ruby Masters!

I'm attempting to write a very simple guessing game script in an effort
to expand my knowledge about the Ruby Language. I'm running ruby on my
OpenSuse Linux 10 box at home. I'm typically a web-programmer, but I
want to get into something a little more deep.

Here is my little script:

----------------
# set the default result
theResult = 0

# create the random number
theNumber = rand(10)

while theResult != 3
        print "Guess my number: "
        theGuess = gets.to_i

        # return key
        # 1 = number is lower
        # 2 = number is higher
        # 3 = number matched!
        if theNumber < theGuess
                theResult = 1
        elseif theNumber > theGuess
                theResult = 2
        elseif theNumber = theGuess
                theResult = 3
        end

        case theResult
                when 1
                        puts "My number is lower."
                when 2
                        puts "My number is higher."
                when 3
                        puts "You guessed my number!"
        end

        print "The Result: "
        print theResult
        print "\n"

        print "The Guess: "
        print theGuess.class
        print "+"
        print theGuess
        print "\n"

        print "The Number: "
        print theNumber
        print "\n"
end
----------------

and here's my output when I run it:

----------------
utdream@dream:~/ruby_scripts> ruby guess_number.rb
Guess my number: 1
The Result: 0
The Guess: Fixnum+1
The Number: 3
----------------

The result staying at 0 tells me that NONE of my comparisons worked. Can
anyone tell me why? I'm sure this is something simple but any help would
be appreciated.

Thanks in advance!

Warm regards,
Jordan Michaels
Vivio Technologies
9bc61cf3be77d2c46fb87bfc9ca7edb1?d=identicon&s=25 Ulrich Goertz (Guest)
on 2006-03-05 01:04
(Received via mailing list)
>         elseif theNumber = theGuess

I guess you mean == here, not =.

Best, Ulrich
B97225f66bb5caac601b12735d430a0d?d=identicon&s=25 Marcin MielżyÅ?ski (Guest)
on 2006-03-05 01:04
(Received via mailing list)
Jordan Michaels wrote:

>
>        end
>        print "The Result: "
>        print theNumber
>        print "\n"
> end
> ----------------
>

(there is no elseif kayword but elsif)

It seems to be working for me. You could replace the if/elsif statements
  with case statement

case
	when theNumber < theGuess
		# blah
	when theNumber > theGuess
		# blah
	else
		# blah
end


lopex
C5eecd44fa818c7985d4f31bc2c42ac9?d=identicon&s=25 Eric Jacoboni (Guest)
on 2006-03-05 01:07
(Received via mailing list)
Jordan Michaels <jordan@viviotech.net> writes:


>        elseif theNumber > theGuess
>                theResult = 2
>        elseif theNumber = theGuess

elseif is not Ruby... try elsif instead.

furthermore, equality is "==", not "=". Here, you assigns theGuess to
theNumber. This assignment return the value of theGuess, hence always
"true".

> and here's my output when I run it:

Strange. If i try to run your script, i get a :

bla.rb:17: undefined method `elseif' for main:Object (NoMethodError)

That's not the case for you ?
B97225f66bb5caac601b12735d430a0d?d=identicon&s=25 Marcin MielżyÅ?ski (Guest)
on 2006-03-05 01:07
(Received via mailing list)
oops it seems I missed this (theNumber = theGuess)

lopex
Ba8908b031ab4bf57e748320da6f404c?d=identicon&s=25 Jordan Michaels (Guest)
on 2006-03-05 01:16
(Received via mailing list)
Eric Jacoboni wrote:

>
>>
>
>Strange. If i try to run your script, i get a :
>
>bla.rb:17: undefined method `elseif' for main:Object (NoMethodError)
>
>That's not the case for you ?
>
>
>
No, it was not the case, but that might have been helpful!

 > ruby --version
ruby 1.8.2 (2004-12-25) [i586-linux]

I'm downloading 1.8.4 as I write this. We'll see if that doesn't give me
better error messages.

Thanks to all for your support and suggestions! Changing the "elseif" to
"elsif" did the trick. The script now works as intended. I agree with a
lot of your suggestions about equality (==), and using case instead of
if. When programming for clients I make a point to use the most
efficient and correct code as possible, but I'm just playing with this
at the moment. ;)

Thanks again. It's nice to have a friendly place to turn to when you
have questions!

Warm regards,
Jordan Michaels
Vivio Technologies
Ff63c03fd68754adbadd2c6314646bef?d=identicon&s=25 Bill Guindon (agorilla)
on 2006-03-05 02:02
(Received via mailing list)
On 3/4/06, Jordan Michaels <jordan@viviotech.net> wrote:
> # set the default result
>         # 1 = number is lower
>         case theResult
>                 when 1
>                         puts "My number is lower."
>                 when 2
>                         puts "My number is higher."
>                 when 3
>                         puts "You guessed my number!"
>         end

This is a good place to use symbols -- if nothing else, you won't need
the comments explaining the keys:

         if theNumber < theGuess
                 theResult = :lower
         elsif theNumber > theGuess
                 theResult = :higher
         elsif theNumber = theGuess
                 theResult = :equal
         end

         case theResult
                 when :lower
                         puts "My number is lower."
                 when :higher
                         puts "My number is higher."
                 when :equal
                         puts "You guessed my number!"
         end
2ffac40f8a985a2b2749244b8a1c4161?d=identicon&s=25 Mike Stok (Guest)
on 2006-03-05 02:29
(Received via mailing list)
On 4-Mar-06, at 8:00 PM, Bill Guindon wrote:

>> Here is my little script:
>>         theGuess = gets.to_i
>>                 theResult = 3
>
>
>>         print "The Result: "
>>         print theNumber
>> The Guess: Fixnum+1
>> The Number: 3
>> ----------------
>>
>> The result staying at 0 tells me that NONE of my comparisons
>> worked. Can
>> anyone tell me why? I'm sure this is something simple but any help
>> would
>> be appreciated.

You could avoid the symbols if you are prepared to understand the <=>
comparison, a short example might be

the_number = rand(10)

loop do
   print "Guess my number: "
   the_guess = gets or break     # hit eof

   case the_number <=> the_guess.to_i
     when -1
       puts "My number is lower"
     when  1
       puts "My number is higher"
     else
       puts "You guessed my number"
       break
     end
end

It may be interesting to see how you can trap "bad" input and
generate a useful error message using what comes with Ruby

Mike

--

Mike Stok <mike@stok.ca>
http://www.stok.ca/~mike/

The "`Stok' disclaimers" apply.
This topic is locked and can not be replied to.