我觉得好像接近一个解决方案,并且已经在一段时间内将其作为一个新手来修补。出于某种原因,为什么我的"\n"
在输出“下一行”并且输出不需要空格时没有消失?
任务:编写一个函数,该函数采用一个表示方格板尺寸的参数。电路板将始终为方形,因此5意味着您将需要一个5x5电路板。
黑色方块将由unicode白色方块表示,而浅色方块将由unicode黑色方块表示(相反的颜色确保在代码大战的黑暗背景下板不会反转)。它应该返回一个字符串,每个方格之间有一个空格,并考虑新的线条。
偶数应返回以黑色方块开头的板。一个奇数应该返回一个以浅色方块开头的板。
输入应该是一个至少为2的整数,否则返回false(Haskell中没有任何内容)。
我很接近,这是我到目前为止所做的:
def checkered_board(dimension)
black = "\u25A1 "
white = "\u25A0 "
checkboard = nil
checker_array = []
if dimension < 2 or dimension.is_a? String
return false
else
count = dimension
while count <= dimension && count > 0
if count % 2 == 0
checkboard = ("\u25A1 \u25A0" + "\n")
checker_array << checkboard
count -= 1
else
checkboard = ("\u25A0 \u25A1" + "\n")
checker_array << checkboard
count -= 1
end
end
end
checkboard = checker_array.join(" ")
p checkboard
end
这是TDD规范:
Test.assert_equals(checkered_board(0), false)
Test.assert_equals(checkered_board(2), "\u25A1 \u25A0\n\u25A0 \u25A1")
注意:如果false
不是整数,隐藏的规范会证明它应该以{{1}}响应。 dimension
和.is_a? String
也不适合我。
输出如此显示,甚至不显示:
.is_a? Integer
感谢您提供的所有帮助:)。
答案 0 :(得分:1)
尝试更改:
if dimension < 2 or dimension.is_a? String
到
if !dimension.is_a?(Integer) || dimension < 2
最左边的测试将首先完成。目前,如果dimension
是String
,则首先将其与2进行比较 - 这将引发错误 - 然后才会对其是String
进行测试。在将对象与另一个对象进行比较之前,需要检查对象的类型。
此外,我认为检查应该是dimension
是Integer
还是String
,而不是Array
。例如,在原始代码中,如果维度为rate
会发生什么?
答案 1 :(得分:1)
join
方法将连接元素并在它们之间插入空格字符。所以来自该计划的这一行:
checkboard = checker_array.join(" ")
将生成此字符串:
"\u25A1 \u25A0\n \u25A0 \u25A1"
将参数省略到join
应产生预期的输出,即:
checkboard = checker_array.join
请参阅the Array join
method上的文档。