将输出存储到阵列中使用的变量
问题描述:
下面我的代码的片段翻转硬币并输出10个总正面或反面的结果。将输出存储到阵列中使用的变量
(例如元首尾巴尾巴首脑...)
我想这个存储到一个变量,我可以把它变成一个数组,并使用其字符串。
%w [动作]只输出字符串“act”。我怎样才能得到这行代码来从行act = coin.flip输出我的字符串数组?
更新并添加全码
class Coin
def flip
flip = 1 + rand(2)
if flip == 2
then puts "Heads"
else
puts "Tails"
end
end
end
array = []
10.times do
coin = Coin.new
array << coin.flip
end
puts array
答
此:
10.times do
coin = Coin.new
act = coin.flip
end
不产生的阵列。它只创建10个硬币翻转并将它们全部抛出,实际上这个表达式的结果是10.如果你想要一个数组,你需要创建一个。
你可以采取道格拉斯的方法或尝试一些更习惯的东西。
Integer#times
方法返回一个枚举器,因此您可以使用Enumerable中的任何方法,而不是直接将块交给它。特别是,你可以使用collect
在一个漂亮的一小段代码来构建一个数组:
a = 10.times.collect { Coin.new.flip }
这使你在Array a
10个翻转,然后你可以puts a
或puts a.join(', ')
或任何你想要的。
的%w[]
不会工作,因为这是用于生成Array of whitespace separated words:单词
%w[]
非插阵列,用空格
所以%w[a b c]
只是一种说法['a', 'b', 'c']
的更好的方式分离并且%w[]
中的单词被视为单引号字符串,而不是要评估的变量或方法调用。
似乎有一些编辑回事。您还需要修改flip
方法回报翻转,而不是打印:
def flip
flip = 1 + rand(2)
if flip == 2
"Heads"
else
"Tails"
end
end
然后你会得到你的头和Rails在数组中。
绝对发现答案。我学到的不仅仅是寻找解决方案。非常感激! – Tony 2012-01-06 01:03:09
@Tony:你可以用'rand(2)替换你的'flip'实现。 '头':'尾巴'(或各种类似的东西)以及。而且你不需要每次都创建一个新的Coin,没有状态,所以你可以'c = Coin.new; a = 10.times.collect {c.flip}'。 – 2012-01-06 01:27:37
太棒了。兰特(2)。即便?? “头部”:“尾巴”将代码缩短了很多,而且的确很有效。 – Tony 2012-01-06 01:43:33