如何合计ruby中生成的随机数

如何合计ruby中生成的随机数,ruby,random,Ruby,Random,我有生成随机数的代码,除非生成的随机数是0。当结果为0时,循环中断 因此,当循环中断时,我需要一个代码,它不断添加不断生成的随机数,并在最后显示它。我能用ruby做吗 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 wh

我有生成随机数的代码,除非生成的随机数是0。当结果为0时,循环中断

因此,当循环中断时,我需要一个代码,它不断添加不断生成的随机数,并在最后显示它。我能用ruby做吗

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
这是在
Score=Score+myruns
处抛出
Dynamic Constant assignment
错误,我基本上认为这是错误的,因为
myruns
在每个生成的事件中都会不断变化

所以,我想创建一个新变量,它将存储所有生成的随机数的总和,直到生成的随机数为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
def击球
loop.with_object([])do | j|
x=7兰特
x==0?升起(停止迭代):obj 33
击球#=>0
击球#=>18
使用
循环
可以连续创建0-6之间的随机数,随机数为
兰德7
。如果x==0,我们使用三元运算符以
StopIteration
停止循环,否则我们将
x
推入
obj
数组(最初是
[]
)。最后我们对
obj
数组求和


关键方法:
循环
可枚举#带对象
兰德
数组#求和
,你可能在寻找类似的东西吗

def batting
  runs = [0,1,2,3,4,5,6]
  final_score = 0
  puts "Press W to hit a shot"
  user_input = gets.chomp     

  while user_input.include? "W"
    myruns = runs.sample

    if myruns != 0
      final_score += myruns
    else
      break
    end

    puts "myruns=#{myruns}","final_score=#{final_score}"
    puts "Press W to hit a shot"
    user_input = gets.chomp
  end
  puts "myruns=#{myruns}","final_score=#{final_score}"
end

嗯,
提升(停止迭代)
?为什么不来一次简单的休息?@SergioTulentsev嗯,我有两种想法。尤其是在阅读了此处评论中的讨论后,@MrityunjeyanS
break
要求您将
obj
作为参数传递。否则我就不太确定了,请参阅上面的链接以了解关于这个的讨论。@sagarpandya2好的!但在代码中,是否列出了数组中生成的所有随机数,并具有数组列表的总和?取而代之的是,我想在变量中求和,这样每次我的和为零时,可以将和填充到变量中,并将其添加到最终分数中?当我只生成一次代码时,您的代码运行良好?如果我下次生成它,以前的数据就会丢失。像现在一样,我必须创建像
variable=loop一样的循环。使用_object([])do |,obj |
?@sagarpandya82:btw,
break
不需要对象。感谢这一点,它实际上可以打印多个随机数,而不是一次一个,为什么
myruns=runs.sample
创建了两次?一旦进入
while
循环,下一次进入'until'?我上面写的代码,每次按
W
时都会打印一个随机数。我想创建一个变量,将每次生成的随机数相加,直到myruns=0,然后发布
break
并将总和添加到最终分数,这样每次调用此
def
时,它都不会干扰最终分数。为了做到这一点,我需要一个存储和的变量,而不是数组。你能更清楚地说明你需要什么吗?1。每次按下
W
时生成
随机数
。2.如果
Random number
为0,
break
total
将生成的随机数分配给一个变量。这就是进度!哇!如果
myruns=0
继续添加数字是此处逻辑的关键。令人惊讶的是,到目前为止,我一直在等待它
0
将生成的数字作为一个整体进行添加。这是更好的解决方案。谢谢