Ruby 使用随机数生成器和百分比?
有没有更好的方法来编写此代码 我想要47.37%的时间数字应该是“奇数”。47.37%的时候这个数字应该是“偶数”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
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