Ruby 红宝石剪刀
我必须执行石头、布、剪刀游戏的一小部分作为作业。这是我的密码:Ruby 红宝石剪刀,ruby,if-statement,Ruby,If Statement,我必须执行石头、布、剪刀游戏的一小部分作为作业。这是我的密码: class RockPaperScissors # Exceptions this class can raise: class NoSuchStrategyError < StandardError ; end def self.winner(player1, player2) # YOUR CODE HERE puts "player1 = " + player1[1] if (p
class RockPaperScissors
# Exceptions this class can raise:
class NoSuchStrategyError < StandardError ; end
def self.winner(player1, player2)
# YOUR CODE HERE
puts "player1 = " + player1[1]
if (player1[1] || player2[1] != 'R') || (player1[1] || player[2] != 'P') || (player1[1] || player2[1] != 'S')
raise NoSuchStrategyError.new("Strategy must be one of 'R','S','P'")
else
if player1[1] == player2[1]
return player1
elsif (player1[1] == 'R' && player2[1] == 'P') || (player1[1] == 'P' && player2[1] == 'S') || (player1[1] == 'S' && player2[1] == 'R')
return player2
else
return player1
end
end
end
def self.tournament_winner(tournament)
# YOUR CODE HERE
end
end
编辑:player1和player2是格式为[“playername”,“move”]的数组,对于石头、剪刀或布,移动为R、S或p可能会引起兴趣。这是因为
if
条件。实际上,您正在尝试检查player1[1]
或player2[1]
的值是否分别为“R”、“S”、“P”。但是,在编码时,您指示ruby查看player1[1]
值,如果null
或false
,则继续并检查player2[1]!=代码分别为“R”、“S”、“P”。因此,您需要将其更改为以下内容:if((player1[1]!='R'| | player2[1]!='R')|……
@Surya这是我根据您的消息将其更改为的内容,但它仍将进入方法(player1[1]!='R'| | player2[1]!='R'| |(player1[1]!='P'| | | player1[2]!='s'(player1[1241])
现在,您可能会在使用|
时遇到问题。您在上面粘贴的行中说,如果值不是R或值不是P或值不是S。因此,如果值是S,第一个块将为true,这将使语句的其余部分短路。我想您要查找的是(player1[1]!='R'| player2[1]!='R')和&(player1[1]!='P'| player[2]!='P')和&(player1[1]!='S'| player2[1]!='S')
Failures:
1) RockPaperScissors game rock breaks scissors [10 points]
Failure/Error: raise NoSuchStrategyError.new("Strategy must be one of 'R','S','P'")
RockPaperScissors::NoSuchStrategyError:
Strategy must be one of 'R','S','P'
# ./lib/rock_paper_scissors.rb:11:in `winner'
# ./spec/rock_paper_scissors_spec.rb:10:in `block (3 levels) in <top (required)>'