首页 文章

在Ruby中生成序列

提问于
浏览
1

我想从用户获取一个整数,并使用迭代生成一个以给定整数开头的五个数字序列,并将每个前一个数字乘以四 . 例如,如果我输入 2 ,则列表应为 [2, 8, 32, 128, 512] .

n = gets
i = 0
while i < 4
  n = n * 4
  p n
  i = i + 1
end

3 回答

  • -1

    有很多方法可以实现您所描述的内容 . 你已经在评论和@Abhimanyu的另一个答案中有一些实现 .

    我遇到的麻烦是迭代序列的值 . 我一直认为它是[2,2,2,2,2]

    您的代码示例将不起作用,因为Kernel#gets不返回数字,而是 String 后跟换行符(因为它使用默认分隔符,来自全局变量 $/ ,恰好是 "\n" ):

    [1] pry(main)> gets
    2
    => "2\n"
    [2] pry(main)> gets.class
    2
    => String
    

    要修复您的代码段,您需要添加 .chomp.to_i 以删除换行符并将其转换为整数:

    def generate_sequence
      n = gets.chomp.to_i
      i = 0
      while i < 4
        n = n * 4
        p n
        i = i + 1
      end
    end
    
  • 0

    我不确定您是否要创建一个数字数组,以便稍后使用或只是想迭代 . 在下文中,您可以将put memo替换为您想要的任何内容,memo将包含您为每次传递查找的值 .

    s = 2 
    (s...(s+5)).reduce(s) do |memo, i| 
        puts memo
        memo = memo * 4 
    end
    
  • 0

    跑:

    (5 - 1).times.with_object([gets.to_i]){|i, a| a.push(a.last * 4)}
    

    输入:

    2
    

    返回值:

    [2, 8, 32, 128, 512]
    

相关问题