99 bottles of beer...pg57

Hi

I鈥檓 reading the book Learn to Program, by Chris Pine. I
wanted to see if my program 99 bottles of beer on the wall, from (pg.57 or http://pine.fm/LearnToProgram/?Chapter=06 ) is
o.k.?

An online search thru Google found Ruby-Talk, and I
instantly bookmarked it.

Now I鈥檓 on the list.

Any thoughts would be appreciated :wink:

Hears my try at it

Thanks

puts
puts '99, Bottles of beer on the wall, 99 bottles of beer,'
puts 'take one down, pass it around,'
first = 99
while first != 1
聽聽聽聽if first != 1
聽聽聽聽聽聽first = first -1
聽聽聽聽end
聽聽puts first.to_s + ' Bottles of beer on the wall, ' + first.to_s + ' bottles of beer,'
聽聽puts 'take one down pass it around,'
end
puts '0,Bottles of beer on the wall ;)'

Hi Jamison, I came up with a shorter version. I think it is more
efficient, but I am about as new as you are. Here was my code:

bottles = 99
while bottles > 0
  puts bottles.to_s + " bottles of beer on the wall, " + bottles.to_s +
" bottles of beer. Take one down and pass it around, " + (bottles
= bottles - 1).to_s + " bottles of beer."
end

路路路

On 11/7/06, jamison edmonds <jamison2000e@yahoo.com> wrote:

Hi

I'm reading the book Learn to Program, by Chris Pine. I
wanted to see if my program 99 bottles of beer on the wall, from (pg.57 or http://pine.fm/LearnToProgram/?Chapter=06 ) is
o.k.?

An online search thru Google found Ruby-Talk, and I
instantly bookmarked it.

Now I'm on the list.

Any thoughts would be appreciated :wink:

Hears my try at it

Thanks

puts
puts '99, Bottles of beer on the wall, 99 bottles of beer,'
puts 'take one down, pass it around,'
first = 99
while first != 1
    if first != 1
      first = first -1
    end
  puts first.to_s + ' Bottles of beer on the wall, ' + first.to_s + ' bottles of beer,'
  puts 'take one down pass it around,'
end
puts '0,Bottles of beer on the wall ;)'

Hi Jamison,

The first thing I would do is remove the duplication with:

puts '99, Bottles of beer on the wall, 99 bottles of beer,'
puts 'take one down, pass it around,'

and put that in the loop. Since your code in the loop does the same thing, you could just decrement the value of first after printing the current lyrics, and let that only reside in 1 place instead of two. This way, if the song changes to something like "take one down, take a big swig and pass it around," you only need to change it in one place.

Also, it doesn't appear the "if first != 1" block will _never_ be executed (and I don't see a need for it even if it was), so you could remove it and just decrement the value of first.

Finally, I think the variable name of first could be better named as to what it represents. After the first bottle of beer is removed from the wall, it no longer represents the first bottle. So, I might go with something like current_bottle, or just anything that describes it better really.

-Sam

jamison edmonds wrote, On 11/7/2006 11:37 AM:

路路路

Hi

I鈥檓 reading the book Learn to Program, by Chris Pine. I
wanted to see if my program 99 bottles of beer on the wall, from (pg.57 or http://pine.fm/LearnToProgram/?Chapter=06 ) is
o.k.?

An online search thru Google found Ruby-Talk, and I
instantly bookmarked it.

Now I鈥檓 on the list.

Any thoughts would be appreciated :wink:

Hears my try at it

Thanks

puts
puts '99, Bottles of beer on the wall, 99 bottles of beer,'
puts 'take one down, pass it around,' first = 99
while first != 1 if first != 1
      first = first -1
    end
  puts first.to_s + ' Bottles of beer on the wall, ' + first.to_s + ' bottles of beer,'
  puts 'take one down pass it around,'
end puts '0,Bottles of beer on the wall ;)'

Instead of using a 'while' loop (unless that's what the book is
teaching you) I think the following is more Ruby-esque:

99.downto( 1 ) do |num|
  puts "#{num} bottles of beer on the wall, #{num} bottles of beer,"
  puts "take one down, pass it around,"
end
puts '0,Bottles of beer on the wall ;)'

Note the use of string interpolation also instead of .to_s and +

路路路

On 11/7/06, jamison edmonds <jamison2000e@yahoo.com> wrote:

Any thoughts would be appreciated :wink:

Phrogz wrote:

99.downto( 1 ) do |num|
  puts "#{num} bottles of beer on the wall, #{num} bottles of beer,"
  puts "take one down, pass it around,"
end
puts '0,Bottles of beer on the wall ;)'

Oops, I am, of course, missing one line of the song, and a nice newline
for breaks. Should be more like:

99.downto( 1 ) do |num|
  puts
  puts "#{num} bottles of beer on the wall, #{num} bottles of beer,"
  puts "take one down, pass it around,"
  puts "#{num-1} bottles of beer on the wall" unless num == 1
end
puts '0 bottles of beer on the wall ;)'

you could drop the unless and the final line. ( num = 1, num-1 = 0 :wink:

99.downto( 1 ) do |num|
   puts
   puts "#{num} bottles of beer on the wall, #{num} bottles of beer,"
   puts "take one down, pass it around,"
   puts "#{num-1} bottles of beer on the wall"
end

Altho I think the book hasn't covered the enumeration type stuff yet like downto.

路路路

On Nov 7, 2006, at 1:15 PM, Phrogz wrote:

Phrogz wrote:

99.downto( 1 ) do |num|
  puts "#{num} bottles of beer on the wall, #{num} bottles of beer,"
  puts "take one down, pass it around,"
end
puts '0,Bottles of beer on the wall ;)'

Oops, I am, of course, missing one line of the song, and a nice newline
for breaks. Should be more like:

99.downto( 1 ) do |num|
  puts
  puts "#{num} bottles of beer on the wall, #{num} bottles of beer,"
  puts "take one down, pass it around,"
  puts "#{num-1} bottles of beer on the wall" unless num == 1
end
puts '0 bottles of beer on the wall ;)'