[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

What am i doing wrong?

Nick Nolan

1/21/2007 6:36:00 AM

I realize this is an extremely noobish question, but i'm stuck and can't
seem to figure it out (aside from some very simple HTML, i know nothing
about programming).

I'm trying to follow Chris Pine guide here:
http://pine.fm/LearnToProgram/?...

I'm trying this question he suggested:
â?¢ Write a program which asks for a person's favorite number. Have your
program add one to the number, then suggest the result as a bigger and
better favorite number. (Do be tactful about it, though.)

This is what i have, but it's not working:

puts 'What is your favorite number?'
number = gets
puts 'That is a good number, but ' + (number.to_i + 1) + ' is better!'

However, if i remove the (number.to_i + 1) from that line, it prints out
the text just fine. And if i remove the text, so the line is only:

puts number.to_i + 1

I get the correct results. But if i try to combine the two, i get:
TypeError: cannot convert Fixnum into String

method + in untitled document at line 3
at top level in untitled document at line 3

I'm using Textmate if that matters.

--
Posted via http://www.ruby-....

7 Answers

Peter Szinek

1/21/2007 6:48:00 AM

0

Nick,

> number = gets

after this line, try to

p number

to see what does it contain. It contains

"4\n"

So, there is an ugly "\n" (carriage return) at the end. Let's remove that!

number = gets.chop
p number

now we have

"4"

That's better.
However, this was not the problem, your program will run also without
this fix :-) The problem is that

(number.to_i + 1)

is a FixNum - you need to turn that into a String. So the correct
solution reads:

'That is a good number, but ' + (number.to_i + 1).to_s + ' is better!'

HTH,
Peter

__
http://www.rubyra...

Jeremy McAnally

1/21/2007 6:49:00 AM

0

(number.to_i + 1).to_s

You're trying to merge a String and a Fixnum into one object (i.e.,
you feed one big string obect to puts; you can't merge a Fixnum and
String like that). The to_s method will convert the Fixnum you
created with to_i and added one to back to a string for output.

Kind of confusing I know, but if you got this far, I'm sure youll get it. :)

--Jeremy

On 1/21/07, Nick Nolan <hardcoredummy@hotmail.com> wrote:
> I realize this is an extremely noobish question, but i'm stuck and can't
> seem to figure it out (aside from some very simple HTML, i know nothing
> about programming).
>
> I'm trying to follow Chris Pine guide here:
> http://pine.fm/LearnToProgram/?...
>
> I'm trying this question he suggested:
> • Write a program which asks for a person's favorite number. Have your
> program add one to the number, then suggest the result as a bigger and
> better favorite number. (Do be tactful about it, though.)
>
> This is what i have, but it's not working:
>
> puts 'What is your favorite number?'
> number = gets
> puts 'That is a good number, but ' + (number.to_i + 1) + ' is better!'
>
> However, if i remove the (number.to_i + 1) from that line, it prints out
> the text just fine. And if i remove the text, so the line is only:
>
> puts number.to_i + 1
>
> I get the correct results. But if i try to combine the two, i get:
> TypeError: cannot convert Fixnum into String
>
> method + in untitled document at line 3
> at top level in untitled document at line 3
>
> I'm using Textmate if that matters.
>
> --
> Posted via http://www.ruby-....
>
>


--
My free Ruby e-book:
http://www.humblelittlerubybook...

My blogs:
http://www.mrneigh...
http://www.rubyinpra...

Nick Nolan

1/21/2007 6:56:00 AM

0

Thank you very much! That does make sense now!

--
Posted via http://www.ruby-....

David and Sharon Phillips

1/21/2007 7:16:00 AM

0

Another alternative:

puts "What's your favourite number?"
number= gets.to_i
puts "Hmm... not bad, but #{number+1} is better"



> I realize this is an extremely noobish question, but i'm stuck and
> can't
> seem to figure it out (aside from some very simple HTML, i know
> nothing
> about programming).
>
> I'm trying to follow Chris Pine guide here:
> http://pine.fm/LearnToProgram/?...
>
> I'm trying this question he suggested:
> • Write a program which asks for a person's favorite number. Have your
> program add one to the number, then suggest the result as a bigger and
> better favorite number. (Do be tactful about it, though.)
>
> This is what i have, but it's not working:
>
> puts 'What is your favorite number?'
> number = gets
> puts 'That is a good number, but ' + (number.to_i + 1) + ' is better!'
>
> However, if i remove the (number.to_i + 1) from that line, it
> prints out
> the text just fine. And if i remove the text, so the line is only:
>
> puts number.to_i + 1
>
> I get the correct results. But if i try to combine the two, i get:
> TypeError: cannot convert Fixnum into String
>
> method + in untitled document at line 3
> at top level in untitled document at line 3
>
> I'm using Textmate if that matters.
>
> --
> Posted via http://www.ruby-....
>


William James

1/21/2007 7:39:00 AM

0


Nick Nolan wrote:
> I realize this is an extremely noobish question, but i'm stuck and can't
> seem to figure it out (aside from some very simple HTML, i know nothing
> about programming).
>
> I'm trying to follow Chris Pine guide here:
> http://pine.fm/LearnToProgram/?...
>
> I'm trying this question he suggested:
> · Write a program which asks for a person's favorite number. Have your
> program add one to the number, then suggest the result as a bigger and
> better favorite number. (Do be tactful about it, though.)
>
> This is what i have, but it's not working:
>
> puts 'What is your favorite number?'
> number = gets
> puts 'That is a good number, but ' + (number.to_i + 1) + ' is better!'
>
> However, if i remove the (number.to_i + 1) from that line, it prints out
> the text just fine. And if i remove the text, so the line is only:
>
> puts number.to_i + 1
>
> I get the correct results. But if i try to combine the two, i get:
> TypeError: cannot convert Fixnum into String

printf "That is good, but %d is better.\n", number.to_i+1

Lionel Bouton

1/21/2007 8:15:00 AM

0

Sharon Phillips wrote the following on 21.01.2007 08:16 :
> Another alternative:
>
> puts "What's your favourite number?"
> number= gets.to_i
> puts "Hmm... not bad, but #{number+1} is better"
>

Just realised this one works:

print "What's your favorite number? "
puts "Good one, but #{gets.to_i + 1} is better"



James Gray

1/21/2007 8:28:00 PM

0

On Jan 21, 2007, at 12:48 AM, Peter Szinek wrote:

> Nick,
>
>> number = gets
>
> after this line, try to
>
> p number
>
> to see what does it contain. It contains
>
> "4\n"
>
> So, there is an ugly "\n" (carriage return) at the end. Let's
> remove that!
>
> number = gets.chop
> p number

When you want to remove a line ending, prefer chomp() to chop().
chomp() will only target the line ending, which will cause you less
trouble when using it on a line that doesn't actually have one:

>> "James".chomp
=> "James"
>> "James".chop
=> "Jame"

Finally, neither is needed in this case:

>> "42\n".chomp.to_i == "42\n".to_i
=> true

James Edward Gray II