2016-12-05 47 views
1

我试图在基于用户输入的范围之间生成一个随机数,问题在于程序似乎在外部存储了一个数字当我运行它时指定的范围。在下面的示例中,我输入8,'puts ex_val'返回247.58不应该给我任何高于170.001的东西,我在哪里错了?试图在基于输入的范围之间生成随机数,返回范围以外的数

class Example 

    print "Input number between 1-12: " 
    example_range = gets.chomp 

    if example_range = 11 || 12 
    ex_val = rand(212.502..255) 
    elsif example_range = 9 || 10 
    ex_val = rand(170.002..212.501) 
    elsif example_range = 7 || 8 
    ex_val = rand(127.5..170.001) 
    elsif example_range = 5 || 6 
    ex_val = rand(84.999..127.499) 
    elsif example_range = 3 || 4 
    ex_val = rand(42.499..84.998) 
    elsif example_range = 1 || 2 
    ex_val = rand(0..42.498) 
    end 

    puts ex_val.round(1) 

end 

我尝试使用,而不是“何时” if语句,像这样:

case example_range  
when 11, 12 
    ex_val = rand(212.502..255) 
... 
end 

,但似乎总是只返回原始输入。

+1

所以,输出是什么?顺便说一句,你真的需要上课吗? - )) – marmeladze

+1

我可能不会,这只是我在解决这个问题时尝试过的很多事情之一。这是3个相似的部分之一,我只是简单地发布它。 – Lacomus

回答

1

if example_range = 11 || 12

是一个分配,产生具有值11example_range分配变量。 因为这种情况是truthy你的程序不走的更远,并返回

rand(212.502..255) 

双等号(==)用于比较。

你的情况,你想使用类似

if [11, 12].include?(example_range) 

附:

example_range = gets.chomp 

返回一个String对象,而不是整数 - 你需要的example_range(使用to_i)与整数比较之前转换。

+2

当然,'example_range == 11 || example_range == 12'! –

+0

好吧,我用Ken Y-N的修正以及这个,我现在正在为“nil:NilClass(NoMethodError)”收到“未定义的方法循环”。 – Lacomus

+1

to_i修好了!谢谢 – Lacomus

0

你的代码不适合,原因有二:

  • 首先=是赋值并不像安德烈杰伊涅科的比较已经解释。
  • 第二个gets.chomp返回一个字符串不是一个整数。由于您尝试将用户输入与整数进行比较,因此非condions可能为true。

此外,我想建议将if ..elsif块重构为哈希查找。国际海事组织这使得它更容易阅读,理解和保持:

fraction = (255/6.to_f) 
ranges = { 
    '1' => ((fraction * 0)...(fraction * 1)), 
    '2' => ((fraction * 0)...(fraction * 1)), 
    '3' => ((fraction * 1)...(fraction * 2)), 
    '4' => ((fraction * 1)...(fraction * 2)), 
    '5' => ((fraction * 2)...(fraction * 3)), 
    '6' => ((fraction * 2)...(fraction * 3)), 
    '7' => ((fraction * 3)...(fraction * 4)), 
    '8' => ((fraction * 3)...(fraction * 4)), 
    '9' => ((fraction * 4)...(fraction * 5)), 
    '10' => ((fraction * 4)...(fraction * 5)), 
    '11' => ((fraction * 5)..(fraction * 6)), 
    '12' => ((fraction * 5)..(fraction * 6)) 
} 

print 'Input number between 1-12: ' 
range = gets.chomp 

puts rand(ranges[range]).round(1)