我想从用户获取一个整数,并使用迭代生成一个以给定整数开头的五个数字序列,并将每个前一个数字乘以四 . 例如,如果我输入 2 ,则列表应为 [2, 8, 32, 128, 512] .
2
[2, 8, 32, 128, 512]
n = gets i = 0 while i < 4 n = n * 4 p n i = i + 1 end
有很多方法可以实现您所描述的内容 . 你已经在评论和@Abhimanyu的另一个答案中有一些实现 .
我遇到的麻烦是迭代序列的值 . 我一直认为它是[2,2,2,2,2]
您的代码示例将不起作用,因为Kernel#gets不返回数字,而是 String 后跟换行符(因为它使用默认分隔符,来自全局变量 $/ ,恰好是 "\n" ):
String
$/
"\n"
[1] pry(main)> gets 2 => "2\n" [2] pry(main)> gets.class 2 => String
要修复您的代码段,您需要添加 .chomp.to_i 以删除换行符并将其转换为整数:
.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
我不确定您是否要创建一个数字数组,以便稍后使用或只是想迭代 . 在下文中,您可以将put memo替换为您想要的任何内容,memo将包含您为每次传递查找的值 .
s = 2 (s...(s+5)).reduce(s) do |memo, i| puts memo memo = memo * 4 end
跑:
(5 - 1).times.with_object([gets.to_i]){|i, a| a.push(a.last * 4)}
输入:
返回值:
3 回答
有很多方法可以实现您所描述的内容 . 你已经在评论和@Abhimanyu的另一个答案中有一些实现 .
您的代码示例将不起作用,因为Kernel#gets不返回数字,而是
String
后跟换行符(因为它使用默认分隔符,来自全局变量$/
,恰好是"\n"
):要修复您的代码段,您需要添加
.chomp.to_i
以删除换行符并将其转换为整数:我不确定您是否要创建一个数字数组,以便稍后使用或只是想迭代 . 在下文中,您可以将put memo替换为您想要的任何内容,memo将包含您为每次传递查找的值 .
跑:
输入:
返回值: