[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Simple Script Help (New to Ruby

Jordan Michaels

3/4/2006 11:36:00 PM

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


7 Answers

Ulrich Goertz

3/5/2006 12:01:00 AM

0

> elseif theNumber = theGuess

I guess you mean == here, not =.

Best, Ulrich

Marcin Mielzynski

3/5/2006 12:01:00 AM

0

Jordan Michaels wrote:

> ----------------
> # 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
> ----------------
>

(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

Marcin Mielzynski

3/5/2006 12:03:00 AM

0

oops it seems I missed this (theNumber = theGuess)

lopex

Eric Jacoboni

3/5/2006 12:03:00 AM

0

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 ?

--
Eric Jacoboni, ne il y a 1444957142 secondes

Jordan Michaels

3/5/2006 12:16:00 AM

0

Eric Jacoboni wrote:

>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 ?
>
>
>
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


Bill Guindon

3/5/2006 1:01:00 AM

0

On 3/4/06, Jordan Michaels <jordan@viviotech.net> wrote:
> 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

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


> 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
>
>


--
Bill Guindon (aka aGorilla)
The best answer to most questions is "it depends".


Mike Stok

3/5/2006 1:29:00 AM

0


On 4-Mar-06, at 8:00 PM, Bill Guindon wrote:

> On 3/4/06, Jordan Michaels <jordan@viviotech.net> wrote:
>> 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
>
> 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
>
>
>> 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.

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...

The "`Stok' disclaimers" apply.