Newbie: Ruby and Writing Variables In Strings

Hello all,

As I am going through my ruby book (Trying to learn Ruby of course) on
how to use flow control, one of the exercises is to create a program
that sings “99 bottles of beer on the wall”

I have started to create this program and I am at the point where I want
to test what I have done so far (code is not finished). When I try to
run my code, I get the following error:

99bottles.rb:10: syntax error, unexpected tIDENTIFIER, expecting kEND
puts number + ’ bottles of beer on the wall, ’ number + ’ bottles of
beer. Take
^
one down pass it around’

The snipet of code its referring to is:

puts number + ’ bottles of beer on the wall, ’ number + ’ bottles of
beer. Take one down pass it around’

My first thought is that my spacing between the variable “number” and
the “+” sign are screwing things up but I can’t seem how since to me
that clearly looks OK.

It could also be that I just don’t understand how to properly right a
variable into a string, but to me that also looks right ( I even tried
it with the .to_s and still nothing).

Can anyone help me understand what I am doing wrong?

On Oct 17, 2006, at 7:59 PM, Lovell Mcilwain wrote:

The snipet of code its referring to is:

puts number + ’ bottles of beer on the wall, ’ number + ’ bottles of
beer. Take one down pass it around’

You are missing a plus in the above line. You need one right before
the second number to join it into the string.

When you get that far, you will run into a new error (assuming
number is actually numeric). :wink:

You need to convert numbers to put them in strings. You can do this
with the to_s method available to all numbers:

puts ‘1 + 2 =’ + 3.to_s

Hope that helps.

Welcome to Ruby.

James Edward G. II

Hi.

I’m no ruby expert yet, but I believe the problem is this:

/on the wall, ’ number + ’ bottles

/which should read

/on the wall, ’ + number + 'bottles/

You left out the + after the string and before the “number” variable.

Have fun.

Hi Lovell,

For your example,

puts number + ’ bottles of beer on the wall, ’ number + ’ bottles of
beer. Take one down pass it around’

try this instead:

puts number + ’ bottles of beer on the wall, ’ + number + ’ bottles of
beer. Take one down pass it around’

Note the ‘+ number +’ at the second variable call.

best, George

Thanks guys,

I did miss that + sign before the second variable. I can’t believe I
missed it. I had been looking at that same piece of code for about 4
hours trying to figure it out and it was so simple :slight_smile:

Now that I am still in my testing, I have run into another issue with my
while statement. I am new to programming all together so I am having a
bit of an issue understanding loops in general.

When I tried to run my program this other error has shown up:

99bottles.rb:22: syntax error, unexpected $end, expecting kEND

Its saying an unexpected end but I can’t see where. My “ends” seem to
be fine but I will post the entire while loop, maybe its another simple
thing Im missing again.

number = 99

while input > number

puts number + ’ bottles of beer on the wall, ’ + number + ’ bottles of
beer. Take one down pass it around’

input=gets.chomp

while input > number

if input < number
	puts 'No Way! Choose a lower number then ' + number.to_s
else
	number = (number.to_i - 1)
end

end

On Oct 17, 2006, at 8:37 PM, Lovell Mcilwain wrote:

while input > number

puts number + ’ bottles of beer on the wall, ’ + number + ’
bottles of
beer. Take one down pass it around’

input=gets.chomp

while input > number

You have to while statements there, but only “end” one of them.
Every while needs a matching “end” where it stops.

James Edward G. II

Well looks like I didn’t indent properly and I missed an end. Im going
to try and run it and see what I get (fingers crossed)

Yep I corrected my indenting and noticed it. I did add another end to
the bottom of the program. But Im still not able to run this program.
My lack of a definition of my variable input which isn’t defined till
later in a while loop.

Can anyone tell me the best way in this case to define a starting point
and explain why or how it would work? (Have to learn something with all
this)

On 2006.10.18 10:06, James Edward G. II wrote:

When you get that far, you will run into a new error (assuming
number is actually numeric). :wink:

You need to convert numbers to put them in strings. You can do this
with the to_s method available to all numbers:

puts ‘1 + 2 =’ + 3.to_s

Or

puts “1 + 2 = #{3}”

To avoid having to #to_s everything manually.

On 2006.10.18 11:46, Lovell Mcilwain wrote:

Converting my variables to string got my program to the point where its
asking for my input. Once I put it in, it bails on me with a comparison
error.

99 bottles of beer on the wall, 99 bottles of beer. Take one down pass
it around
98
99bottles.rb:15:in `>’: comparison of String with 99 failed
(ArgumentError)
from 99bottles.rb:15

This problem is because you cannot say 99 > “6”.

input = gets
puts ‘true’ if input.to_i < 99

For example. You must use explicit conversion in most cases in Ruby.

Converting my variables to string got my program to the point where its
asking for my input. Once I put it in, it bails on me with a comparison
error.

99 bottles of beer on the wall, 99 bottles of beer. Take one down pass
it around
98
99bottles.rb:15:in `>’: comparison of String with 99 failed
(ArgumentError)
from 99bottles.rb:15

I still believe this has something to do with my starting point problem
and not knowing how to specify it correctly.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs