使用随机数发生器和百分比?

时间:2014-01-15 01:26:17

标签: ruby random

有没有更好的方法来编写此代码?

我想要47.37%的时间这个数字应该是“奇数”。这个数字应该是“偶数”的47.37%。

random_no = rand*100
if (random_no <= 47.37)
  number = "odd"
elsif (random_no <= 94.74)
  number = "even"
else
  number = "other"
end

3 个答案:

答案 0 :(得分:3)

这可能是一个解决方案:

{'odd'=> 47.37, 'even'=> 94.74, 'other'=> 100}
.find{|key, value| rand* 100 <= value}.first

答案 1 :(得分:2)

如果你想要一个班轮,我喜欢Vidaica的回答。但为什么?我认为您的代码更容易理解。或者,您可以使用case语句保存三行:

number = case rand*100
when 0...47.37 then 'odd'
when 47.37...94.74 then 'even'
else 'other'
end

我也喜欢Cary的评论,关于使用整数来表现。您可以将其与上述任何解决方案结合使用。

答案 2 :(得分:2)

现在我知道轮盘赌游戏,我会采用不同的方式,使用兰德(38)选择一个数字,然后看看它是否奇怪,甚至是& #39;其他&#39 ;.为了说明面向对象的方法:

class Roulette
  def initialize
    spin
  end
  def spin
    @number_showing = rand(38)
  end
  def odd_even?
    if @number_showing == 0 || @number_showing == 37
      return 'other'
    elsif @number_showing.odd?
      return 'odd'
    else
      return 'even'
    end
  end
  def number_showing
    if @number_showing == 37
      return '00'
    else
      return @number_showing.to_s
    end
  end
end

wheel = Roulette.new

10.times do
  wheel.spin
  puts wheel.number_showing
  puts wheel.odd_even?
  puts
end