Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用随机数生成器和百分比?_Ruby_Random - Fatal编程技术网

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

Ruby 使用随机数生成器和百分比?,ruby,random,Ruby,Random,有没有更好的方法来编写此代码 我想要47.37%的时间数字应该是“奇数”。47.37%的时候这个数字应该是“偶数” random\u no=rand*100 如果(随机)_no这可能是一种解决方案: {'odd'=> 47.37, 'even'=> 94.74, 'other'=> 100} .find{|key, value| rand* 100 <= value}.first {'odd'=>47.37,'even'=>94.74,'other'=>100} .fi

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

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

random\u no=rand*100

如果(随机)_no这可能是一种解决方案:

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

.find{key,value | rand*100如果你选择一行,我喜欢Vidaica的答案。但是为什么呢?我认为你的代码更容易理解。或者你可以使用case语句保存三行代码:

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

我也喜欢Cary关于使用整数来提高性能的评论。你可以将其与上述任何一种解决方案结合起来。

既然我知道这是一种轮盘赌游戏,我会采取不同的做法,使用兰德(38)来选择一个数,然后看看它是奇数、偶数还是“其他”。为了说明一种面向对象的方法:

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

扎克,看起来很好。如果速度很重要,你可以考虑使用整数:<代码> RealthyOn= Rand(10000);如果(随机数NO.< 4737)…<代码> > <代码> RAND(10000)。
产生一个介于0和9999之间的伪随机数,其中0和4736之间包含4737个可能性。因此
出于病态的好奇,如果不是奇数或偶数,该数字是多少?这是硬币落在边缘的时候吗??:-)(编辑:击败我,大卫)我不确定你是否也包括了风格方面的东西,但是你可以去掉括号,你应该使用缩进。这是更多信息的说明。@Dave&Kai:房子的价格是5.26%。这是抛硬币的标准价格。啊,利润='other'。明白了。
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