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 - Fatal编程技术网

尝试用Ruby成对编写一个简单的倒计时循环

尝试用Ruby成对编写一个简单的倒计时循环,ruby,Ruby,此说明如下所示: 数字运算器 编写一个将数字作为参数的方法 如果数字大于20 从数字倒数2秒 如果数字小于20 从数字倒数1 当数字倒计时到0时显示数字 我写了这篇文章,但它没有做它应该做的。有什么帮助吗 def num_cruncher(num) count = num until count == 0 do if num > 20 puts count - 2 else puts "#{count}" end

此说明如下所示:

数字运算器

编写一个将数字作为参数的方法 如果数字大于20 从数字倒数2秒 如果数字小于20 从数字倒数1 当数字倒计时到0时显示数字

我写了这篇文章,但它没有做它应该做的。有什么帮助吗

def num_cruncher(num)
count = num

until count == 0 do
    if num > 20
        puts count - 2
    else
        puts "#{count}"
    end
        count -= 1
  end
end
你可以在这里用。大概是这样的:

def num_cruncher n
  s = n > 20 ? -2 : -1
  n.step(by: s, to: 0).entries
end

num_cruncher 23
#=> [23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1]
你可以在这里用。大概是这样的:

def num_cruncher n
  s = n > 20 ? -2 : -1
  n.step(by: s, to: 0).entries
end

num_cruncher 23
#=> [23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1]

这是您的代码,只需进行尽可能少的更改:

def num_cruncher(num)
  count = num

  until count < 0 do
    puts count
    if num > 20
      count -= 2
    else
      count -= 1
    end
  end
end

num_cruncher(10)
# 10
# 9
# 8
# 7
# 6
# 5
# 4
# 3
# 2
# 1
# 0

num_cruncher(21)
# 21
# 19
# 17
# 15
# 13
# 11
# 9
# 7
# 5
# 3
# 1
def num_cruncher(num)
计数=num
直到计数<0为止
计算
如果num>20
计数-=2
其他的
计数-=1
结束
结束
结束
num_cruncher(10)
# 10
# 9
# 8
# 7
# 6
# 5
# 4
# 3
# 2
# 1
# 0
num_cruncher(21)
# 21
# 19
# 17
# 15
# 13
# 11
# 9
# 7
# 5
# 3
# 1
通过在循环外部提取if语句,代码会变得更短:

def num_cruncher(num)
  if num > 20
    step = 2
  else
    step = 1
  end

  until num < 0 do
    puts num
    num -= step
  end
end
def num_cruncher(num)
如果num>20
步骤=2
其他的
步骤=1
结束
直到num<0
放置num
num-=步长
结束
结束

这是您的代码,更改越少越好:

def num_cruncher(num)
  count = num

  until count < 0 do
    puts count
    if num > 20
      count -= 2
    else
      count -= 1
    end
  end
end

num_cruncher(10)
# 10
# 9
# 8
# 7
# 6
# 5
# 4
# 3
# 2
# 1
# 0

num_cruncher(21)
# 21
# 19
# 17
# 15
# 13
# 11
# 9
# 7
# 5
# 3
# 1
def num_cruncher(num)
计数=num
直到计数<0为止
计算
如果num>20
计数-=2
其他的
计数-=1
结束
结束
结束
num_cruncher(10)
# 10
# 9
# 8
# 7
# 6
# 5
# 4
# 3
# 2
# 1
# 0
num_cruncher(21)
# 21
# 19
# 17
# 15
# 13
# 11
# 9
# 7
# 5
# 3
# 1
通过在循环外部提取if语句,代码会变得更短:

def num_cruncher(num)
  if num > 20
    step = 2
  else
    step = 1
  end

  until num < 0 do
    puts num
    num -= step
  end
end
def num_cruncher(num)
如果num>20
步骤=2
其他的
步骤=1
结束
直到num<0
放置num
num-=步长
结束
结束

在这里,您总是只按1倒计时<代码>计数-2不会更改
计数
。每次通过循环执行
count-=1
,与
count
的值无关。您的逻辑应该(1)检查
count
的值,并根据您想要的规则将其递减,然后(2)打印
count
的当前值。当num正好为20时会发生什么?在这里您总是只按1倒计时<代码>计数-2不会更改
计数
。每次通过循环执行
count-=1
,与
count
的值无关。你的逻辑应该(1)检查
count
的值并根据你想要的规则将其递减,然后(2)打印
count
的当前值。当num正好为20时会发生什么?EricDuminil好主意,刚刚重构了我的代码(我想这就是你的意思)。更详细,但可能更清楚:
n.step(by:-2,to:0)。条目
。读者:与相同(相同的C代码)。@CarySwoveland好主意,用你的建议修改了我的答案。@EricDumini好主意,刚刚重构了我的代码(我想这就是你的意思)。更详细,但可能更清楚:
n.step(by:-2,to:0)。条目
。读者:相同(相同的C代码)好主意,我已经用你的建议修改了我的答案。