我有代码,它将生成随机数,除非生成的随机数为0.当结果为0时,循环中断。
所以当循环中断时,我想要一个代码,它不断添加保留生成的随机数并在最后显示它。我能用红宝石做到吗?
def batting
loop do
runs = [0,1,2,3,4,5,6]
myruns = runs.shuffle.first
Newscore =
puts "Press W to hit a shot"
user_input = gets.chomp
while user_input.include? "W"
puts myruns
until myruns == 0
break
Score = Score + myruns
break
这会在Dynamic Constant assignment
引发Score = Score + myruns
错误,我基本上认为这是错误的,因为myruns
会在每次生成的事件中不断变化?
所以,我想创建一个新变量,它将存储生成的所有随机数的总和,直到生成的随机数为0。
有人可以帮忙吗?
答案 0 :(得分:1)
你可能正在寻找这样的东西吗?
EAI_AGAIN
答案 1 :(得分:0)
您可以这样做:
def batting
loop.with_object([]) do |_,obj|
x = rand 7
x == 0 ? raise(StopIteration) : obj << x
end.sum
end
batting #=> 33
batting #=> 0
batting #=> 18
使用loop
这会不断创建0到6的随机数rand 7
。如果x == 0,我们使用三元运算符使用StopIteration
来停止循环,否则我们将x
推入obj
数组(最初为[]
)。最后,我们总结obj
数组。
主要方法:loop
,Enumerable#with_object
,rand
,Array#sum