有没有更好的方法来编写此代码?
我想要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
答案 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