为什么这个Ruby Kata返回0而不是2?
我有一段代码,它应该返回一个数字的尾随零的数目。我的代码在应该返回2时返回0。不太清楚发生了什么。有帮手吗为什么这个Ruby Kata返回0而不是2?,ruby,Ruby,我有一段代码,它应该返回一个数字的尾随零的数目。我的代码在应该返回2时返回0。不太清楚发生了什么。有帮手吗 def trailing_zeros(number) sort_sum = number.to_s.split(//).reverse counter = 0 until sort_sum[counter] == "0" counter += 1 return counter end end ----------编辑------------ 我已经从我
def trailing_zeros(number)
sort_sum = number.to_s.split(//).reverse
counter = 0
until sort_sum[counter] == "0"
counter += 1
return counter
end
end
----------编辑------------
我已经从我的until循环中移除了返回计数器,但仍然没有得到任何结果
def trailing_zeros(number)
sort_sum = number.to_s.split(//).reverse
counter = 0
until sort_sum[counter] == "0"
counter += 1
end
return counter
end
如果我投1200,我应该得到2,但我一直得到0
-----------编辑--------
嘿,伙计们,我还有一个问题。所以我试图理解为什么上面的函数和这个新函数不起作用
def zeros(n)
trailing_zeros(n) if n == 1
zeros(n-1) * n
end
def trailing_zeros(number)
sort_sum = number.to_s.split(//).reverse
counter = 0
until sort_sum[counter] != "0"
counter += 1
end
return counter
结束
置零(12)
我也一直得到这个输入的零,我只是不知道为什么。起初,这是因为我认为尾部的zeros函数需要由zero定义,但后来我得到了一个堆栈级别太深的错误。当我使用require PRYLE并查看这条线时:
trailing_zeros(n) if n == 1
零总是传递给它。我感到很沮丧,因为我现在应该知道我的基本知识了。还有一个问题。什么构成堆栈级别太深的错误?您不应该
返回循环中的计数器
让循环完成,然后返回最终的计数器
此外,您正在错误地使用,直到<代码>直到
将在条件为假时执行其主体(即
将“a”放置到假
将无限运行)。当您传递带有尾随0的任何数字时(当您反转数字的字符串版本时),您的条件是从开头true开始,因此,直到立即退出
为什么不试试呢(基于你的方法,但有点鲁比):
排序(sort)sum[counter]的初始值可能为“0”,在这种情况下,循环从未运行,最后一个计算值将返回,这是您将计数器初始化为0的结果,因此有意义。为了澄清你的循环从未运行过
def trailing_zeros(number)
sort_sum = number.to_s.split(//).reverse
counter = 0
until sort_sum[counter] != "0"
counter += 1
end
counter
end
将返回移出循环
将==0更改为=0您希望在零用完时停止 您的循环是:
until sort_sum[counter] == "0"
转换为数组中的“直到你击中一个0”。如果输入为1200,sort\u sum[计数器]=“0”
第一次计算为true
,从不进入循环
要做到这一点而不在Ruby中循环,请考虑:
def trailing_zeros(number)
number.to_s.split(//).reverse.find_index{|digit| digit != "0"}
end
它在数字数组中找到第一个不是零的条目(请参阅)。如果我们可以重写,它仍然是1而不是0。我只需要做数字。to_[/0*$/]。size
:)@DaniëlKnippers绝对!但是作为一个“Kata”,我不想完全改变OP的方法,只是用一种更为Ruby的风格来处理他的思维方式。在循环中使用返回计数器
将在循环完成之前退出该方法。
def trailing_zeros(number)
number.to_s.split(//).reverse.find_index{|digit| digit != "0"}
end