gpt4 book ai didi

Ruby 字符串比较

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

当我尝试在 CodeAcademy Labs 中使用 rps_game_winner 方法(见下文)时,它可以很好地处理以下输入:

> rps_game_winner([ ["Dave", "P"], ["Armando", "S"] ])
valid value: p
valid value: s
=> ["Armando", "S"]

> rps_game_winner([ ["Allen", "P"], ["Richard", "P"] ])[0]
valid value: p
valid value: p
=> "Allen"

当我将它提交给自动评分器作业时,它总是失败并显示 NoSuchStrategyError

Failure/Error: rps_game_winner([ ["Dave", "P"], ["Armando", "S"] ])[0].should eq("Armando"), "Incorrect Winner returned"
NoSuchStrategyError:
NoSuchStrategyError

有人可以帮忙吗?谢谢。

def rps_game_winner(game)
raise WrongNumberOfPlayersError unless game.length == 2
a1=[(game[0][1]).downcase]
a2=[(game[1][1]).downcase]
a3=a1.to_s
a4=a2.to_s
valid=["r","p","s"]

if(valid.include?(a3))
puts "valid value: "+a3
else
raise NoSuchStrategyError
end

if(valid.include?(a4))
puts "valid value: "+a4
else
raise NoSuchStrategyError
end

if(win(a1, a2))
return game[0]
else
if a1.eql?(a2)
return game[0]
else
return game[1]
end
end

return game[0] if a1.eql?(a2)
end

最佳答案

首先,我不知道你的家庭作业的背景。但是根据 NoSuchStrategyError,它当然命中了 valid.include?(x)

原因可能是(我假设)不同版本的 Ruby(1.8 codeacademy Labs 与 1.9 autograder)。因为 Array#to_s 在 1.8(join) 和 1.9(inspect) 上的行为不同。

a1=[(game[0][1]).downcase]
a2=[(game[1][1]).downcase]
a3=a1.to_s
a4=a2.to_s
valid=["r","p","s"]

在 1.8 中:a3 将类似于“s”。

在 1.9 中:a3 将类似于“[\"s\"]”。

请检查此链接: Ruby 1.9 Array.to_s behaves differently?

解决这个问题:

  a1=game[0][1].downcase
a2=game[1][1].downcase

删除a3和a4,只比较a1和a2在1.8和1.9上应该没问题。

除此之外,您还可以通过以下方式删除一些冗余(与您的问题无关):

  [a1, a2].each do |x|
if valid.include?(x)
puts "valid value: #{x}"
else
raise NoSuchStrategyError
end
end

关于Ruby 字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12802406/

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