From: Bob Hutchison Date: 2007-10-02T11:59:03+09:00 Subject: Re: instance variable/ I'm lost Hi, Welcome! On 1-Oct-07, at 10:21 PM, Erik Boling wrote: > Hello i am new to programming/ ruby but i have had some help from a > cousin and read a book so i have some knowlage of what I'm doing. > Anyways in my free time i was creating a program that tested me on > easy > multiplication problems to keep my mind fresh; > > puts 'How many problems do you want to solve?' > problems = gets.chomp > > 5.downto(1) do |x| > puts "The test will beging #{x} in seconds! " > sleep 1 > end > puts 'Start!' > > def multiply > multiple2 = rand(11) > multiple1 = rand(11S) > answer = multiple1 * multiple2 > puts 'what is ' + multiple1.to_s + ' * ' + multiple2.to_s + ' ?' > answerp = gets.chomp > if answer.to_s == answerp.to_s > puts "good job" > else puts "You fail!" > end > end > > problems.to_i.times do multiply > end > > : > So i was wondering, how can i tally up how many times they answer > correctly. I tried putting in the definition after the if statement > correct + 1, * obviously i made the variable "correct" above* but the > problem is, i cant retrive the variable out of the definition i had > made. which brings me to my question of instance variables. Can't i > make > a seperate def and create and instance variable like > def correct > @correct = correct > > then in my multiplication def. under the if statement do > correct + 1 > > then finally at the end do > puts correct > and that would give me the total correct, but thats not working > for me? > i dont know what im doing wrong? I see these instance variable in this > confusing book i just started to read, and it looks like maybe there > needs to be a class?!?!? idk but if someone could help me get this > stuff > figured out that would be awesome! As you say, an instance variable would work, this is written as: @correct -- I've inserted these below (unless I edited this incorrectly, it should work). puts 'How many problems do you want to solve?' problems = gets.chomp @correct = 0 5.downto(1) do |x| puts "The test will beging #{x} in seconds! " sleep 1 end puts 'Start!' def multiply multiple2 = rand(11) multiple1 = rand(11) answer = multiple1 * multiple2 puts 'what is ' + multiple1.to_s + ' * ' + multiple2.to_s + ' ?' answerp = gets.chomp if answer.to_s == answerp.to_s then puts "good job" @correct = @correct + 1 else puts "You fail!" end end problems.to_i.times do multiply end puts "correct: #{@correct}" Now you'll be asking yourself: so what is the instance that this is a variable of? And: what's running this program? Good questions. You'll need to learn about classes, objects, and scopes to answer them. There is an alternative technique using parameters and returned values: puts 'How many problems do you want to solve?' problems = gets.chomp 5.downto(1) do |x| puts "The test will beging #{x} in seconds! " sleep 1 end puts 'Start!' def multiply(correct) multiple2 = rand(11) multiple1 = rand(11) answer = multiple1 * multiple2 puts 'what is ' + multiple1.to_s + ' * ' + multiple2.to_s + ' ?' answerp = gets.chomp if answer.to_s == answerp.to_s then puts "good job" correct = correct + 1 else puts "You fail!" end return correct end correct = 0 problems.to_i.times do correct = multiply(correct) end puts "correct: #{correct}" Another thing I should mention, since you are just starting out... it is best if you are *very* rigourous about your code from the very beginning. This includes things like formatting your code. Some habits are hard to un-learn, so don't form them :-) Have fun! Cheers, Bob > ps: sorry long post :( > -- > Posted via http://www.ruby-forum.com/. > ---- Bob Hutchison -- tumblelog at http:// www.recursive.ca/so/ Recursive Design Inc. -- weblog at http://www.recursive.ca/ hutch http://www.recursive.ca/ -- works on http://www.raconteur.info/ cms-for-static-content/home/