下面我的代码片段翻转一枚硬币并输出总共10个头部或尾部的结果。
(例如,Heads Tails Heads Tails ......)
我想把它存储到一个变量中,我可以把它放到一个数组中并使用它的字符串。
%w [act]仅输出字符串“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
答案 0 :(得分:2)
此:
10.times do
coin = Coin.new
act = coin.flip
end
不会产生数组。它只是创建十个硬币翻转并将它们全部抛弃,实际上,该表达式的结果是10.如果你想要一个数组,你需要构建一个。
你可以采取道格拉斯的方法或尝试一些更惯用的东西。
Integer#times
方法返回一个枚举器,因此您可以在其上使用任何Enumerable方法,而不是直接将其移交块。特别是,您可以使用collect
在一段很短的代码中构建一个数组:
a = 10.times.collect { Coin.new.flip }
这会在数组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
然后你将把你的Heads和Rails放在阵列中。
答案 1 :(得分:1)
将act
结果放入数组中。
arr = []
10.times do
coin = Coin.new
arr << coin.flip
end
p arr # => [...]