gpt4 book ai didi

ruby - 对于某些参数返回 true 而不是 false 的方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:48 24 4
gpt4 key购买 nike

嗨,我有一个方法 XO

  • 如果字符串具有相同数量的“x”和“o”,则返回true

  • 如果 x 多于 o 则返回 false,反之亦然

  • 当存在 NO x 和 o 时返回true

这些应该是正确的测试:

XO("ooxx") => true
XO("xooxx") => false
XO("ooxXm") => true
XO("zpzpzpp") => true // when no 'x' and 'o' is present should return true
XO("zzoo") => false

出于某种原因,我的方法总是返回 true,我不明白为什么。

def XO(str)
x = str.count("o" "O")
y = str.count ("x" "X")
if x == y
true
elsif
str.split.select { |x| !x.include?("o" "O") && !x.include?("x" "X") }
true
else
false
end
end

我是 ruby​​ 的新手,很抱歉我的代码很糟糕。

最佳答案

您的代码的问题在于这一行:

str.split.select { |x| !x.include?("o" "O") && !x.include?("x" "X") }

在字符串没有 'x' 或 'o' 的情况下将返回一个空数组 []。在 Ruby 中,任何数组都被认为是真实的,即使是空数组。所以你的代码总是在这里返回 true。您可以通过检查数组是否为空来修复它:

def XO(str)
x = str.count("o" "O")
y = str.count ("x" "X")
if x == y
true
elsif
str.split.select { |x| !x.include?("o" "O") && !x.include?("x" "X") }.empty?
true
else
false
end
end

此代码将运行良好并执行您想要的操作。然而,它太复杂了!如果您查看您的要求:

  • 如果字符串中'x'和'o'的数量相同则返回真
  • 如果 x 多于 o 则返回 false,反之亦然
  • 当存在 NO x 和 o 时返回真。

当没有 x 和 o 时,您可以说实际上有 0 个 x 和 0 个 o,这意味着 'x' 和 'o' 的数量相同。这意味着您可以这样做:

def XO(str)
x = str.count("o" "O")
y = str.count ("x" "X")
x == y
end

在没有任何 'x' 或 'o' 的情况下,您将得到 0 == 0,它会返回 true,就像您想要的那样。

关于ruby - 对于某些参数返回 true 而不是 false 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45217066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com