CODY数学工作中的断言失败

时间:2016-02-26 06:24:25

标签: matlab

问题是问题23,找到完美的正方形。我的代码如下所示:

function b = isItSquare1(a)
if any(ismember(a,a.^2))==0
    b='false';
else 
    b='true';
end
end

我得到Assertion failed,而使用此功能是正确的:

function b = isItSquare(a)
c=0;i=1;
b='false';

while c==0&i<=length(a)
if length(find(a==a(i)^2))~=0

b='yes';

c=1;
end
i=i+1;

end

b
end

Cody接受我无法理解的答案为什么?提前谢谢。

1 个答案:

答案 0 :(得分:1)

MATLAB具有布尔类型(类型称为&#34;逻辑&#34;在MATLAB中),truefalse(通常用10表示)。这与字符串'true' / 'false'相同。比较以下内容:

>> x = 'true'
>> y = true

workspace

这是两个根本不同的东西。如果您使用==比较这些值:

>> 'true' == true    
ans =
     0     0     0     0

然后MATLAB将'true'作为字符向量处理,并将每个值与true进行比较,返回false=0。 然而

>> true == 1
ans =
     1

现在,针对您的问题:Cody上的第一个测试套件是

a = [2 3 4];
assert(isequal(isItSquared(a),true))

即。输出必须是true而不是'true'。因此,在代码中将'true'替换为true,将'false'替换为false,并且断言应该通过。

一个小提示:任何比较运算符,例如==~=<,...自动创建逻辑(truefalse)作为输出,例如:

>> x = (1 == 2)
x = 
    0