From: es_ Date: 2008-07-28T19:39:38+09:00 Subject: "or" and "and" Hi, I'm just getting to discover ruby, but I find it very nice programming language. I just still don't understand how the "or" and "and" in ruby... I was playing with ruby and for example made a def to print Stem and Leaf plot (for those who didn't have a statistics course or slept on it, e.g. http://cnx.org/content/m10157/latest/) Here is the Beta version of it: class Array def n ; self.size ; end def stem_and_leaf(st = 1) # if st != (2 or 5 or 10) then ; st = 1 ; end k = Hash.new(0) self.each {|x| k[x.to_f] += 1 } k = k.sort{|a, b| a[0].to_f <=> b[0].to_f } te_last = 999999999999999999999999999999999 # impossible number puts " Stem and Leaf plot" + " N = " + self.n.to_s + " Steps / " + st.to_s st = 10 / st k.each do |key, val| te = (key / 10).to_i on = (Math.sqrt((key - te * 10).to_i**2)).to_i if te == te_last and on < st val.times { print on.to_s } te_last = te elsif te == te_last and on > st and on < st + st val.times { print on.to_s } te_last = te st += st else print "\n" + "%+6s" % te.to_s + " : " val.times { print on.to_s } te_last = te end end end end It prints: Stem and Leaf plot N = 15 Steps / 2 1 : 234 1 : 56789 2 : 019 # it shouldn't be like this 3 : 08 # it shouldn't be like this 4 : 07 # it shouldn't be like this Or with different "steps" value: Stem and Leaf plot N = 15 Steps / 5 1 : 23 1 : 4567 1 : 89 2 : 019 # it shouldn't be like this 3 : 08 # it shouldn't be like this 4 : 07 # it shouldn't be like this (data: 12 13 14 15 16 17 18 19 20 21 29 30 38 40 47) My questions: /1 If I just wanted it to work with "st" values: 1, 2, 5, how should the "or" statement look like? Ruby don't understand multiple or's (I tried using different brackets is several places but it still doesn't work). /2 It feels like Ruby didn't understand 3 and's in the elsif part of script. It don't understand the 3rd "and". Why? How to write those "and" statements? Thanks in advance : ) If anyone'd like to use the script feel free, I'd be just grateful to if you cite this message as a source ; ) Greetz, Timo