Ruby中的小脚本循环问题
我正在做一个Ruby练习,但没有得到我想要的输出 问题开始于我的算法的第2步,我想。while循环的计数器让我有点困惑,我不知道如何结束while循环。但除此之外,我认为代码基本上还可以 编写一个程序,该程序将查找1000到3000之间的所有这些数字(均包括在内),使数字的每个数字都是偶数 获得的数字应以逗号分隔的顺序打印在一行上 我想实施:Ruby中的小脚本循环问题,ruby,Ruby,我正在做一个Ruby练习,但没有得到我想要的输出 问题开始于我的算法的第2步,我想。while循环的计数器让我有点困惑,我不知道如何结束while循环。但除此之外,我认为代码基本上还可以 编写一个程序,该程序将查找1000到3000之间的所有这些数字(均包括在内),使数字的每个数字都是偶数 获得的数字应以逗号分隔的顺序打印在一行上 我想实施: 迭代整个范围(1000..3000),识别所有even,并将它们存储到名为array\u evens的单独数组中 迭代数组\u evens并将每个偶数分成
1000..3000
),识别所有even,并将它们存储到名为array\u evens
的单独数组中数组\u evens
并将每个偶数分成单独的数字偶数?
对所有这些数字进行迭代,确定每个数字是偶数还是假all\u evens\u baby
range = (1000..3000)
array_even = Array.new()
even_digits_number = []
n = 0 #counter variable
all_evens_baby = []
even_or_odd = nil
range.select do |x|
if x.even?
array_even = array_even.push(x)
while (n <= array_even.length)
#The placement of this while loop may be wrong.
#iterate over all evens to divide all numbers into singular digits
current_divided_number = array_even[n].to_s.chars
current_divided_number.map do |x|
#iterate over all digits to determine if even or odd
even_or_odd = x.to_i.even? #=> true or false
if even_or_odd == true
all_evens_baby = even_digits_number.push(array_even[n])
else
end
end
n+=1
end
end
end
范围=(1000..3000)
array\u偶数=array.new()
偶数数字数=[]
n=0#计数器变量
所有的孩子=[]
偶数或奇数=零
range.select do | x|
如果x是偶数?
数组_偶数=数组_偶数。推送(x)
while(n)对还是错
如果偶数或奇数==真
all\u evens\u baby=偶数数字\u数字。推送(数组\u偶数[n])
其他的
结束
结束
n+=1
结束
结束
结束
这应该可以完成以下工作:
range = (1000..3000)
# Return all values from range where the block evaluates to true and put them into a list called result
result = range.select do |number|
# convert the number to a string and convert every character back to a number (digits) then check if all digits are even
number.to_s.chars.map(&:to_i).all? { |n| n.even? }
end
# create a string from the number where elements are spearated by a ','
puts result.join(',')
说明:
result = range.select
returns the value
这应该可以做到:
range = (1000..3000)
# Return all values from range where the block evaluates to true and put them into a list called result
result = range.select do |number|
# convert the number to a string and convert every character back to a number (digits) then check if all digits are even
number.to_s.chars.map(&:to_i).all? { |n| n.even? }
end
# create a string from the number where elements are spearated by a ','
puts result.join(',')
说明:
result = range.select
returns the value
首先,尝试让当前代码正常工作——离目标不远:
range = (1000..3000)
array_even = Array.new()
all_evens_baby = []
range.each do |x|
if x.even?
array_even.push(x)
end
end # you'r done here, step 1 is finished.
# shorter is: array_even = range.select(&:even?)
array_even.select do |x|
current_divided_number = x.to_s.chars
n = 0 #counter variable
current_divided_number.each do |d|
n=n+1 if d.to_i.even?
end
all_evens_baby << x if n == 4
end
puts all_evens_baby.join(",")
首先,尝试让当前代码正常工作——离目标不远:
range = (1000..3000)
array_even = Array.new()
all_evens_baby = []
range.each do |x|
if x.even?
array_even.push(x)
end
end # you'r done here, step 1 is finished.
# shorter is: array_even = range.select(&:even?)
array_even.select do |x|
current_divided_number = x.to_s.chars
n = 0 #counter variable
current_divided_number.each do |d|
n=n+1 if d.to_i.even?
end
all_evens_baby << x if n == 4
end
puts all_evens_baby.join(",")
这是一行中的解决方案
all_evens_baby=(1000..3000).select {|a| a.even?}.map {|i| i.to_s.chars}.flatten.map {|i| i.to_i}.select {|i| i.even?}
这是一行中的解决方案
all_evens_baby=(1000..3000).select {|a| a.even?}.map {|i| i.to_s.chars}.flatten.map {|i| i.to_i}.select {|i| i.even?}
您使用的是哪个ruby版本?我使用的是版本2.4您使用的是哪个ruby版本?我使用的是版本2.4